Menü címék módosítása "futáskor"

makgab képe

Üdv!

Futáskor hogyan lehet megváltoztatni egy menüpont címét (title)?
Pontosabban csak hozzá szeretnék fűzni egy stringet.

Pl.:

# .module
...
 $item['main/messages'] = array(
  'title' => 'Messages',
  // ...
  );
...

A hook_menu_alter fv-t nézegetem, de lehet hogy nem ez kell.

Ezzel lehet ezt megoldani?

Drupal verzió: 
Sk8erPeter képe

Ez hasznos lehet:
http://drupal.stackexchange.com/questions/28642/change-menu-link-title-d...
Pont ezt boncolgatják.

Lényeg röviden: pl. hook_menu_alter()-rel title callback-et adsz a menüelemhez, ezzel dinamikusan tudod változtatni a címet. A title callback-kel kapcsolatban hasznos példa, ami pont a dinamikus címváltoztatásra mutat egy lehetséges módot (ha engedélyezve van a Theme developer modul, akkor a letiltás lesz a Devel menüelem linkjében, ha le van tiltva, akkor pedig az engedélyezés): https://drupal.org/node/749902#comment-2757074.
További ötleteket is a fenti linken olvashatsz.

0
0
makgab képe

Kösz, ez működik is:

function mymodule_menu_alter(&$items) {
    $items['main/messages']['title callback'] = 'mymodule_title_callback';
    $items['main/messages']['title arguments'] = array('some string');
}
 
function mymodule_title_callback($arg1) {
    $title = $arg1;
    return $title;
}

A mymodule_menu_alter() - ha jól látom - minden oldalhíváskor meghívódik automatice?

0
0
szantog képe

"A mymodule_menu_alter() - ha jól látom - minden oldalhíváskor meghívódik automatice?"

Nem. A callbackek hívódnak meg, a hook_menu és hook_menu_alterekben definiált cuccok kesselődnek, nem is kicsit. Szóval menu_alterbe nem tehetsz semmilyen dinamikus dolgot.

0
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

makgab képe

Látom, "cache clear" estén fut csak le. Akkor ilyet nem lehet a Drupal-ban?
:(

0
0
makgab képe

Nekem most így működik:

# .module
$items['main/messages'] = array(
    'title callback' => 'mymodule_title_callback',
    'title arguments' => array(NULL),
    'title' => 'Messages',
 
//...
 
function mymodule_title_callback() {
  // any code...
  return $newtitle,
}

Minden oldahíváskor lefut. :)

0
0
Sk8erPeter képe

Most a korábbi megoldásodhoz képest nem változtattál túl sokat, csak annyit, hogy nem passzolsz át argumentumot a title callback-nek... Ez meg nem jelent érdemi módosítást, az említett problémák attól még felmerülhetnek. A korábbi megoldásban mondjuk amúgy is meglehetősen értelmetlen volt, hogy argumentumként passzoltad át az új címet, stringként, és aztán azt használtad fel egy az egyben... :) Ilyen alapon akkor minek a title callback?

0
0
aboros képe

gondolom a posztolt kódok csak vázlatosan mutatják a megoldás miben létét.

0
0

-
clear: both;

Sk8erPeter képe

Lehetséges, hogy így van, csak azért említettem meg, hogy ne rossz végéről fogja meg a kérdést, meg hogy a callback-re koncentráljon, ne a hook_menu_alter-ben lévő kódra (amire írta szantog is, hogy annak a tartalma cache-elődik, erre értettem, hogy az említett para felmerül, ha azzal foglalkozik), mert a "Látom, "cache clear" estén fut csak le. Akkor ilyet nem lehet a Drupal-ban? :(" megjegyzéséből úgy tűnt, még nem vágta, hogy maga a title callback hívódik meg mindig, a hook_menu_alter pedig nem - ne ott akarja átadni tehát a "dinamikusan változó" címet ;)

0
0
makgab képe

Az a különbség a kettő között, hogy az első esetben menu_alter()-ben használtam a 'title callback'-et, míg a második esetben a menu $items-ben.
Működik, minden oldalhíváskor lefut és szépen frissül a "title" mező.

A kód csak minta volt, a lényeget posztoltam, igen.

Köszönöm a segítséget!!

0
0
Sk8erPeter képe

Ja, hogy a 'main/messages' útvonalat saját modulból definiáltad? Mert akkor valóban értelmetlen a hook_menu_alter használata, amikor a hook_menu-implementációban, ugyanabban a modulban, Te magad hozod létre az egészet. :) Eddig számomra úgy tűnt, egy meglévő, más modul által definiált működést szeretnél felülbírálni (végül is az _alter-ek erre valók), de akkor valószínűleg én értettem félre. :)

0
0