首页 > Drupal > Drupal菜单系统

Drupal菜单系统

来源:原创 作者:1 分类:Drupal 阅读:939 日期:2014-05-19

万花筒儿童故事

菜单系统是一个拥有3种主要功能的系统:1、回调映射,2、访问控制,3、菜单定制。

当一个请求到达时,Drupal将执行以下步骤:

1.建立Drupal路径。如果路径是一个真实路径的别名,Drupal将找出真实路径并使用它来代替别名。比如,如果管理员使用别名http://example.com/?q=about 来代替http://example.com/?q=node/3(比如,使用路径模块),那么Drupal将会使用node/3作为内部路径。(路径别名)

2.Drupal使用menu_router表来追踪路径与回调函数之间的映射,使用menu_links表来追踪菜单项链接。首先会检查是否需要重新构建menu_router和menu_links表,不过一般在Drupal安装或者更新以后,就很少再会重新构建了。

3.计算出menu_router表中的哪个条目对应于Drupal路径,并构建出一个路由项,来描述即将被调用的回调。

4. 加载需要传递给回调的对象。

5. 检查用户是否有权访问该回调。如果没有的话,返回一个“拒绝访问”消息

6. 根据当前语言,将菜单项的标题和描述本地化。

7. 加载需要的.inc文件

8. 调用回调并返回结果,index.php将调用theme_page(),从而为浏览器返回一个网页。

如果你想在后面的代码执行时覆写页面标题的话,你可以使用drupal_set_title()。

菜单嵌套

让我们再添加一个与它相关的子项:

function menufun_menu() {

   $items['menufun'] = array(

       'title' => 'Greeting',

       'page callback' => 'menufun_hello',

       'access callback' => TRUE,

       'weight' => -10,

   );

   $items['menufun/farewell'] = array(

      'title' => 'Farewell',

      'page callback' => 'menufun_goodbye',

      'access callback' => TRUE,

   );

   return $items;

}

类型为MENU_DEFAULT_LOCAL_TASK的菜单项,它可以继承父菜单项的访问回调和访问参数,不过为了清晰起见,对于这些默认的本地任务菜单项,最好能够为其明确的定义这些键。

注意 在路经中带有通配符的菜单项,即便是将菜单项的类型设置为MENU_NORMAL_ITEM,它也不会显示在导航菜单中。原因很明显:由于路径中包含了一个通配符,所以Drupal不知道如何为该路径构建URL。这是一般情况下的规律,也有例外的情况,因为你可以告诉Drupal使用什么URL,更多详细,可参看本章后面的“使用to_arg()函数为通配符构建路径”。

 

热门文章 更多>

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