欢迎各位兄弟 发布技术文章
这里的技术是共享的
现在的问题变成:如果你制作自己的模板文件并控制变量传递给他们,那你怎么操纵或添加变量传递给页面模板和节点模板?
注意:变量只汇总并传递给以模板文件实现的主题化内容,而不能传递给以主题函数实现的主题化内容。
每次调用一个模板文件时,都要经过一系列的预处理函数。这些函数负责收集变量,并传递给适当的模板文件。让我们继续看看我们的面包屑例子。首先,让 我修改sites/ all/themes/custom/greyscale/breadcrumb.tpl.php,用一个变量作为面包屑的分隔符。
1 2 3 4 5 | <?php if (! empty ( $breadcrumb )): ?><br> <span class = "breadcrumb" ><br> <?php print implode( ' ' . $breadcrumb_delimiter . ' ' , $breadcrumb ) ?><br> </span><br> <?php endif ; ?><br> |
那我们怎么为$breadcrumb_delimiter变量赋值呢?一种方法是建立一个模板。 我们建立sites/all/modules/custom/crumbpicker.info文件:
1 2 3 4 5 | ; $Id $<br> name = Breadcrumb Picker<br> description = Provide a character for the breadcrumb trail delimiter.<br> package = Pro Drupal Development<br> core = 6.x<br> |
模块文件
sites/all/modules/custom/crumbpicker.module的内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php<br> // $Id$<br> /**<br> * @file<br> * Provide a character for the breadcrumb trail delimiter.<br> */ <br> /**<br> * Implementation of $modulename_preprocess_$hook().<br> */ <br> function crumbpicker_preprocess_breadcrumb(&$ var iables) {<br> $ var iables[ 'breadcrumb_delimiter' ] = '/' ;<br> }<br> |
在管理>站点构建>模块激活这个模块后,你的面包屑应该像这样Home / Administer
/ Site building。
前面的例子显示了模块怎样为一个模板文件的变量赋值。但是有更简单的方法来实现,那就是使用template.php。我们可以在template.php 中写一个函数来设置面包屑的分隔符。添加下面的代码到template.php 文件中:
1 2 3 4 5 6 7 | /**<br> * Implementation of $themeenginename_preprocess_$hook().<br> * Variables we set here will be available to the breadcrumb template file.<br> */ <br> function phptemplate_preprocess_breadcrumb(&$ var iables) {<br> $ var iables[ 'breadcrumb_delimiter' ] = '#' ;<br> }<br> |
这比创建一个模块理容易,坦率地说,这种创建新模块来为已有模块的模板提供变量的方式是最好的;模块通常不是用来干这事的。现在,我们已有一个模块为某个变量赋值,同时template.php中有一个函数也为这个变量赋值。哪那一个会被使用呢?
事实上,所有预处理函数以一定的秩序执行,每个可覆盖的函数或变量都已经在前面的预处理函数中定义。在前面的例子中,面包屑分隔符将是 #,因 为phptemplate_preprocess_breadcrumb()将在 crumbpicker_preprocess_breadcrumb()后执行,
因此它给$breadcrumb_delimiter赋值将覆盖此前变量的任何值。作者:预处理函数的执行顺序如图 8-6。
对于Greyscale主题的面包屑进行主题定制,预处理函数的执行顺序(按由前向后依次调用)如下:
template_preprocess()
template_preprocess_breadcrumb()
crumbpicker_preprocess()
crumbpicker_preprocess_breadcrumb()
phptemplate_preprocess()
phptemplate_preprocess_breadcrumb()
greyscale_preprocess()
greyscale_preprocess_breadcrumb()
因此greyscale_preprocess_breadcrumb()是最后被调用的,将覆盖前面的任何赋值。当主题的所胡这些函的都执行,那 这个过程似乎是浪费时间的。如果你有这样的想法,那是正确的。但当模板注册表被重建时,Drupal就已经判断出哪了些函数已实现、并只调用哪一个函数。
来自 http://www.cuitu.net/book/tian-jia-he-cao-zuo-mo-ban-bian-liang