建立模塊請參考 《Drupal 7 模塊開發 建立》
如果你要支持中文,文件格式必須保存為 UTF⑻,NO BOM
------------------------------
hook_menu 定義菜單項和頁面反饋。
我們要用自己模塊名替換 hook。在這里我們建立1個 my_first_module_menu() 在 my_first_module.module文件里
注意:結尾不要寫 ?>
清空Cache,然后訪問 http://www.mysite.com/?q=mypage ,會看到下圖
(事實上,這時候你訪問任何 http://www.mysite.com/?q=mypage/aaa/bbb 都會訪問到這個page)
$items[] 路徑
每個$items都是對應1個路徑,寫在 [ ] 里。當item用1樣路徑時候,就調用后寫那個$items的。(有文章說和$items里參數weight有關,我測試weight不會影響前后次序)
[ ] 里也能夠用通配符,比方: [node/%/edit]。詳細參見:function hook_menu 里的Wildcards in Paths1段
title 必須
未翻譯的主題
title callback
產生主題的函數。默許是 t()。如果你不想翻譯,就設置FALSE (所以我們沒必要再寫
'title' => t('第1個表單'))
title arguments
傳遞到 t() 或 你自定義函數 的參數??梢院吐窂浇M件結合
參考:Menu item title and description callbacks, localization
description
未翻譯的說明描寫。
page callback
當用戶訪問頁面路徑的時候,調用1個顯示網頁的函數。
如果不寫,父菜單的回調函數將代替履行。也就是說 $items['mypage'] 和 $items['mypage/child'] 會履行1樣內容。
有1個特別回調函數 drupal_get_form(),這個將在后面 Drupal 7 模塊開發 建立、驗證、提交表單(Form) 具體講
page arguments
傳遞給 page callback 函數的1串參數數組,上面例子沒用用到,我們略加修改:
修改后,完全代碼以下:
<?php function my_first_module_menu() { $items = array(); $items['mypage/%/edit'] = array( //修改路徑 'title' => '第1個模塊 ―― 頁面', 'description' => '我的第1個模塊頁面', 'page callback' => 'my_page_view', 'page arguments' => array('hello', 1), //添加參數 'access callback' => TRUE, 'type' => MENU_NORMAL_ITEM, ); return $items; } function my_page_view($arg1, $arg2) { //添加參數傳遞 $output = t('這是模塊做的第1個頁面。'); $output .= '<br />' . $arg1 . ' ' . $arg2; //打印參數 return $output; }
清空Cache,然后訪問 http://www.mysite.com/?q=mypage/world/edit ,會看到下圖
access callback
如果有訪問這頁權限,就要返回TRUE,否則就FALSE(如果不寫,默許是FALSE)。如果false,頁面就會出現 Access denied 提示。
type
描寫菜單項屬性的代碼。許多快捷代碼的常量在 menu.inc 里。
我們這里用了默許項 MENU_NORMAL_ITEM,所以$items里可以不寫 'type' => MENU_NORMAL_ITEM,
經常使用幾種:
- MENU_NORMAL_ITEM,顯示在Navigation菜單列表下,管理員可以拖動或隱藏
- MENU_SUGGESTED_ITEM,和MENU_NORMAL_ITEM1樣,只是默許狀態是Disabled的,需要管理員去手工Enabled
- MENU_CALLBACK 不會產生菜單和面包屑(Breadcrumbs)。只是簡單注冊1個路徑,當路徑被訪問時,履行相應功能。通常是被API調用。
- MENU_LOCAL_ACTION 在父菜單里,顯示1個link,引導下步操作。比方:添加1個菜單
- MENU_LOCAL_TASK 也是作為1個link,不過通常是以標簽(TAB)格式顯示
- MENU_DEFAULT_LOCAL_TASK 和 MENU_LOCAL_TASK 1樣是標簽(TAB),不過是默許標簽,和父菜單路徑1樣(這個itmes的路徑只是表達是父菜單)
想深入了解,可以打開目錄下 /modules/menu/menu.modules文件,然后結合http://www.yoursite.com/?q=admin/structure/menu/manage/navigation,幫助你了解
file
在頁面回調前,這個文件已被包括。允許頁面回調函數在另外一個分開的文件里。除非這個在“file path”已指定路徑,否則這個文件在履行模塊的同1個目錄里。這個文件不合適其他回回調(call back),只適用于 page callback
file path
這是指定file所在目錄。默許路徑是當前模塊履行hook所在路徑
menu_name
如果你不要把這個菜單項放在Navigation下,就能夠在這里指定。比方:'menu_name' => 'main-menu',這樣就會和Home1起出現在主菜單上
(更多參數,漸漸完善)