hook_search

lili_ képe

D5 alatt fejlesztek

létrehoztam az adatbázisban egy saját táblát melynek a neve: 'szerv_egyseg', ennek a táblának többek között van egy 'kulcsszavak'
nevezetű oszlopa, amibe a megfelelő (karbantartó)személy ',' karakterrel elválasztva felvihet (kulcs)szavakat.
Célom: hogyan tudom a Drupal keresőjét kibővíteni, úgy hogy a Drupal kereső a 'szerv_egyseg' tábla 'kulcsszavak' mezőjében is nézze,
hogy a keresésnek van-e eredménye avagy sem.
Lényeg h nem saját keresőt akarok írni hanem a drupal keresőjét úgymond kibővíteni!!

találtam egy olyat: hook_search($op = 'search', $keys = null) ????

valaki találkozott ilyes jellegű feladattal?

Drupal verzió: 
pp képe

Miért nem jó az, hogy létrehozol egy szerv_egyseg tartalom típust és egy szótárat kulcsszavak néven, amit beállítasz úgy, hogy címkézni lehessen. És már kész is vagy, egy sort se kellett kódolnod. ;)

pp

0
0
lili_ képe

azért nem jó mert kb. 100 db szervezeti egységem van, minden egységnek van saját oldala
és az adatokat adatbázisból kapom ill. szedem elő.
ezért lenne fontos az a megvalósítás amit felvázoltam de amúgy is érdekelne a megoldás.
jelenleg a user modul user_search fvényét nézem valami ehhez hasonlót gondoltam?

tudsz segíteni?

0
0

mini

pp képe

"azért nem jó mert kb. 100 db szervezeti egységem van, minden egységnek van saját oldala
és az adatokat adatbázisból kapom ill. szedem elő."
Ennek ehhez mi köze van?? Hát nem mindegy mennyi van? Az, hogy honnan jön az adat az kit érdekel? Az az érdekes hova kerül. Ne egy táblába kerüljön, hanem legyen egy node és akkor tudod keresni.

"ezért lenne fontos az a megvalósítás amit felvázoltam de amúgy is érdekelne a megoldás.
jelenleg a user modul user_search fvényét nézem valami ehhez hasonlót gondoltam?"
:D Nem tudom, hogy mit gondoltál!

"tudsz segíteni?"
Azt teszem, csak nem hagyod ;)

pp

0
0
lili_ képe

már az egész weblap szinte készen van, én ezt így írtam meg modul szinten...
biztosan jó amit tanácsoltál nekem, tudom h érted a dolgod, csak számomra ez
az út most nem jó, ki fogom próbálni máskor!

szóval van valami ötleted?

0
0

mini

pp képe

A hook_search nem egy csodaszer, azzal csak azt tudod elérni, hogy egy újabb tabot tudjál megjeleníteni a kereső oldalon. A keresést már neked kell megvalósítani.

Szóval a lényeg, hogy ha saját tábláid vannak, akkor saját keresőt kell írnod. Kell egy form és az ott bevitt adatok alapján el kell készítened a listát amit aztán megjelenítesz.

Azért írtam, hogy rossz a kiindulás, mert rossz a kiindulás. Ha van egy házad ami már majdnem kész van de nincs rajta pl. erkély, akkor nem "majdnem kész vagy", hanem egyáltalán nem vagy kész, mert rosszul indultál el. Persze gányolhatsz de legjobban akkor jársz, ha újraépíted az egészet.

Arról most nem beszélek, hogy az adattáblád nem teljesíti az egyes normálformát sem. Tehát ez hibásan volt megtervezve. Ebbe hogy keresel? Like-al? Na ne vicceljünk már!

A kérdésed az volt, hogy :
"Célom: hogyan tudom a Drupal keresőjét kibővíteni, úgy hogy a Drupal kereső a 'szerv_egyseg' tábla 'kulcsszavak' mezőjében is nézze,
hogy a keresésnek van-e eredménye avagy sem."

A válasz az, hogy sehogy, mert a drupal keresője a node-ok között keres. (vagy user, vagy amit megvalósítasz, de nem keres táblákban) Ezért bátorkodtam azt a megoldást javasolni, hogy legyenek node-ok.

pp

0
0
lili_ képe

szóval minden egyes szervezeti egységemhez létezik node!
éppen ezért gondoltam, h minden szervezeti egységhez lesz egy mező, amire ha van találat
akkor előjönne az adott node!

0
0

mini

pp képe

A hook_nodeapi "update index" opja szolgál erre elvileg.

pp

0
0
lili_ képe

rosszul fogalmaztam nincsen szerv egységekhez node :(

vannak számomra fogalmi zavarok, de ma is tanultam jó sokat,
sikerült átírnom a hook_search fvényt és úgy működik ahogyan szerettem volna

mindent köszönök.

0
0

mini

aKRON képe

A megoldást megosztod? ...csakhogy tanuljunk mi is :)

0
0
lili_ képe

 
 
function szemely_menu($may_cache){
 
 
   $items = array(); 
 
   //személyekben lehet keresni
   if (!$may_cache){
 if (module_exists("search")) {
    $items[] = array(
      "path" => "szem/keresese", 
      "title" => t("Személy keresése"),
       "callback" => "user_admin",
       "callback arguments" => array("search"), 
       "access" => user_access("access content"),
        "type" => MENU_NORMAL_ITEM
        );
   }
 
}
return $items;
}
 
 
   function szemely_search($op = "search", $keys = NULL) {
  switch ($op) {
 
  //ezzel a névvel fog visszatérni, azt jelzi h miben lehet keresni
    case "name":
     // if (user_access('access user profiles')) {
       return t("Személyekben");
      //}
 
      //kereséskor ezt kell használni 
    case "search":
        $find = array();
        // Replace wildcards with MySQL/PostgreSQL wildcards.
        $keys = preg_replace('!\*+!', '%', $keys);
 
        /*ez a rész nagyon fontos, itt kell lekérdezni az adatbázis megfelelő táblájából
        ('szemely')
        a megfelelő mezőket ('id', 'name') és be kell azonosítani őket, mi mire való
 
        ---mi alapján végezze el a modul a szó azonosítást: 'name'
        ---ha találat van akkor az eredményként mi jelenjen meg: 'name', amire ha rákattintok
           az eredmény oldala jön elő, vagyis meg kell adnom a keresés eredmények az URL-jét,
           pontosabban azt hogy mi is az, pl: a személy adatait tartlamazó oldal általános 
           URL formája 'emberek/szervegyseg/szemely/%d', %d az adott szemely 'id'-ja
        */
 
                 /*a keresés eredményeit lapozottan íratom ki */
        $result = pager_query("SELECT * FROM szemely WHERE name LIKE ('%s%')", 15, 0, NULL, $keys);
        while ($account = db_fetch_object($result)) {
 
        //itt adom meg h az egyes eredményeknek milyen kulcsai legyenek, kettőt kötelező megadni
        //de erről fentebb olvashatsz is
 
                          /*személy nevére kattintva fog bejönni a hozzá tartozó oldal*/
          $find[] = array("title" => $account->name, "link" => url("emberek/szervegyseg/szemely/". $account->id, NULL, NULL, TRUE));
 
 
      }//while ciklus vége
 
     //és a végén vissza kell adni a keresés eredményeit
        return $find;
 
  }
}
 
 
 

nekem működik, de ha valaki talál benne rosszat stb. stb. szívesen fogadom az ötleteket

0
0

mini