Drupal6 pro Drupal development(专业开发指南)TheThemeSys(15)
发布时间:2021-06-06
发布时间:2021-06-06
Drupal6 pro Drupal development(专业开发指南)TheThemeSystem主题系统
theme()函数介绍
当Drupal想要为一个可主题化的项目(比如节点,区 块,面包屑,评论,或者用户签名)生成一些HTML输出时,它将查找用来为该项目生成HTML的主题函数或者模板文件。Drupal的所有部分,基本上都 是可主题化的,这意味着,对于为该项目实际生成的HTML,你可以进行覆写。我们一会儿看一些例子。
提示 在Drupal中,可主题化的项目的列表,可参看/api/group/themeable/6。
theme()工作原理概览
当一个简单的节点页面显示时,比如/?q=node/3,都发生了什么呢,这里给出了大致的总结:
1. Drupal的菜单系统收到了请求,并将控制权转交给节点模块。
2. 在构建了节点数据结构以后,调用theme('node', $node, $teaser, $page)。这将查找合适的主题函数或者模板文件,定义模板文件中所用的各种变量,应用该模板,为节点生成最终的HTML。(如果有多个节点正在被显 示,比如一个日志,那么对于每个节点都会调用一遍这个流程。)
3. 如果启用了评论模块,节点的评论也将被转化为HTML,并追加在节点的HTML后面。
4. 这样就返回了一团HTML(在index.php中,它就是变量$return),使用theme('page', $return),这样就再次传递给了theme()函数。
5. 在处理页面模板以前,Drupal 作了一些预处理,比如,找出有哪些区域可用,以及在每个区域中显示哪些区块。通过调用theme('blocks', $region),将每个区块转化为HTML,theme('blocks', $region)是用来定义区块变量并应用区块模板的。在这里,你应该可以开始看到一个模式了。
6. 最后,Drupal定义了许多供页面模板使用的变量,并将其应用到页面模板中去。
现在,从前面的列表中,你应该能够认识到theme()函数在Drupal中的重要地位。它负责运行预处理函数,来设置模板中所用的变量;它将主题函数的 调用,分发给合适的函数或者查找合适的模板文件。而输出的结果就是HTML。这一流程的图示可参看图8-5。我们将在后面更深入的学习一下,这个函数是如 何工作的。现在,应该不难理解,当Drupal想将一个节点转化为HTML时,就会调