只有当你需要修改默认输出时,你才需要阅读本节.如果你的显示层是完全有CSS样式表负责的,那么可以略过本节。覆写主题输出,需要掌握3个方面。首先,你需要知道源头在哪里,其次你要进行覆写,最后你需理解它的类型。注意,Drupal使用主题注册表(theme registry)来缓存主题数据覆写完成后,你必须清空缓存。
1. 寻找源头:
寻找主题输出的源头,是比较困难的,这是由于主题系统的多层级结构造成的,使得源头可能出现在系统的各个地方。
仅用来演示用。
大多数页面元素一般是由theme('page')拉进来的,在显示导航信息以后,它们被放置在page.tpl.php模板中。页面元素包括主菜单、区块区域元素,区域中的区块等等。通常通过一个主题钩子来引用每个大块的主题化数据。
注意:主题钩子现在包括主题函数和模板两部分。系统中的许多钩子都与主题无关。我们这里提到的钩子都是特定于主题的。
现在使用devel模块(devel module)可以很容易的追踪特定内容的源头。devel模块包含一个主题工具,可以方便的查勘任何输出的源头,类型以及其它主题相关数据。参看示范screencast(http://drupal.org/node/209561)。由于技术方面的限制,它只能应用到Drupal6以及更高版本中。
2. 覆写机制:
覆写机制有一个特定的级联顺序,当然也包含一些特殊情况。Drupal内核和模块使用主题钩子提供了一个合理的默认输出。如果默认输出不符合主题的需求的话,那么就可以对其进行覆写,从而避免使用默认输出。这样,默认的将被放到一边去,我们不再管它,而将所有的特定修改放到所用的主题目录下面。不要直接修改Drupal内核和模块,只在主题目录下面修改。
如果传统的覆写不能满足你的需要的话,你可以使用主题注册表。
注意:尽管在Drupal 6中PHPTemplate.engine还存在,但它已不再覆写主题函数了。在Drupal5中,它允许使用模板来处理部分主题钩子。而现在则不必要这样了。