我想覆盖只有一个(自定义)菜单的主题。我可以用phptemplate_menu_tree()来做到这一点,但是 - 当然 - 它会覆盖所有菜单的渲染。是否可以选择*覆盖Drupal 6中的主题?
我试着返回FALSE(一种明显的技术IMO),如果菜单不是特定的我想重写 - 但这不会导致重写的主题函数被调用。
我唯一的选择(当菜单不是特定的菜单时)是从phptemplate_menu_tree()中调用覆盖的函数 - 但这似乎打败了覆盖系统的整个点,因为默认的渲染函数将在其中被硬编码。
我希望解释清楚,任何帮助都非常感谢 - tks。
UPDATE
对于将来参考起见,我将解释我是如何解决这个。
首先,在菜单中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;
}
}
如果你只是想覆盖项(链接)个体如何被渲染,那么你可以使用主题系统(有如何完全控制整个菜单树的呈现方式(例如,将输出封装在嵌套的DIV中,以便它可以集中在页面上),那么就没有办法覆盖menu_block()。因此,我删除了不同于管理块页面(网站建设 - >块)呈现的菜单,并使用如下代码直接在我的page.tpl.php中呈现菜单:(删除了尖括号)
$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;
我希望这会有所帮助。
不错的提示,我会研究它。试图给你投票 - 但我仍然太穷... – 2010-06-02 13:03:52
没有骰子。它只是切换整个主题ID取决于您所在的网站的哪一部分。无论如何感谢... – 2010-06-02 13:11:19
是不是你想要的,然后呢? – berkes 2010-06-03 09:10:21