我想在节点视图页面(在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
据我所知(来自this,this和that)代码应该看起来更像/更少的过程
$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->内容为空。
你知道我缺少什么吗?
答案 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']);