hook_menu()鉤子可讓模塊來註冊如何處理URL請求的路徑,路徑能夠只使用來處理URL請求,也能夠註冊一個連接做爲導航菜單。一個路徑和它對應的信息一般被叫作「菜單路由項」(menu router item),這個鉤子不多被使用(例如在新的模塊被啓用的時候),結果被緩存在數據庫中。html
hook_menu()鉤子的實現一般返回一個關聯數組,它的的鍵值就是路徑,它的值就是一組相關屬性的關聯數組。它的返回值主要包括如下字段:node
title:必填項,菜單項的標題數據庫
title callback:用來建立標題的回調函數,默認使用t()函數翻譯,若是想使用原字符,設置爲falseapi
title arguments:傳遞給t()函數的參數或者自定義的回調函數數組
description:菜單項的說明瀏覽器
page callback:用戶訪問URL地址時顯示頁面的回調函數,若是未設置,則使用父菜單項的回調函數。例如咱們設置了菜單項bar/foo緩存
<code> function test_menu() { $items['bar/foo'] = array( 'page callback' => 'test_abc_view', ); return $items; }函數
function test_abc_view($ghi = 0, $jkl = '') { // ... }
</code>url
當請求url路徑‘bar/foo’時,回調函數test_abc_view被執行,參數$ghi和$jkl使用默認參數值。 當請求url路徑‘bar/foo/123/456’時,回調函數test_abc_view被執行,參數$ghi的值爲123,而$jkl的值爲456,這個參數是自動從url串中獲取並傳遞給回調函數。翻譯
page arguments:傳遞給page callback的一個數組。
delivery callback:用於打包和發送結果到page callback函數和瀏覽器的回調函數,默認值爲drupal函數drupal_deliver_html_page(),除非是一個從父菜單繼承的值(此處不太明白)。值得注意的是,這個回調函數在訪問權限驗證失敗的狀況下也會執行,因此咱們在定義這個回調函數時要考慮到這點。
access callback:訪問權限控制的回調函數,返回TRUE表示用戶有權限訪問該菜單項,返回FALSE則沒有權限訪問。也能夠是一個布爾常量或數字來代替回調函數。默認爲drupal函數user_access()。
access arguments:傳遞給access callbac回調函數的數組參數。若是回調函數是從父菜單項繼承的,則該參數也會從父菜單繼承,除非在子菜單中定義覆蓋繼承的值。
theme callback:可選。返回drupal系統中存在的機器可讀的主題的名稱,若沒有提供,則從父菜單中繼承。若是沒有定義該回調函數或者該函數沒有返回當前drupal中定義的可用的主題,則由drupal函數hook_custom_theme()或者默認主題決定。通常狀況下,這個回調函數主要用於那些和特定主題緊密相關的頁面(好比一個模塊容許根據用戶的角色動態的設置主題)。
theme arguments:傳遞給theme callback回調函數的數組。
file:定義page callback函數的文件,在調用時要包含進來。這個應該設置爲相對於當前模塊 的路徑。這個值只適用於page callback,不適用於其餘回調函數。
file path:定義上述file參數文件所在的路徑。
load arguments:傳遞給通配符對象加載器的數組參數。例如,一個模塊註冊了一個路徑‘node/%node/revisions/%/view’,該參數設置爲array(3),‘%node’表示使用node_load()加載函數來加載頁面,參數中的3表示把路徑中第4段傳遞給node_load()(數字索引從0開始),所以,若是請求路徑‘node/12/revisions/29/view’,則會調用node_load(12,29)。
weight:數字,用於判斷在菜單項中顯示位置,數字越大, 顯示的位置越靠下,默認值爲0,若是權重值同樣,則按照字母順序排列。
menu_name:可選。若是不想該菜單項顯示在導航中能夠設置該項。
expanded:可選。若是設置爲TRUE,而且提供了菜單連接,那麼這個菜單連接始終是展開顯示的,跟在UI管理界面中設置複選框爲勾選的效果是同樣的。
context:可選。定義標籤(tab)顯示的上下文。全部的標籤都默認顯示爲本地任務(local tasks)在頁面上下文中。包括: MENU_CONTEXT_PAGE:(默認)在頁面上下文中標籤顯示爲本地任務。 MENU_CONTEXT_INLIME:標籤在頁面上下文外只顯示爲上下文連接。
tab_parent:對於本地任務菜單項,設置爲本地任務菜單的父菜單項,默認爲該路徑中去除最後一項的值,好比‘admin/people/create’的父菜單項爲‘admin/people’。
tab_root:對於本地任務來講,該項爲最近的非標籤項的值,同tab_parent。
position:在系統管理菜單中顯示的位置,可選爲left或right。
type:描述菜單項屬性的位掩碼,這些位掩碼在menu.inc定義:
options:當從菜單項中建立連接時傳遞給l()函數的選項數組。