Вывод описания поля в собственном типе материала

Главные вкладки

Аватар пользователя inspire inspire 1 марта 2012 в 14:49

Hi, All!
Создал собственный тип материала "Продукты".
Есть словарь таксономии "Контакты", где перечислены имена продавцов, а в описаниях терминов - контактная информация.
Добавил поле field_manager к типу материала, указал его в отображении. Но у меня выводится только имя термина, а мне хотелось бы еще и описание (с контактной информацией) выводить. Возможно ли это реализовать в моем случае?

Комментарии

Аватар пользователя inspire inspire 15 марта 2012 в 19:37

mrBF wrote:
В шаблоне материала (товара) вручную вывести описание термина. Думаю самый простой вариант.

Если так, то получается, что при изменении контактных данных какого-либо менеджера, придется вручную изменять это в каждом материале. Неудобно же!
Или я не так что-то понял? Smile

Аватар пользователя mrBF mrBF 16 марта 2012 в 12:02

Нет конечно же. Что касается d7: при выводе термина на странице материала доступна значение в $node:
$node->FIELD_NAME[und][ELEMENT_NUMBER]['taxonomy_term']

у которой определены поля:

tid
vid
name
description
format
weight
vocabulary_machine_name

Как видите все тут. осталось только темизировать шаблон типа материала:

hide($content['field_statement']); // скрыли поле от автоматического рендеринга
?><dl><?php
  ?><dt><?php
    print $FIELD_NAME[und][ELEMENT_NUMBER]['taxonomy_term']['name']; // имя менеджера
  ?></dt><?php
  ?><dd><?php
    print $FIELD_NAME[und][ELEMENT_NUMBER]['taxonomy_term']['description']"; // поле описания менеджера
  ?>
</dd><?php
?></dl><?php

И повторюсь: действительно для drupal 7 и поля типа "ссылка на термин". Для 6 все будет похоже, но чуток не так!

Аватар пользователя mrBF mrBF 16 марта 2012 в 20:10

с und - тут я ошибся: ['und'] -кавычки нужны - индекс ассоциативного массива.
А вод ELEMENT_NUMBER - номер, в данном случае, элемента поля (0,1,2,3...), если в поле более одного значения.
А вообще чтобы увидеть все картину: посмотрите xDebuger (или еще чем), или просто распечатайте переменную $node:

<?php print_r($node);?>

Аватар пользователя inspire inspire 16 марта 2012 в 22:47

Огромнейшее, спасибо! Все получилось!
Небольшая поправка, только - $node->FIELD_NAME[und][ELEMENT_NUMBER]['taxonomy_term'] - это stdClass Object, поэтому я использовал такую конструкцию:


<?php 
     $fmanager_name 
$node->field_manager['und'][0]['taxonomy_term'];
     print 
$fmanager_name->name// имя менеджера 
?>
        
<?php 
     $fmanager_desc 
$node->field_manager['und'][0]['taxonomy_term'];
     print 
$fmanager_desc->description// поле описания менеджера
?>
Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 16 марта 2012 в 22:50

"mrBF" wrote:
Нет конечно же. Что касается d7: при выводе термина на странице материала доступна значение в $node:
$node->FIELD_NAME[und][ELEMENT_NUMBER]['taxonomy_term']

Молодец. Про field_get_items() не в курсе?

Аватар пользователя mrBF mrBF 16 марта 2012 в 23:01

field_get_items() это + выполнение кучи дополнительных строк кода и запросы к БД? Для одноязычного сайта может просто print? Как считаете?

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 16 марта 2012 в 23:09

"mrBF" wrote:
field_get_items() это + выполнение кучи дополнительных строк кода и запросы к БД? Для одноязычного сайта может просто print? Как считаете?

Я считаю, что field_get_items(), потому что на одном из проектов мы полгода ломали голову как на одноязычном сайте могут быть одновременно поля und и ru.
А скуль-запросы, я их где-то предложил или я чего-то не знаю?

Аватар пользователя mrBF mrBF 16 марта 2012 в 23:44

Бегло просмотрел, получил такую иерархию вызовов(на одно поле):
field_get_items -> field_language -> field_valid_language -> language_list(тут уже начинаются запросы) -> language_default(продолжаются) ...

Так выходит? мог ошибиться, конечно. Если что поправьте.

Аватар пользователя inspire inspire 17 марта 2012 в 12:28

"RxB" wrote:
Молодец. Про field_get_items() не в курсе?

Нет, не в курсе. Освоение друпала у меня пока что в начальной стадии - я многого не слышал Smile