field_view_value

Опубликовано 2012.04.13

Есть в седьмой(а так же и в восьмой) версии Drupal такая замечательная функция, как field_view_value. Она подходит для отображения полей ноды и пользователей.Использовать её можно прямо в .tpl.php шаблонах. Например в материале типа "статья" у нас есть поле с названием "технология". Это обычное текстовое поле с машинным именем "field_technology" Теперь создаем шаблон для этого типа материала. Создаем файл с именем node--article.tpl.php. Теперь подтягиваем нужное нам поле.Пишем следующее:
  1. $tech = field_get_items('node', $node, 'field_technology');
Теперь в переменной $tech будет наше поле.Машинное имя поля вы можете всегда посмотреть на странице редактирования полей ноды. Далее получаем отрендеренное значение поля:
  1. $out = field_view_value('node', $node, 'field_technology',$tech[0]);
И наконец выводим его следующим образом в нужном нам месте:
  1. $output['#markup'];
Таким образом можно темизировать шаблон ноды или пользователя. Например с пользователем нужно будет написать так:
  1. $tech = field_get_items('user', $user, 'field_user_technology');
Где в переменной $user обязательно должен быть объект пользователя. Если ваше поле-это картинка, то можно использовать следующий код:
  1. //получаем ноду по её номеру
  2. $node = node_load($nid);
  3. //получаем поле
  4. $img = field_get_items('node', $node, 'field_my_custom_fielf');
  5. //пробегаемся по нему
  6. foreach ($img as $key=>$value) {
  7. $out = field_view_value('node', $node, 'field_my_custom_fielf', $img[$key], array(
  8. 'type' => 'image',
  9. 'settings' => array(
  10. 'image_style' => 'medium', //тут ваш стиль отображения
  11. 'image_link' => 'content',
  12. ),
  13. ));
  14. //и выводим
  15. print render($out);
  16. }
Также есть ещё одна замечательная функция - drupal_render() В шаблоне можно использовать её. Например вот так:
  1. echo drupal_render($content['field_technology']);
Но такой подход выведен не только значение поля, но и заголовок вывода. Если он вам не нужен-отключите его на странице настройки отображения полей ноды. Ну и ещё один способ-это вручную добраться до нужного поля в объекте $content Я это сделал так:
  1. echo $content['comments']['comment_form']['#node']->field_technology['und'][0]['value'];
Этот путь у вас может отличаться. Использовать такой подход нежелательно, но тем не менее он имеет право на существование. А чтобы разобраться какой у вас путь- выведите переменную $content и смотрите что и где находится.
  1. debug($content);
Красивой вам верстки)