Как распечатать узел таксономии в блоке? - PullRequest
3 голосов
/ 11 января 2011

Я хотел бы напечатать термины таксономии (из поля field_tags) в блоке на странице просмотра узла (в подтеме Zen).

Так что я сделал.

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-> null.

Вы знаете, чего мне не хватает?

Ответы [ 4 ]

2 голосов
/ 17 января 2011

На самом деле, что может быть проще, это следующий код в вашем препроцессе:

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

И затем используйте следующее в вашем шаблоне:

print render($node_field_tags);
1 голос
/ 13 января 2011

Вы также можете проверить модуль CCK Blocks . Он создает блок боковой панели, который отображается рядом с каждым узлом (если он имеет контент), и добавляет этот блок в список назначений рендеринга для каждого поля, так же, как 'teaser' и 'full' и 'rss'.

Возможно, он не обладает всеми необходимыми элементами управления, но может быть хорошим началом.

1 голос
/ 13 января 2011

Я нашел решение, которое искал:

mytheme_preprocess_block () в template.php *

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

.

block.tpl.php

print render($node_content['field_tags']);
1 голос
/ 12 января 2011

Прежде всего, вы должны убедиться, что функция предварительной обработки запущена и кеш не играет с вами.Тогда вы можете попытаться проверить переменные.Я не думаю, что вы можете использовать render() на $node->field_tags, и я не слишком уверен в $node->content['field_tags'].

Проверка переменных поможет вам разобраться, devel отлично работает для Drupal7 и может помочь вам там.

...