Drupal 7 模块开发 建立模块 第一个页面(hook_menu)

建立模块请参考 《Drupal 7 模块开发 建立

如果你要支持中文,文件格式必须保存为 UTF⑻,NO BOM

——————————

hook_menu 定义菜单项和页面反馈。

我们要用自己模块名替换 hook。在这里我们建立1个 my_first_module_menu() 在 my_first_module.module文件里

<?php

function my_first_module_menu() {
$items = array();

$items['mypage'] = array(
'title' => '第1个模块 ―― 页面', //菜单项的名称
'description' => '我的第1个模块页面', //当鼠标移动到菜单项,显示菜单的说明
'page callback' => 'my_page_view', //产生页面内容
'access callback' => TRUE, //所有人都能访问
'type' => MENU_NORMAL_ITEM, //菜单项显示类型
);

return $items;
}

function my_page_view() {
$output = t('这是模块做的第1个页面。');

return $output;
}

注意:结尾不要写 ?>

清空Cache,然后访问
http://www.mysite.com/?q=mypage ,会看到下图

(事实上,这时候你访问任何
http://www.mysite.com/?q=mypage/aaa/bbb 都会访问到这个page)

$items[] 路径

  • $items先在 [ ] 里定义路径,在访问 /mypage 页面时候,去调用 my_page_view 函数产生页面
  • 每个$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() 或 你自定义函数 的参数。可以和路径组件结合
参考: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串参数数组,上面例子没用用到,我们略加修改:

  • 修改1下 $items,路径成为 $items[‘mypage/%/edit’],意思是当访问 mypage/1/edit,或 mypage/2/edit 等,履行此函数
  • 添加 page arguments:’page arguments’ => array(‘hello’, 1),
    ‘hello’ 作为1个常量传给 $arg1
    1 表示路径mypage后面第1层:当你访问 mypage/1/edit 时候,返回就是 1;如果你访问 mypage/world/edit,返回就是world
  • 给函数 my_page_view增加传递参数, function my_page_view($arg1, $arg2)

修改后,完全代码以下:

<?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起出现在主菜单上

(更多参数,渐渐完善)

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » Drupal 7 模块开发 建立模块 第一个页面(hook_menu)

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡