Drupal6 pro Drupal development(专业开发指南)TheThemeSystem主题系统
假定你和一个设计者一同工作,你告诉他/她“从代码中找到主题函数并对其进行覆写”,这是不是有点难为人了?幸运的是,有另一种方式,使得设计者能够更容易的修改外观。你可以将匹配的可主题化项目替换为它们自己的模板文件,我将通过大家熟悉的面包屑例子来说明这一点。
在我们开始以前,首先确保没有主题函数对heme_breadcrumb()进行了覆写。所以,如果你在前面的一节中,在你主题的template.php文件里面创建了phptemplate_breadcrumb()函数的话,那么把它注释掉。接着创建文件
sites/all/themes/custom/greyscale/breadcrumb.tpl.php。这是面包屑的新模板文件。因为我们想将<div>标签替换为<span>标签,继续前进,向该文件中添加以下内容:
<?php if (!empty($breadcrumb)): ?>
<span class="breadcrumb"><?php print implode(' ! ',
$breadcrumb) ?></span>
<?php endif; ?>
现在设计者就很容易编辑文件了。现在你需要告诉Drupal,在显示面包屑时调用这个模板文件。为了实现这一点,你需要导航到“管理 站点构建 模块”,来重新构建主题注册表。在重新构建主题注册表的时候,Drupal将找到你的breadcrumb.tpl.php文件,并将面包屑的可主题化项目映射到该模板文件上。
添加和操纵模板变量
问题又来了:如果你可以创建你自己的模板文件并控制传递给它们的参数,那么你如何操纵或者添加传递给页面和节点模板文件的变量呢?
注意 只有实现为模板文件的可主题化项目,才有变量的聚合和传递一说。如果可主题化项目采用主题函数的实现方式,那么就不需要向其传递变量了。
每次加载一个模板文件都需要调用一系列的预处理函数。这些函数负责聚集变量,以将其传递给合适的模板文件。 让我们继续使用面包屑作为我们的例子。首先,让我们修改sites/all/themes/custom/greyscale/breadcrumb.tpl.php文件,为面包屑分隔符使用一个名为$breadcrumb_delimiter的变量:
<?php if (!empty($breadcrumb)): ?>
<span class="breadcrumb">
<?php print implode(' '. $breadcrumb_delimiter .' ', $breadcrumb) ?>
</span>
<?php endif; ?>