Как вывести поле из Entity Reference в node.tpl.php ?

20 ноября 2016 в 14:33
Аватар пользователя trolik trolik 0 16 Решено

Привет друзья!
Помогите пожалуйста советом или ссылкой.
Суть проблемы.
Есть тип материала Автор и тип Книга. Соответсвенно при создании Книги, я могу выбрать Автора посредством поля Entity Reference. В ноде Книги мне нужно выводить несколько полей из Автора. Как это сделать в node--book.tpl.php? Если с "родными" полями проблем нет
<?php print render($content['field_name']) ?>
То как вывести поля из Entity Reference?
Спасибо за любой ответ.

Комментарии

Поле Entity Reference хранит в себе только ID сущности.

Для того чтоб иметь доступ к полям сущности отмеченной в Entity Reference, её необходимо сначала загрузить (node_load) и вывести рендер массивом (node_view).
И потом Вы сможете выводить поля сущности с помощью функций render().

Т.к. логика в шаблонах считается крайне плохим тоном - рекомендую все это делать либо в препроцессоре, или в хуках отвечающих за вывод ноды - hook_node_view.

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

20 ноября 2016 в 16:15

Всё значительно проще - в шаблоне в переменной $content все поля уже есть в том виде, в котором их накликали в настройках отображения. И обращение к такому полю происходит так же, как и к любому другому.

20 ноября 2016 в 17:19

trolik wrote:

В ноде Книги мне нужно выводить несколько полей из Автора. Как это сделать в node--book.tpl.php?

Нужно поле из связанной сущности, а не поле связанной сущности, которое рендерится в соответствии с настройками view_mode.

20 ноября 2016 в 17:23

Ок. Допустим, нужно сделать следующую структуру:

  • Название книги: поле ноды
  • Автор книги: поле ER (пусть будет entity reference view formatter)
  • Жанр книги: поле ноды
  • Родина автора: поле ER (тут еще раз обратится можно к полю из связанной сущности?)
  • ...
20 ноября 2016 в 17:35

Настройте для автора анонс и в книге показывайте анонс автора. Ну или любой другой стиль отображения.

20 ноября 2016 в 17:41

Спасибо за советы!
В <?php dpm($field_author); ?> я вижу искомое поле, а вывести не могу. И понимаю, что тривиальная задача, и должно быть на ровном месте затупил, но я тупо не пойму как к нему достучатся.
Скриншот функции dpm

20 ноября 2016 в 17:41

Если картинку нужно получить - можно, например ф-цией theme_image_style():

<?php
$file 
$field_author[0]['entity']->collaborator_image[LANGUAGE_NONE][0];
$variables = array(
  
'style_name' => 'thubmnail',
  
'path' => $file->uri,
  
'width' => isset($file->width) ? $file->width '',
  
'height' => isset($file->height) ? $file->height '',
);
$image theme_image_style($variables);
?>

Потом, в шаблоне можно:  <?php print $image; ?>

UPD - сократил трохи...

20 ноября 2016 в 17:51

Дружище!!!, не парься сильно! могу лишь по советовать потыкай по больше и обязательно получится. Это совет действует если ты, "занимаешься". Если нет то удачи в вопросах может кто ни быдь и ответит тебе правильно.
P.S. пиши
<?php print $field_author  ?>

если не видишь скомпилированный html.
вообще если это поле ноды то темезируй его напримую через fiels--...tpl.php

20 ноября 2016 в 17:59

Я заново прочитал твой вопрос. Могу сказать чтобы ты создал файл field--FIELD_NAME.tpl.php и тут начал его выводить так как тебе нужно.

20 ноября 2016 в 18:03

если вы работаете напрямую в шаблоне то

$ref = node_load($node->field_ref['und'][0]['target_id']); //получили объект
$rev_nv = node_view($ref); // получили готовый рендер массив

print render($rev_nv['body']); // вывели нужное поле

//хотя чисто теоретически должно работать
print render($content['field_ref']['body']);

20 ноября 2016 в 18:08