Drupal 7 模块开发 建立模块 第一个页面(hook_menu)
建立模块请参考 《Drupal 7 模块开发 建立》
如果你要支持中文,文件格式必须保存为 UTF-8,NO BOM
------------------------------
hook_menu 定义菜单项和页面反馈。
我们要用自己模块名替换 hook。在这里我们建立一个 my_first_module_menu() 在 my_first_module.module文件里
<?phpfunction my_first_module_menu() {$items = array();$items['mypage'] = array('title' => '第一个模块 —— 页面', //菜单项的名称'description' => '我的第一个模块页面', //当鼠标移动到菜单项,显示菜单的说明'page callback' => 'my_page_view', //产生页面内容'access callback' => TRUE, //所有人都能访问'type' => MENU_NORMAL_ITEM, //菜单项显示类型);return $items;
}function my_page_view() {$output = t('这是模块做的第一个页面。');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都是对应一个路径,写在 [ ] 里。当item用一样路径时候,就调用后写那个$items的。(有文章说和$items里参数weight有关,我测试weight不会影响先后次序)
[ ] 里也可以用通配符,譬如: [node/%/edit]。详细参见:function hook_menu 里的Wildcards in Paths一段
title 必须
未翻译的主题
title callback
产生主题的函数。默认是 t()。如果你不想翻译,就设置FALSE (所以我们不必再写
'title' => t('第一个表单'))
title arguments
传递到 t() 或者 你自定义函数 的参数。可以和路径组件结合
参考:Menu item title and description callbacks, localization
description
未翻译的说明描述。
page callback
当用户访问页面路径的时候,调用一个显示网页的函数。
如果不写,父菜单的回调函数将代替执行。也就是说 $items['mypage'] 和 $items['mypage/child'] 会执行一样内容。
有一个特别回调函数 drupal_get_form(),这个将在后面 Drupal 7 模块开发 建立、验证、提交表单(Form) 具体讲
page arguments
传递给 page callback 函数的一串参数数组,上面例子没用用到,我们稍加修改:
- 修改一下 $items,路径成为 $items['mypage/%/edit'],意思是当访问 mypage/1/edit,或者 mypage/2/edit 等,执行此函数
- 添加 page arguments:'page arguments' => array('hello', 1),
‘hello' 作为一个常量传给 $arg1
1 表示路径mypage后面第一层:当你访问 mypage/1/edit 时候,返回就是 1;如果你访问 mypage/world/edit,返回就是world - 给函数 my_page_view增加传递参数, function my_page_view($arg1, $arg2)
修改后,完整代码如下:
<?phpfunction my_first_module_menu() {$items = array();$items['mypage/%/edit'] = array( //修改路径'title' => '第一个模块 —— 页面','description' => '我的第一个模块页面','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('这是模块做的第一个页面。');$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_ITEM一样,只是默认状态是Disabled的,需要管理员去手工Enabled
- MENU_CALLBACK 不会产生菜单和面包屑(Breadcrumbs)。只是简单注册一个路径,当路径被访问时,执行相应功能。通常是被API调用。
- MENU_LOCAL_ACTION 在父菜单里,显示一个link,引导下步操作。譬如:添加一个菜单
- MENU_LOCAL_TASK 也是作为一个link,不过通常是以标签(TAB)格式显示
- MENU_DEFAULT_LOCAL_TASK 和 MENU_LOCAL_TASK 一样是标签(TAB),不过是默认标签,和父菜单路径一样(这个itmes的路径只是表达是父菜单)
想深入了解,可以打开目录下 /modules/menu/menu.modules文件,然后结合http://www.yoursite.com/?q=admin/structure/menu/manage/navigation,帮助你了解
file
在页面回调前,这个文件已经被包含。允许页面回调函数在另一个分开的文件里。除非这个在“file path”已经指定路径,否则这个文件在执行模块的同一个目录里。这个文件不适合其他回回调(call back),只适用于 page callback
file path
这是指定file所在目录。默认路径是当前模块执行hook所在路径
menu_name
如果你不要把这个菜单项放在Navigation下,就可以在这里指定。譬如:'menu_name' => 'main-menu',这样就会和Home一起出现在主菜单上
(更多参数,慢慢完善)
Drupal 7 模块开发 建立模块 第一个页面(hook_menu)相关推荐
- Nginx模块开发:模块结构的源码阅读以及过滤器(Filter)模块的实现
Nginx模块开发:模块结构的源码阅读以及过滤器(Filter)模块的实现 一.Nignx中的模块是什么? 二.模块的基本结构 `ngx_module_s` `ngx_command_s` `ngx_ ...
- Android开发之ApiCloud模块开发之模块引用第三方库的问题
因为现在第三方库比较多,所以很多人为了快速开发导致库用烂大街了,但是在模块开发中本人不建议使用第三方库的依赖会有很多问题,要么是资源图片找不到,要么是布局找不到啥的,但是有的需求只有第三方库怎么办呢? ...
- 用户模块开发 分类模块 商品模块 购物车模块
分类表 https://openhome.alipay.com/platform/appDaily.htm?tab=account 沙箱 沙箱环境使用说明 https://docs.open.al ...
- 02-Maven高级-分模块开发、依赖传递、聚合、继承(SpringBoot的部分底层原理)、多模块开发(环境切换)、Nexus私服搭建与使用
文章目录 学习目标 一.分模块开发与设计 1. 分模块开发的意义 问题导入 模块拆分原则 2. 分模块开发(模块拆分) 问题导入 2.1 创建Maven模块 2.2 书写模块代码 2.3 通过mave ...
- 【Linux网络编程】Nginx -- 模块开发(upstream / subrequest)
[Linux网络编程]Nginx -- 模块开发(upstream / subrequest) [1]upstream VS subrequest 简介 upstream 为访问上游服务器,它把Ngi ...
- Android开发之ApiCloud模块开发的注意事项
经过本人多次模块制作打包上传基本总结模块开发的以下坑: 一.模块开发SDK最小版本必须为9,不然就算你SDK模块开发完毕正常运行你在后台云编译也无法通过会报错,提示 minSdkVersion9小于你 ...
- Xposed模块开发教程整理
Xposed模块开发教程 Xposed官网 Xposed官方文档 Xposed框架介绍 了解和使用Android神器Xposed框架 Xposed模块开发 Xposed模块开发入门 在手机状态栏增加显 ...
- 视频教程-微信小程序开发教程(第一阶段、页面设计)(维吾尔语)-HTML5/CSS
微信小程序开发教程(第一阶段.页面设计)(维吾尔语) 毕业于北京邮电大学计算机专业.拥有将近10年的开发经验.精通java.php.python.c/c++.微信开发等等技术! 艾孜麦提阿布都热合曼 ...
- vue教程1:第一个页面HelloVue快速搭建
环境准备 VSCode开发工具 新建第一个页面 打开VSCode,点击File -> New File新建了个空白文件,保存为HelloVue.html 然后在刚才新建的页面,先输入感叹号&qu ...
最新文章
- 《C++面向对象高效编程(第2版)》——3.11 类名、成员函数名、参数类型和文档...
- java启动无线网络连接_在无线模式存在的情况下,如何连接无线网络
- 【CMake】Android Studio 中使用 CMake 编译单个 C++ 源文件 ( 常用的 CMake 命令解析 )
- Android开发--Service和Activity通过广播传递消息
- 青岛互联网java开发_为什么说Java是过去未来的互联网编程(上)
- Pycharm运行时找不到文件问题
- 计算某天是星期几的方法
- 一次绕过360+诺顿的提权过程
- 前端路由的两种实现原理
- 直播电商在新商业环境下的价值分析
- R语言学习 - 热图美化 (数值标准化和调整坐标轴顺序)
- bash编程初体验之if
- Cherno OpenGL 教程
- 知其然不知其所以然!
- asyncio+aiohttp异步免费代理池(已失效)
- Java 对象 、String 、JSON 互转
- 酒桌小游戏喝酒小程序
- 一、Python时间序列小波分析——实例分析
- 关于 Spfile文件误删除 或者 优化错误 恢复
- 第二章 java基础语言(三)
热门文章
- 手机相机里面的m_我的数码相机设置里面有个图像尺寸分L、M、S,有何用
- 会计学原理学习笔记——第一章——总论(1.4会计职能)
- 使用神经网络完成新闻分类
- MSISDN(Mobile Subscriber International ISDN/PSTN number)
- Java字母笔顺_Android实现中文汉字笔划(笔画)、中文拼音排序、英文排序
- 如何在 SAP 中计算物料在某期的库存数量和金额?
- 实现百度搜索框提示语功能
- jq和js用mousemove获取鼠标当前位置
- 厉挣宝------九个努力奋斗的理由
- Flutter中的浮动按钮 FloatingActionButton