Привет друзья!
Помогите пожалуйста советом или ссылкой.
Суть проблемы.
Есть тип материала Автор и тип Книга. Соответсвенно при создании Книги, я могу выбрать Автора посредством поля Entity Reference. В ноде Книги мне нужно выводить несколько полей из Автора. Как это сделать в node--book.tpl.php? Если с "родными" полями проблем нет
<?php print render($content['field_name']) ?>
То как вывести поля из Entity Reference?
Спасибо за любой ответ.
Как вывести поле из Entity Reference в node.tpl.php ?
Главные вкладки
Лучший ответ
1
если вы работаете напрямую в шаблоне то
Комментарии
dpm($content) к тебе в помощь
Поле Entity Reference хранит в себе только ID сущности.
Для того чтоб иметь доступ к полям сущности отмеченной в Entity Reference, её необходимо сначала загрузить (node_load) и вывести рендер массивом (node_view).
И потом Вы сможете выводить поля сущности с помощью функций render().
Т.к. логика в шаблонах считается крайне плохим тоном - рекомендую все это делать либо в препроцессоре, или в хуках отвечающих за вывод ноды - hook_node_view.
Так же, в Вашем случае, можно создать псевдо-поле, тогда вообще не нужно будет лезть в шаблон ноды. Тут хороший ман по этой теме.
Всё значительно проще - в шаблоне в переменной $content все поля уже есть в том виде, в котором их накликали в настройках отображения. И обращение к такому полю происходит так же, как и к любому другому.
Нужно поле из связанной сущности, а не поле связанной сущности, которое рендерится в соответствии с настройками view_mode.
entity reference view formatter в помощь.
Ок. Допустим, нужно сделать следующую структуру:
Добавь во вьюс отношения и вытаскивай поля хоть от прабабушкиных сущностей. В чём проблема?
можно и через Views конечно, но не хотелось бы городить весь этот огород из-за двух полей.
Настройте для автора анонс и в книге показывайте анонс автора. Ну или любой другой стиль отображения.
Спасибо за советы!
В
<?php dpm($field_author); ?>
я вижу искомое поле, а вывести не могу. И понимаю, что тривиальная задача, и должно быть на ровном месте затупил, но я тупо не пойму как к нему достучатся.Скриншот функции dpm
Если картинку нужно получить - можно, например ф-цией 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 - сократил трохи...
Дружище!!!, не парься сильно! могу лишь по советовать потыкай по больше и обязательно получится. Это совет действует если ты, "занимаешься". Если нет то удачи в вопросах может кто ни быдь и ответит тебе правильно.
P.S. пиши
<?php print $field_author ?>
если не видишь скомпилированный html.
вообще если это поле ноды то темезируй его напримую через fiels--...tpl.php
Я заново прочитал твой вопрос. Могу сказать чтобы ты создал файл field--FIELD_NAME.tpl.php и тут начал его выводить так как тебе нужно.
если вы работаете напрямую в шаблоне то
$rev_nv = node_view($ref); // получили готовый рендер массив
print render($rev_nv['body']); // вывели нужное поле
//хотя чисто теоретически должно работать
print render($content['field_ref']['body']);
спасибо, работает!
Тоже так думал, не заработало.