首页 > PHP > Drupal菜单系统

Drupal菜单系统

来源:原创 作者:thomas 分类:PHP 阅读:793 日期:2014-09-25

定义导航菜单,并路由基于URL的页面请求到指定代码。

Drupal菜单系统驱动从用户角度看到的导航系统和Drupal用来响应浏览器中传递的URL的回调系统。因此,理解好菜单系统是创建负责模块的基础。另外,允许从Drupal的管理接口定义自定义菜单,该菜单脱离了menu.module的范畴。

Drupal的菜单系统遵循一个简单的路径继承规则。hook_menu()的实现定义出了菜单项并赋予他们路径值。Drupal的菜单系统聚集这些项,并从路径上判断菜单继承关系。如果路径定义如下:

a, a/b, e, a/b/c/d, f/g, 和 a/b/h,则菜单系统的结构如下:

a

    a/b

        a/b/c/d

        a/b/h

e

f/g

注意,路径上的元素个数并不能决定菜单项在菜单树上的深度。

当响应一个页面请求时,菜单系统将查看浏览器传过来的路径请求是否被注册为一个回调函数的菜单项。如果没有注册,系统将搜索菜单树以查找最完整的匹配项。例如在上述菜单树中路径a/b/i被请求,回调a/b将被使用。

查找到的回调函数将被调用,并把菜单项的"page arguments"属性中定义的参数传递给回调函数。且该属性必须为数组。这些参数之后,路径中的任何剩余项将被追加到参数列表。如此,上面的a/b回调项可以响应a/b/i请求和a/b/j请求。

回调函数的访问权限也受到菜单系统的保护。每个菜单项的"access callback"回调以及可选的"access arguments"在页面回调执行前将被调用。如果返回True,访问将被授权,否则,将被禁止。默认本地任务菜单项省略该属性,并使用它的父菜单项提供的该值。

在默认的Drupal接口中,你将注意到许多链接被渲染为选项卡。它们在菜单系统中被称为"local tasks",默认情况下,它们被渲染为选项卡,尽管可以被渲染为其他形式。本地任务函数在大多数方面和其他的菜单项一样。如果可能的话,尽量定义这些任务的名字为短动词将会非常方便。另外,对于每个集合,提供一个默认的本地任务项。当访问一个本地任务的父菜单项时,默认的本地任务将被渲染,当其被选中时。其提供一个常用的标签以利于用户体验。指定的默认本地任务项并不链接到它提供的路径上,而是链接到它的父菜单项的路径上。默认本地任务的路径仅用于将其放置到菜单继承项的合适位置。

到目前为止所描述的一切均保存在menu_router表中。menu_link表保存着可见的菜单链接。默认这些菜单在钩子hook_menu()中定义,但你仍可以通过menu_link_save()函数来添加。

 

热门文章 更多>

微信扫一扫,关注技术十日谈