Drupal 7: Правильный вывод полей, render fields
Многие разработчики в шаблонах и хуках используют поля нод. При этом выводят их при помощи обращения к атрибутам ноды.
// Неправильно
$tag_tid = $node->field_tags[LANGUAGE_NONE][0]['tid'];
$description = $node->body[LANGUAGE_NONE][0]['safe_value'];
Существует несколько пунктов, почему так не стоит делать.
- LANGUAGE_NONE либо значение ‘und’, указывая эти значения вы лишаете систему поддержки многоязычности;
- 0 - выбирается одно значение;
- tid, safe_value и т.д.- у разных полей, разные типы значений.
Для правильного отображения поля нужно использовать функцию
$field_tags = field_view_field('node', $node, 'field_tags');
$output = render($field_tags);
Таким образом мы получаем render array, который использует шаблон и прочие функции формирования поля.
Если необходимо указать тип отображения, по умолчанию используется default:
$field_tags = field_view_field('node', $node, 'field_tags', array('type' => 'teaser'));
$output = render($field_tags);
Прочие настройки:
$options = array(
'label' => 'inline', // 'inline', 'above' and 'hidden', defaults to 'above'
'type' => 'full',
);
$body = field_view_field('node', $node, 'body', $options);
$output = render($body);
Так же есть функции для вывода только одного значения поля
Примеры
Длинный обрезанный текст
/** types:
* text_default
* text_plain
* text_trimmed
* text_summary_or_trimmed
*/
$options = array(
'type' => 'text_trimmed',
'settings' => array(
'trim_length' => 50,
),
);
$body = field_view_field('node', $node, 'body', $options);
$output = render($body);
Ссылка на термин
/** types:
* taxonomy_term_reference_link
* taxonomy_term_reference_plain
* taxonomy_term_reference_rss_category
*/
$options = array(
'type' => 'taxonomy_term_reference_link',
);
$field_tags = field_view_field('node', $node, 'field_tags', $options);
$output = render($field_tags);
Вывод одного изображения
$options = array(
'type' => 'image',
'settings' => array(
'image_style' => 'thumbnail',
'image_link' => 'content', // content, file
)
);
$images = field_get_items('node', $node, 'field_image');
$field_image = field_view_value('node', $node, 'field_image', $images[0], $options);
$output = render($field_image);
Комментарии
Насчет настроек вроде: array('type' => 'teaser')Где можно посмотреть больше возможных настроек?
Для каждого форматтера определяются свои настройки.Вот нарпимер форматтер текстового поля принимает такие настроки:https://api.drupal.org/api/dru...Форматтер для терминов таксономии:https://api.drupal.org/api/dru...Схема поиска примерно такая...
Спасибо! Очень помогло! :)
+1. Пригодилось!
А как таким образом можно вывести в ноде дополнительные поля термина таксономии?
Автору спасибо! Пригодилось.
Спасибо Санчезу! Полезная подсказка.