drupal 6源码阅读(3)

第二个函数是 menu_execute_active_handler

根据menu.inc中的注释,这个函数是调用当前path相关的回调函数。看起来回调函数注册可以基于path。该函数有一个返回值,后面的显示函数会根据这个返回值来决定做什么。

暂时不深究这个函数,先看下面的显示函数theme(‘page’, $return);这个函数有点长,而且不是很好理解,读得有点郁闷。硬着头皮往下读,感觉这个函数基本上没有做什么实际的事情,函数参数page被赋值给hook。接着初始化主题,从主题拿到一个注册的hooks。这里传进来的hook名字必须在hooks中有定义过,不然就直接退出了。

如果Hook名字有在hooks中定义过,则取$hooks[$hook]为$info.

这个$info中包含了有主题的路径,include files,files等信息。该函数根据这些信息将include files和files全部引入。

如果$info[function]有定义,那么就直接调用这个函数,返回这个函数的返回值。在这种情况下,主题就只是一个简单的函数调用。

否则主题就是一个模板。在这种情况下,如果$info[‘preprocess functions’]有定义,则逐一调用这些函数,其中函数的参数在$info[‘arguments’]中指定。如果$info[‘template’]有定义,则将这个文件作为主题模板,最后调用函数theme_render_template(template_file,$variables),其中的variables为$info[‘arguments’]中的参数,template_file为前面找到的template。注意这里把确定tempalte的方法简化了,实际的代码中,$info[‘template’]作为最后的模板选择,如果有其他的模板定义,会以其他的模板定义为准。

这个函数(theme_render_template)之后,最后调用一下$output = drupal_final_markup($output); ,姑且把这个理解为后处理。估计是提供一些接口来对生成的代码做最后的修改。比如加链接,加版权,加广告之类的。

至此,整个框架结束了。当然只是很粗略的看了一遍,其中接下来要看的就是一个具体的例子,看看其中的theme_rander_template到底干了些什么,是怎么处理各类node的。



本文地址: http://www.bagualu.net/wordpress/archives/1026 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注