我想覆蓋只有一個(自定義)菜單的主題。我可以用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