Ich möchte die Thematisierung nur eines (benutzerdefinierten) Menüs außer Kraft setzen. Ich kann dies mit phptemplate_menu_tree() tun, aber - natürlich - es überschreibt das Rendering aller Menüs.
Ich habe versucht, FALSE (eine offensichtliche Technik IMO) zurückgeben, wenn das Menü nicht die spezifische, die ich überschreiben möchten - aber dies bewirkt nicht, dass die überschriebene Thema-Funktion aufgerufen werden.
Meine einzige Alternative (wenn das Menü etwas anderes als das spezifische ist) ist die überschriebene Funktion aus phptemplate_menu_tree() aufrufen - aber dies scheint den ganzen Punkt des Überschreibungssystems zu vereiteln, da die Standard-Rendering-Funktion darin fest codiert wird.
Ich hoffe, die Erklärung ist klar, und jede Hilfe wird sehr geschätzt - tks.
UPDATE
Für die Zukunft werde ich erklären, wie ich das Problem gelöst habe.
Zunächst einmal beginnt das Rendering des Menüs mit dieser Funktion in menu.module:
function menu_block($op = 'list', $delta = 0) {
$menus = menu_get_menus();
// The Navigation menu is handled by the user module.
unset($menus['navigation']);
if ($op == 'list') {
$blocks = array();
foreach ($menus as $name => $title) {
// Default "Navigation" block is handled by user.module.
$blocks[$name]['info'] = check_plain($title);
// Menu blocks can't be cached because each menu item can have
// a custom access callback. menu.inc manages its own caching.
$blocks[$name]['cache'] = BLOCK_NO_CACHE;
}
return $blocks;
}
else if ($op == 'view') {
$data['subject'] = check_plain($menus[$delta]);
$data['content'] = menu_tree($delta);
return $data;
}
}
Wenn Sie nur überschreiben möchten, wie einzelne Elemente (Links) gerendert werden, dann können Sie das Themensystem verwenden (es gibt eine Menge Hinweise darauf, wie dies zu tun) - aber wenn Sie die vollständige Kontrolle darüber, wie die gesamte Menübaum gerendert wird (z.B. die Ausgabe in verschachtelte DIVs packen, damit sie auf der Seite zentriert werden kann), dann gibt es keine Möglichkeit, menu_block() zu überschreiben.
Daher habe ich das Menü, das ich anders darstellen wollte, aus der Seite "Blöcke verwalten" (Site Building->Blöcke) entfernt und das Menü direkt in meiner page.tpl.php mit folgendem Code dargestellt: (spitze Klammern entfernt)
$m = menu_tree_page_data('my-menu-id');
$o = "DIV";
foreach($m as $k => $v){
$o .= "SPAN {$v['link']['title']} /SPAN";
}
$o .= "/DIV";
echo $o;
Ich hoffe, das hilft.