Drupal 处理一个url请求流程

参考《Drupal专业开发指南》p16,或者查看drupal到index.php文件了解详细信息。

 

1.引导指令流程,调用drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);加载include的函数

在bootstrap.inc中定义

包括如下处理流程:

a.配置

b.早期页面缓存

...

 

2.处理一个url请求,调用menu_excute_active_handler(); //解析URL 路径

在menu.inc中定义

具体细节:

    1.调用menu_get_item函数获取$router_item菜单系统URL的信息,包括访问权限access,页面回调函数page_callback,页面模板参数page arguments,路径映射map等等。

    2.根据1的返回结果调用返回不同的结果。如果$router_item['access']=TRUE,则调用相应的菜单回调函数。

其中返回结果有:

a.根据url路径解析好的html代码

这是最普遍的结果,通常是调用菜单回调函数获取到的内容。

 

b.MENU_NOT_FOUND

系统找不到用户给出的url路径

 

c.MENU_ACCESS_DENIE

用户没有权限访问这个路径

 

d.MENU_SITE_OFFLINE

网站没有上线

 

3.主题化数据,对于在2中返回到a结果,调用theme('page', $result);

系统寻找对应的主题page模板,然后填充得到最终到html代码展示给用户。

在theme.inc文件中定义

其中处理流程如下:(参考 http://api.drupal.org/api/drupal/includes--theme.inc/function/theme/6)

    1.调用func_get_args(),获取调用这个函数传进来的参数信息,以便确定$hook类型(上面的第一个参数,例如,‘page’)。

    2.通过主题注册表获取这个url对应的$info信息,包括file,path,include files,function,arguments,template等等,为下一步做准备。

    3.如果$info['function'] 不为空,说明这次调用theme函数的是一个回调函数填充数据,则调用相   应的回调函数返回结果。

      3a1.否则,说明要使用模板填充数据返回。

      3a2.首先获取模板引擎预定义的基本variables。

      3a3.然后根据获取到的$info['preprocess functions']预处理函数,依次逐个调用。

      //比如,$hook='page',则这些预定义的函数分为可能为:template_preprocess,template_preprocess_page,cms_node_preprocess_page, ctools_preprocess_page,page_title_preprocess_page,nodewords_preprocess_page,rootcandy_preprocess_page,nodereference_explorer_preprocess_page

//具体这些函数 怎么设定的我暂时还不明白,但是其中有2个函数template_preprocess,template_preprocess_page是drupal系统本身就有的框架处理函数,而rootcandy_preprocess_page是相应主题里面的预处理函数。而其他的就是各个模块里面定义的  。

      3a4.经过了上面的预处理函数到依次调用,drupal就能获取到了这次主题使用的模板文件名字$variables['template_files'],drupal就调用drupal_discover_template等函数加载模板,返回相应的html代码。

 

4调用drupal_page_footer();

 

3a.对于其他异常返回,分别调用对应到函数去处理。最后也是主题化数据。

例如,对于返回值为MENU_ACCESS_DENIE,调用函数drupal_access_denie()去处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值