3

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

所以我所做的是。

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,这两个变量都不会从该字段输出分类术语。

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

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


编辑 13.01.2011, 00:21

据我了解(从这个这个那个)代码应该看起来或多/少像这样的过程

 $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->content 为空。

你知道我错过了什么吗?

4

4 回答 4

2

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

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

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

print render($node_field_tags);
于 2011-01-17T18:25:58.390 回答
1

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

template.php中的 mytheme_preprocess_block() *

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

.

块.tpl.php

print render($node_content['field_tags']);
于 2011-01-13T20:03:24.803 回答
1

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

它可能没有您正在寻找的所有控制,但它可能是一个很好的起点。

于 2011-01-13T14:59:54.973 回答
1

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

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

于 2011-01-12T08:33:59.980 回答