跳转到主要内容
东方龙马 提交于 25 July 2011

通常采用的方式如下所示:Drupal请求所有启用的模块来提供一个菜单项数组,每个菜单项都包含了一个数组,其中以路径为键,里面还包含了路径的一些相关信息。一个模块必须提供的一段信息就是页面回调(page callback)。在这里,回调就是一个PHP函数的名称,当一个浏览器请求一个特定的路径时就会调用它。当一个请求到达时,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(),从而为浏览器返回一个网页。

图4-1和4-2图形表示了这一流程。

 

图4-1菜单分发流程概貌

注意图4-1中的获取菜单数组(Get menu array)这一部分。在这一流程中Drupal构造了数组$menu,它包含了每一菜单项的详细信息,比如菜单项的路径,允许那些人访问,子菜单项,等等。图4-2展示了Drupal如何构造菜单数组的概貌。

 

图4-2菜单数组构造流程概貌

Taxonomy upgrade extras