Drupal主题的覆写

来自站长百科
跳转至: 导航、​ 搜索

导航:上一页

Drupal模板主要就是由后缀名为info,php以及template.php文件组成的,下面我主要总结的是如何覆写某些内容(这就是drupal灵活性的体现之处)。有时你会遇到某些样式是无法通过Drupal的核心或第三方模块提供的HTML来实现,这时你就要用到覆写了。

原理:一个模块使用模板文件或者theme函数来将他们的输出送到模板层(就是你的主题)。这些小块再装配在一起就形成了最终页面。eg:开始状态是节点HTML模板文件+区块HTML模板文件+评论HTML模板文件等这些小块提交给你的主题,你的主题可以覆写这些文件也可以就保持默认情况然后装配成最终页面。

在覆写主题时,有个重量级模块叫做Devel,感觉功能类似Firefox中的firebug,对定制主题十分有用。

  • 主题注册机制

Drupal的主题注册是维护可利用的themen hooks的缓存数据以及如何处理它们.当启用一个新模块或者主题时,Drupal将查找其间可以输出主题的元素(eg:模板文件或者theme函数),然后在注册时就存储一个对这些元素的引用,当构建一个新的页面时,将引用它的注册。说了半天想说的就是,当你添加一个新的覆写时,(eg:一个模板文件)你需要更新下主题注册机制。即清除缓存或访问下主题页面,点击下保存按钮。

  • 覆写所有模块的模板文件方法:

你启用的每一个模块都将使用它们自己的模板来输出数据到你的主题上,这就导致了你主题的一个页面可能是由多个很小的模板文件生成的。Devel模块能够帮你很快的找出内容是由哪个模板文件输出的。

方法:拷贝模块的模板文件到你主题的文件夹内,修改你的文件就可以了。

  • Theme 函数

因为模块送数据给用户有2种方法,要么是个模板文件要么是一个theme函数。2种方法都能够创建同样的输出,只是方法不同罢了。模板文件更多的是HTML以及少量的PHP,相反,theme函数主要是PHP和少量的HTML。通常theme函数主要用于包含一个逻辑判断来修改输出。

方法:找到你要覆写的函数(是以theme_开头)拷贝到template.php文件内(若你主题没有,你可以创建一个),将函数名改成你的主题名_,或者phptemplate_.eg:theme_date------->zzbaike_date. 修改函数即可。

  • 预处理函数Preprocess Functions

主要是创建放在模板文件内的变量,用在template.php文件中,eg:模板文件内有这样代码

<?php
print t(‘Submitted by !username on
!datetime’,
array(‘!username’ => $name, ‘!datetime’ =>
$date));
?>

这里的$name变量包含的是什么呢?

这些变量来自模块,被用在theme函数和模板文件内.你可以使用Preprocess 来修改这个变量在它们被用在theme函数和模板文件内之前。

命名方法:模板文件:node.tpl.php ------》zzbaike_preprocess_node。(zzbaike为你自己的主题名) thmem函数theme_username--------》 zzbaike_preprocess_username。(zzbaike为你自己的主题名)

添加新的变量:假若现在你想添加一个新变量$downzzbaike给所有的模板.

方法:在template.php添加下面代码 <ppre> function zzbaike_preprocess(&$variables) { $variables[‘downzzbaike] = ‘zzbaikewiki’; }

然后你在模板文件内直接print $downzzbaike就行了。若你想将其限制在只用在page.tpl.php内,用下面代码

function zzbaike_preprocess_page(&$variables) {
$variables[‘downzzbaike’] = ‘zzbaikewiki’;
}

你还可以使用变量template_file提供一个模板文件

function  zzbaike_preprocess_page(&$variables) {
$variables[‘downzzbaike’] = “zzbaikewiki”;
if ($variables[‘downzzbaike’] == “zzbaikewiki”) {
$variables[‘template_file’] = ‘page-zzbaikewiki’;
}
}

当downzzbaike是zzbaikewiki时,模板文件将使用page-zzbaikewiki.tpl.php来替代page.tpl.php