如何在块中打印节点分类?

时间:2011-01-11 20:43:31

标签: drupal drupal-7 drupal-theming

我想在节点视图页面(在Zen子主题中)的块中打印分类术语(来自字段field_tags)。

所以我做的是。

template.php

function michal_preprocess_block(&$vars, $hook) {
 if ( arg(0) == 'node' && is_numeric(arg(1)) ) {
   $node = node_load(arg(1));
   $vars['node'] = $node;
   $vars['node_field_tags'] = $node->field_tags;
   $vars['node_content_field_tags'] = $node->content['field_tags'];
 }
}

但是,当我尝试在block.tpl.php中打印时,这2个变量都不会从字段输出分类术语。

print render($node_content_field_tags);
print render($node_field_tags);

您是否知道用于呈现分类术语字段的Drupal函数?


EDIT 13.01.2011,00:21

据我所知(来自thisthisthat)代码应该看起来更像/更少的过程

 $node = node_load(arg(1));
 $node_view($node) // Generates an array for rendering a node, see http://api.drupal.org/api/drupal/modules--node--node.module/function/node_view/7
 $vars['node'] = $node;

然后在block.tpl.php

render($node->content['field_tags']);

$ node->内容为空。

你知道我缺少什么吗?

4 个答案:

答案 0 :(得分:2)

实际上,预处理中的以下代码可能更容易:

if ($node = menu_get_object()) {
  $vars['node_field_tags'] = field_view_field('node', $node, 'field_tags', 'full');
}

然后在模板中使用以下内容:

print render($node_field_tags);

答案 1 :(得分:1)

首先,您应该检查是否正在运行预处理功能,并且该缓存没有与您一起播放。然后你可以尝试检查变量。我认为你不能在render()上使用$node->field_tags而且我对$node->content['field_tags']也不太了解。

检查变量将帮助您弄清楚,开发适用于Drupal 7并可以帮助您。

答案 2 :(得分:1)

您也可以查看CCK Blocks module。它会创建一个侧边栏块,显示在每个节点旁边(如果它有内容),并将该块添加到每个字段的渲染目标列表中,就像“预告片”,“完整”和“rss”一样。

它可能没有你想要的所有控制权,但它可能是一个好的起点。

答案 3 :(得分:1)

我遇到过我正在寻找的解决方案:

template.php中的mytheme_preprocess_block() *

$node_content = node_view(node_load(arg(1)));
$vars['node_content'] = $node_content;

block.tpl.php

print render($node_content['field_tags']);