这里的例子来自于Drupal的论坛讨论. $hook指的是变量可用的区域(比如,对于comment.tpl.php,它就是"comment").
这个函数需要定义在一个template.php文件中,这个文件放在主题目录下面(例如: themes/box_cleanslate/template.php).
<?php
function _phptemplate_variables($hook, $vars) {
switch($hook) {
case 'comment' :
$vars['newvar'] = 'new variable';
$vars['title'] = 'new title';
break;
}
return $vars;
}
?>
这个函数对phptemplate_comment返回的变量进行了处理,你在这里可以很方便的按照需求对变量进行调整.
现在,在你的comment.tpl.php文件中,可以使用一个新的名为$newvar的变量了.类似的, $title变量覆写了phptemplate_comment中该变量的值.
一个漂亮的技巧是用来计算每个钩子的调用次数,这样你可以传递过来另一个额外的参数了.如下所示:
<?php
function _phptemplate_variables($hook, $vars) {
static $count;
$count = is_array($count) ? $count : array();
$count[$hook] = is_int($count[$hook]) ? $count[$hook] : 1;
$vars['zebra'] = ($count[$hook] % 2) ?'odd' : 'even';
$vars['seqid'] = $count[$hook]++;
return $vars;
}
?>
如果为偶数的话,就是'even';奇数的话就是'odd'.这意味着你可以为每个节点/区块/评论/其它,实现一个斑马线样式(也就是:颜色间隔切换).
接着你就可以为class='$zebra'设置一些样式了,用来处理颜色的切换.
另一个例子就是,节点标记,用来判断我们查看的是不是节点.当有人查看一片文章时,使用这个变量就可以处理不同项目的显示了.
<?php
function _phptemplate_variables($hook, $vars) {
switch ($hook) {
case 'page':
if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == '') {
$vars['content_is_node'] = TRUE;
}
break;
}
return $vars;
}
?>
注意,这里的切换有点老套,但是我还是这样用了,因为将来你可能需要添加更多的变量.在这种情况下,你就需要它了.
args()用来检查你的url是/node/NID/形式的,而不是/node/NID/edit或者/node形式的.如果找到了符合条件的,我们将这个标记设为TRUE.