You are here

将URL映射为函数

通常采用的方式如下所示: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-2. 菜单路由器和链接的构建流程概览
 老葛的Drupal培训班 Think in Drupal

Drupal版本: