You are here

向你的drupal模板中添加额外的变量

g089h515r806 的头像
Submitted by g089h515r806 on 星期五, 2008-09-19 12:32

这里的例子来自于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.

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

Drupal版本: