2011-01-11 13 views
3

Я хотел бы напечатать таксономические термины (из поля 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 для визуализации поля терминов таксономии?


РЕДАКТИРОВАТЬ 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-> равно null.

Знаете ли вы, что мне не хватает?

+1

вы не можете просто создать представление для отображения содержимого таксономии внутри блока вместо изменения шаблона? – espais

+0

Привет, к сожалению, мне нужно иметь его в коде. –

ответ

1

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

mytheme_preprocess_block() в template.php *

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

.

блок.tpl.PHP

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

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

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

+0

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

+0

@Michal Возможно, вы хотите использовать 'theme ('field', $ varaibles)' для поля для стандартного поколения разметки. – googletorp

+0

спасибо. Вероятно, это было так. Не могли бы вы дать мне образец? 'theme ('field', $ node-> field_tags)' отсутствует что-то, а http://api.drupal.org/api/drupal/includes--theme.inc/function/theme/7 для меня совершенно непонятно. Раньше я делал тематику, извлекая необработанные значения из массива, но, как разрешение нового года, я хотел бы сделать это способом Drupal. ;-) –

1

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

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

+0

Спасибо Eaton, код модуля Вы предложили мне немного подсказки, чтобы решить проблему. :) –

2

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

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

И затем использовать его в вашем шаблоне:

print render($node_field_tags);