开发者

How to print the node taxonomy in a block?

开发者 https://www.devze.com 2023-02-03 22:10 出处:网络
I\'d like to print taxonomy terms (from field field_tags) in a block on a node view page (in a Zen subtheme).

I'd like to print taxonomy terms (from field field_tags) in a block on a node view page (in a Zen subtheme).

So what I did was.

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'];
 }
}

However, when I try to print it in block.tpl.php, neither of these 2 variables outputs taxonomy terms from the field.

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

Do You know a Drupal function to render a taxonomy terms field?


EDIT 13.01.2011, 00:21

As far as I understood (from this, this and 开发者_如何学Gothat) the process the code should look more/less like this

 $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;

and then in the block.tpl.php:

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

The $node->content is null, however.

Do You know what I'm missing?


Actually what may be easier is the following code in your preprocess:

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

And then use the following in your template:

print render($node_field_tags);


First of all, you should check that the preprocess function is being run and that cache is not playing with you. Then you could try to inspect the variables. I don't think you can use render() on the $node->field_tags and I'm not too sure about $node->content['field_tags'] either.

Inspecting the variables will help you figure it out, devel works fine for Drupal 7 and can help you there.


You might also check out the CCK Blocks module. It creates a sidebar block that displays alongside each node (if it has content), and adds that block to the list of rendering destinations for each field, just like 'teaser' and 'full' and 'rss'.

It may not have all the control you're looking for but it could be a good place to start.


I've come across the solution I was looking for:

mytheme_preprocess_block() in template.php*

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

.

block.tpl.php

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

精彩评论

暂无评论...
验证码 换一张
取 消