Я хочу переопределить темы только одного (пользовательского) меню. Я могу сделать это с помощью phptemplate_menu_tree (), но - конечно - он отменяет рендеринг всех меню.
Я пытался вернуть FALSE (очевидный метод IMO), если меню не является тем, которое я хочу переопределить, но это не вызывает вызов функции переопределенной темы.
Моя единственная альтернатива (когда в меню есть что-то отличное от конкретного) - вызывать переопределенную функцию из phptemplate_menu_tree () - но, похоже, это разрушает весь смысл системы переопределения, поскольку функция рендеринга по умолчанию будет жестко закодировано в нем.
Я надеюсь, что объяснение ясно, и любая помощь очень ценится - tks.
UPDATE
Для справки в будущем я объясню, как я это решил.
Прежде всего, рендеринг меню начинается с этой функции в menu.module:
<pre>
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;
}
}
Если вы хотите изменить только то, как отображается отдельный элемент (ссылки), вы можете использовать систему тем (есть множество ссылок на то, как это сделать) - но если вы хотите получить полный контроль над тем, как весь отображается дерево меню (например, оборачивая вывод во вложенные DIV, чтобы его можно было центрировать на странице), тогда невозможно переопределить menu_block ().
Поэтому я удалил меню, которое хотел визуализировать иначе, чем страница администрирования блоков (site building-> blocks), и визуализировал меню прямо в моем page.tpl.php, используя код, подобный следующему: (угловые скобки удалены)
<pre>
$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;
Надеюсь, это поможет.