我想要在每個node的頁面上新增一個Tab,
於是我寫了一個module...把下面這一段加到module裡hook_menu的實做中:
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(array('nid' => arg(1)));
if ($node->nid) {
$items[] = array(
'path' => 'node/'. arg(1) .'/configure',
'title' => t('configure'),
'type' => MENU_LOCAL_TASK
);
}
}
enable module後卻沒有出現我新增的Tab......
可是如果我把同一段code加到node.module裡的hook_menu實做裡就沒有問題
這是為什麼......
建議你裝devel這個module
menu system的原理是這樣,你可以在其他module看到$may_cache這個變數,但你可能沒有注意到他的用處。
但其實對一個module設計者而言,他是很重要的,他是用來告訴drupal menu hook在invoke所有hook_menu時,要不要把該路徑cache起來,如果$may_cache==TRUE,該路徑會被送至cache table裡快取,不信可以看看cache table的前幾行的資料,看看有沒有menu的cache;反之,如果$may_cache==FALSE,那該路徑就不會被cache起來囉,每次要造訪那一面的人,都得invoke全部module裡的hook_menu,才能找的到他的頁面路徑,效能自然有差了。
這跟你問的問題到底有什麼關係呢... drupal的tab是根據load出來的menu去建的,至於load出來的menu如果是舊的cache,你的tab當然就出不來囉!
所以,裝個devel,去清空cache看看,你就會發現答案了。
(devel還有很多好用的功能囉...)