如何将drupal区域指定到节点,评论中

默认情况下,所有定义的区域都传递给page.tpl.php。但是只需要额外的几步,你也可以将特定的区域应用到其它的模板文件中:node.tpl.php,comment.tpl.php等等。下面是如何实现的。

在你定义区域的template.php文件中,定义一个_phptemplate_variables()函数(如果已经存在的话,就使用已有的)。在这里,你要做的就是将区域内容指定到一个特定的主题调用中。当调用_phptemplate_variables()时,将会向$hook变量传递一个主题参数,比如'node'。所以,使用下面的代码,我们可以将区域指定到节点模板文件中:

<?php
function _phptemplate_variables($hook, $variables) {
  // Load the node region only if we're not in a teaser view.
  if ($hook == 'node' && !$vars['teaser']) {
    // Load region content assigned via blocks.
    foreach (array('inline1') as $region) {
      $variables[$region] = theme('blocks', $region);
    }
  }
  return $variables;
}
?>

注意,我们在这里做了检查,确保不是处于一个'teaser'视图中,这样只有当处于完整的节点视图中时,才加载内置区域。

现在,在你的节点模板中,你就可以把区域变量包含进来了。下面是标准的phptemplate node.tpl.php模板加进'inline1'区域后的样子:

  <div class="node<?php if ($sticky) { print " sticky"; } ?><?php if (!$status) { print " node-unpublished"; } ?>">
    <?php if ($picture) {
      print $picture;
    }?>
    <?php if ($page == 0) { ?><h2 class="title"><a href="<?php print $node_url?>"><?php print $title?></a></h2><?php }; ?>
    <span class="submitted"><?php print $submitted?></span>
    <span class="taxonomy"><?php print $terms?></span>
    <div class="content"><div class="floatleft"><?php print $inline1?></div><?php print $content?></div>
    <?php if ($links) { ?><div class="links">&raquo; <?php print $links?></div><?php }; ?>
  </div>

 

大多数情况下,你都会为你的区域添加一些样式,你可以像往常一样,通过主题的style.css文件来完成。例如,在这里,我们将让内置区域向左浮动:

div.floatleft {
  float: left;
}

由于一个节点的变量传递给了其它的节点模板,所以你也可以在node-type模板中实现你的自定义外观。

这种方式还可以应用到其它的主题元素中。下面的例子将特定的区域指定到了节点和评论中:

<?php
function _phptemplate_variables($hook, $variables) {
  // Load region content assigned via blocks.
  // Load the node region only if we're not in a teaser view.
  if ($hook == 'node' && !$variables['teaser']) {
    foreach (array('node1', 'node2') as $region) {
      $variables[$region] = theme('blocks', $region);
    }
  }
  else if ($hook == 'commment') {
    foreach (array('comment1', 'comment2') as $region) {
      $variables[$region] = theme('blocks', $region);
    }
  }
  return $variables;
}
?>

相关联接: http://drupal.org/node/29139 , Think in Drupal

Drupal版本: