You are here

使用drupal主题覆写函数

很多Drupal资料都讲解了,如何通过覆写主题函数,来真正的完成定义,从而得到你想要的外观.由于你需要创建一个函数,所以它需要一点PHP知识,尽管如此,这样做还是非常强大的.这里有许多代码片断和例子可供选择,许多情况下你只需要拷贝粘贴并做些细小的改动就可以了.

 

使用哪个文件

为了使用drupal主题覆写,首先要做的就是找个地方来放置覆写函数.这取决于你所使用的主题引擎,引擎不同,放置的位置也不同.在Drupal 4.6中默认的引擎为XTemplate;然而XTemplate在PHP5下面不能好好的工作,所以从Drupal 4.7以及更高的版本现在都使用PHPTemplate作为默认的主题引擎了。

你的文件应该放在你主题目录themes/MYTHEMENAME下面。

 

Plain PHP Theme(纯PHP主题)

如果使用的是纯PHP主题,比如Marvin 或者Chameleon,放置覆写函数的文件应该是THEMENAME.theme。

XTemplate

XTemplate不允许主题函数覆写。

PHPTemplate

PHPTemplates将主题覆写放在了template.php中。

SmartyTemplates

SmartyTemplates使用smartytemplate.php文件。

wgSmarty

wgSmarty使用template.php,但是在编写本文时,相关代码已被注掉;现在,在wgSmarty中也不能进行主题覆写了。

phptal

PHPTAL使用template.php,它与PHPTemplate非常相似。

 

如果你的主题目录里面还没有template.php文件的话,你需要创建一个。创建这个文件时,开头一定要包含一个“<?php”,否则的话,你可能会遇到站点被搞死的现象。后面的结束标签,则没有需要。

 

如何给覆写函数命名

当你覆写一个drupal主题函数时,模块文档一般都会给出相关的说明的,覆写哪个,如何覆写。为了覆写drupal主题函数,你需要根据原有函数创建一个略有不同的函数,这是由于在PHP中,函数名必须唯一的缘故。

 

我们这里使用的例子函数为theme_item_list,每当Drupal要展示一列项目时,就会调用这个函数,在Drupal中,除了在菜单结构以外,每当你遇到<li>标签时,基本上就是用的这个函数。

 

函数的签名为:

<?php
  function theme_item_list($items = array(), $title = NULL, $type = 'ul') {
?>

 

覆写的命名方式有两种,除非你使用的是纯PHP引擎。第一种方式,可以将函数名前面的'theme_'替换为'MYTHEMENAME_',来为覆写函数命名。如果你用的是chameleon模板的话,在你的chamelon.theme文件中,可以这样覆写theme_item_list函数:

<?php
  function chameleon_item_list($items = array(), $title = NULL, $type = 'ul') {
?>

这实际上不是最好的,但是它总是可以工作的。大多数drupal主题,都是缘于模板引擎的。所以他们可以使用drupal模板引擎的名字来代替主题名字。这是推荐的方式,因为这可以使得使用不同主题的用户共享这个函数。甚至可以在同一个站点上让多个主题共享一个包含这些函数的文件。

一些例子:

<?php
  function phptemplate_item_list($items = array(), $title = NULL, $type = 'ul')
  function smarty_item_list($items = array(), $title = NULL, $type = 'ul')
?>

 

 相关链接: http://drupal.org/node/55126 , Think in Drupal