Saját adatok nyitva

eMeLA képe

Szerbusztok !

Szerettem volna a Saját adatok (Navigáció) menüpontot állandóan nyitvalévő menüvé alakítani.
Sikerült definiálnom alá egy egy menüpontot, de az csak akkor jelenik meg ha rákattintok a Saját adatok-ra (én azt szeretném, ha mindig látszódjon, természetesen amikor a felhasználó belépett).

A Saját adatok típusa MENU_DYNAMIC_ITEM (ez tiltott az admin menüben)
A lenyitható menüé: MENU_ITEM_GROUPING (ez szerkeszthető, lenyitható)
Sajnos nem elég átírni :)

Valahol át lehet hidalni a problémát, mivel van olyan állapota a manüsornak, amikor le van nyitva. A kérdés hol és mit ? Annyit sikerült kiderítenem, hogy a MENU sql táblában a TYPE mező értéke az állandóan nyitva lévő menü értéke 310 (az admin/settings-é 318). Sajnos a MENU_DYNAMIC_ITEM menüpontot nem tárolja a táblába :(

Van valakinek ötlete ?

Hojtsy Gábor képe

Nézd meg, hogy mit változtat az adatbázisban, ha mindig nyitottként állítasz be egy saját menüpontot, és hogy ezt el lehet-e érni a saját adatok menüpontra.

0
0
eMeLA képe

310-re állítja a TYPE értéket. A baj az a Saját adatok-kal, hogy dinamikusan állítja elő (ugyebár az user után íraja a felhasználó id-jét) és az adatbázisban nem tárolja. Magam is ezzel kezdtem.

0
0

...mit tudok: http://web.termuves.hu

Hojtsy Gábor képe

Ezekszerint a forráskódban leszel kénytelen átírni a user_menu() függvényt.

0
0
eMeLA képe

Az kevés.
A menü előállítására egy globális változót használ $_menu. Követhetetlen mit mikor pakol bele és vesz el. Ráadásul még a cache-ben is tárolja.

Feladtam, íme a direkt megoldás (menu.inc - 4.7.2):

function menu_tree($pid = 1) {
  $menu = menu_get_menu();
 
  if (isset($menu['visible'][$pid]) && $menu['visible'][$pid]['children']) {
    foreach ($menu['visible'][$pid]['children'] as $mid) {
 
      $type = isset($menu['visible'][$mid]['type']) ? $menu['visible'][$mid]['type'] : NULL;
      $children = isset($menu['visible'][$mid]['children']) ? $menu['visible'][$mid]['children'] : NULL;
      $output .= theme('menu_item', $mid, menu_in_active_trail($mid) || ($type & MENU_EXPANDED) ? theme('menu_tree', $mid) : '', count($children) == 0);
 
//------------------------------------------
// ide kerülhet tetszőleges menü 
// a -53 a Saját adatok menüpont ID-je 
//------------------------------------------
if ($mid == -53) $output .= '<li class="leaf"><a href="xy" title="xy">xy</a></li>';
//------------------------------------------
    }
  }
 
 
  return $output;
}

Nem túl elegáns, de működik :)
Az érdekessége, hogy csak akkor jelenik meg amikor a felhasználó bejelentkezik.

0
0

...mit tudok: http://web.termuves.hu

Hojtsy Gábor képe

Mondom, hogy nézd meg, hogy a user_menu hogyan rakja be a menüt. Azt mondja, hogy type legyen MENU_DYNAMIC_ITEM. Lássuk ez mit jelent, nyissuk meg a menu.inc fájlt. Jé, ez mindenféle paraméterekből áll össze. Látjuk, hogy ezeknek a paramétereknek a listájában van egy olyan, hogy MENU_EXPANDED. Mivel ez bitmezőként van megoldva, csak fogni kell, és össze kell ÉSelni a MENU_DYNAMIC_ITEM-mel. Tehát akkor 'type' => MENU_DYNAMIC_ITEM & MENU_EXPANDED lesz a típus meghatározása a user.module kódjában (át kell írni a kódban), Ez elvileg szuperül kell működjön.

0
0
eMeLA képe

Megörültem de nem jó.
A Saját adatok egyszerűen eltünik.

Olybá tűnik nekem, hogy alapból nem teszi bele a $_menu változóba a Saját adatok almenüpontját, csak akkor, ha rákattint valaki a Saját adatok-ra. Magyarán azt kellene szimulálni, hogy valaki kattintott a menüpontra, de oldalt nem hív be (ennek kiderítése meghaladja a pár hónapos PHP tudásomat).

Szerintem a MENU_DYNAMIC_ITEM úgy van megformálva, hogy ne legyen almenüje. Ugyebár az admin részben sem lehet beállítani, hogy lenyitható legyen.

Megjegyzem nem lenne rossz, ha lenne olyan lehetőség a Drupal-ba, hogy olyan menüpontokat lehessen létrehozni, melyek csak bejelentkezés után látszanak.

0
0

...mit tudok: http://web.termuves.hu