Перейти к основному содержанию

Drupal 7: Правильный вывод полей, render fields

Опубликовано 18.05.2013 Теги: drupal 7, field

Многие разработчики в шаблонах и хуках используют поля нод. При этом выводят их при помощи обращения к атрибутам ноды.

// Неправильно
$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_view_field().

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

Так же есть функции для вывода только одного значения поля field_get_items() и field_view_value()

Примеры

Длинный обрезанный текст

/** 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);

Комментарии

Аватар пользователя Артем Мельников
Артем Мельников
Опубликовано 4.08.2013

Насчет настроек вроде: array('type' => 'teaser')Где можно посмотреть больше возможных настроек?

  • ответить
Аватар пользователя Alexander Schedrov
Alexander Schedrov
Опубликовано 4.08.2013

Для каждого форматтера определяются свои настройки.Вот нарпимер форматтер текстового поля принимает такие настроки:https://api.drupal.org/api/dru...Форматтер для терминов таксономии:https://api.drupal.org/api/dru...Схема поиска примерно такая...

  • ответить
Аватар пользователя meloff
meloff
Опубликовано 24.08.2013

Спасибо! Очень помогло! :)

  • ответить
Аватар пользователя Michael
Michael
Опубликовано 6.12.2013

+1. Пригодилось!

  • ответить
Аватар пользователя Сергей
Сергей
Опубликовано 2.05.2015

А как таким образом можно вывести в ноде дополнительные поля термина таксономии?

  • ответить
Аватар пользователя Farruh
Farruh
Опубликовано 14.09.2015

Автору спасибо! Пригодилось.

  • ответить
Аватар пользователя Alex
Alex
Опубликовано 15.04.2016

Спасибо Санчезу! Полезная подсказка.

  • ответить
Содержание этого поля является приватным и не предназначено к показу. Если у вас есть Gravatar аккаунт, связанный с введенным адресом email, то он будет использован для отображения вашего аватара.

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • Для публикации фрагментов кода, используйте тег <code>...</code>.

Категории блога

  • Drupal 7 (35)
  • Drupal 8 (1)
  • PHP (6)
  • jQuery (3)
  • Linux (6)
  • Интернет (1)
  • JavaScript (1)
  • Дизайн (1)
  • События (19)
  • Разное (1)

Архив блога

  • декабрь 2017 (1)
  • август 2017 (1)
  • июль 2017 (1)
  • июнь 2017 (1)
  • май 2017 (1)
  • апрель 2017 (1)
  • март 2017 (2)
  • сентябрь 2016 (2)
  • июнь 2016 (1)
  • январь 2016 (1)
  • сентябрь 2015 (2)
  • май 2015 (1)
  • февраль 2015 (3)
  • ноябрь 2014 (1)
  • октябрь 2014 (1)
  • сентябрь 2014 (1)
  • июль 2014 (1)
  • июнь 2014 (1)
  • май 2014 (1)
  • январь 2014 (1)
  • декабрь 2013 (3)
  • ноябрь 2013 (2)
  • сентябрь 2013 (2)
  • август 2013 (2)
  • июнь 2013 (3)
  • май 2013 (4)
  • апрель 2013 (2)
  • март 2013 (3)
  • февраль 2013 (1)
  • декабрь 2012 (3)

Связь с автором

Alex Schedrov Twitter Icon Alex Schedrov Facebook Icon Alex Schedrov Drupal Icon Alex Schedrov Github Alex Schedrov RSS Icon
© Schedrov Alexander, 2011—2021