[Решено] Нужно в блоке вывести значение одного из полей материала

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

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 21 февраля 2012 в 18:23

Есть материал с текстовым полем. Нужно в блоке сниппетом вывести значение этого поля (т.е. его текст), если оно не пустое.

Подскажите старому перцу, пожалуйста. Все забыл уже. Smile

Upd.: Воспользовался решением, предложенным RxB:

<?php
$node 
menu_get_object();
$field field_get_items('node'$node'name_of_field',);
print 
$field['0']['value'];
?>

Комментарии

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 21 февраля 2012 в 19:04

Эти модули управляют показом полей, но насколько я знаю, они не умеют выводить поля по условиям.

Тогда опишу задачу иначе: на странице материала нужно вывести либо поле "1", либо поле "2". Причем поле "2" выводим, если оно не пустое (в таком случае не выводим поле "1").

Аватар пользователя Shok211 Shok211 21 февраля 2012 в 19:08

Drupal такого не умеет.

[color=#FFF]( Мне кажется по времени написать микро модуль займет столько же времени сколько и спрашивать что то на этом форуме )[/color]

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 21 февраля 2012 в 19:29

А когда-то, я читал ваши посты и ставил вашу сборку руссифицированной пятёрки...

<?php
$node = menu_get_object();
$field = field_get_items('node', $node, 'name_of_field',);
print $field['0']['value'];
?>

Как-то так, можете стукнуть в личку или скайп, часов после 9 по Москве. Расскажу.

Аватар пользователя sestiana sestiana 9 июля 2012 в 16:26

Чаво-то у меня не получается вывести. Там, кажется, запятая лишняя после 'name_of_field', но не получается не из-за этого. Вадим, Вам помогло решение?

Аватар пользователя KinDaZa KinDaZa 3 января 2013 в 22:22

Все отлично помогло, спасибо RxB. Там действительно нужно удалить зпт в конце перед скобкой:
<?php
$node = menu_get_object();
$field = field_get_items('node', $node, 'name_of_field');
print $field['0']['value'];
?>

Аватар пользователя Antoniy Antoniy 3 июля 2013 в 21:53

А если надо имя термина таксономии в блоке вывести (имя термина таксономии задается в поле типа term_reference) то я сделал так:
(у меня есть словарь терминов таксономии с городами)

<?php
$node 
menu_get_object();
$category_city field_get_items('node'$node'field_city');
$category_city_name $category_city[0]['taxonomy_term'];
print 
$category_city_name->name;
?>

Или громоздко?

UPD: убрал вывод поля в ноде и получил "Notice: Undefined index: taxonomy_term в функции eval() ..."

UPD: нашел, как подгрузить name taxonomy_term в блок, если поле в ноде не выведено:

<?php
$node 
menu_get_object();
$category_city field_view_field('node'$node'field_city');
$category_city_name $category_city['#items'][0]['taxonomy_term']->name;
print 
$category_city_name;
?>

Подсмотрел тут

Аватар пользователя Antoniy Antoniy 4 июля 2013 в 12:48

Разобрался, как вывести программно несколько значений поля через запятую в блоке (в моем случае множественное текстовое поле для внесения номеров телефонов (field_phone)):

<?php
$node 
menu_get_object();
$phone = array();
foreach (
$node->field_phone['und'] as $phone) {
  
$phone_list[] = $phone['value'];
}
print 
implode(', '$phone_list);
?>

Подсмотрел тут

Аватар пользователя Antoniy Antoniy 4 июля 2013 в 13:10

А так в блоке значение поля типа link_field (у меня названо field_site) можно вывести в виде ссылки:

<?php
$node 
menu_get_object();
$site field_get_items('node'$node'field_site');
print 
'<a href="' $site[0]['url'] . '" title="' $site[0]['title']. '">Просмотреть личный сайт</a>';
?>
Аватар пользователя Antoniy Antoniy 12 июля 2013 в 17:01

Не пойму как вывести значение "Формат: По умолчанию" поля типа selec list
field_name[0]['value'] выводит safe name
field_name[0]['#markup'] не распознается, хотя через Devel это единственное, что выводит дефолтовое значение.
Я понимаю, что как то надо распаривать field_name[0]['#markup'] через array(), но как не пойму, пробовал по разному, но не получается.

Аватар пользователя Antoniy Antoniy 12 июля 2013 в 18:23

Вроде вывел #markup поля list select в блоке:

<?php
$node 
menu_get_object();
$element_adr field_view_field('node'$node'field_element');
$element_adr_markup $element_adr[0]['#markup'];
print 
$element_adr_markup;
?>

field_element - это list select, в котором на выбор ул. пр-т, пр. и т. п.
Когда значение выбрано, то выводит как надо, например ул.
А когда значение не выбрано, то получаю:
Notice: Undefined offset: 0 в функции eval() (строка 4 в файле E:\OpenServer\domains\mydomain.local\public_html\modules\php\php.module(80) : eval()'d code).

UPD: Пока решил так: поставил еще один вариант выбора "не указано" и воткнул его по умолчанию. Так как это тоже значение, то Notice не вылазит. Сделал проверку по другому полю "Улица" (текстовое), если оно пустое, то field_element не показывается.

Аватар пользователя Antoniy Antoniy 4 сентября 2013 в 16:10

"iNFerNo" wrote:
один элемент выводится, а не все введеные.

В смысле множественное значение? Есть способы.. только универсальные вряд ли смогу привести.

"iNFerNo" wrote:
а если нет значения ???

Делать по условию IF ELSE

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

Аватар пользователя Antoniy Antoniy 4 сентября 2013 в 16:14
$node = menu_get_object();
$element_adr = field_view_field('node', $node, 'field_element');
$element_adr_markup = $element_adr[0]['#markup'];
$street = field_get_items('node', $node, 'field_street');
$building = field_get_items('node', $node, 'field_building');
if ($street[0]['value']!='') {
print '<div class="field field-name-field-address"><div class="field-items">' . $element_adr_markup . ' ' . $street[0]['value'] . ', ' . $building[0]['value'] . '</div></div>';
};
$phone = array();
foreach ($node->field_phone['und'] as $phone) {
  $phone_list[] = $phone['value'];
}
print '<div class="field field-name-field-phone"><div class="field-items">' . implode(', ', $phone_list) . '</div></div>';
$type_org = field_get_items('node', $node, 'field_type_organization');
$title = field_get_items('node', $node, 'title_field');
$site = field_get_items('node', $node, 'field_site');
if ($site[0]['url']!='') {
print '<div class="field field-name-field-site"><div class="field-items"><a href="' . $site[0]['url'] . '" title="' . $type_org[0]['value'] . ' ' . '&laquo;' . $title[0]['value'] . '&raquo;' . '" target="_blank">Просмотреть личный сайт</a></div></div>';
};
Аватар пользователя Antoniy Antoniy 4 сентября 2013 в 16:18

"iNFerNo" wrote:
а если нет значения ???

Например, если просто текстовое поле, то:

if ($street[0]['value']!='') {
print '<div class="field field-name-field-address"><div class="field-items">' . $element_adr_markup . ' ' . $street[0]['value'] . ', ' . $building[0]['value'] . '</div></div>';
};

Где:
$street = field_get_items('node', $node, 'field_street');

В остальных случаях может быть сложнее.

Аватар пользователя Antoniy Antoniy 4 сентября 2013 в 16:25

"iNFerNo" wrote:
один элемент выводится, а не все введеные.

Если имеется в виду поле со множественным значением, то:

$phone = array();
foreach ($node->field_phone['und'] as $phone) {
  $phone_list[] = $phone['value'];
}
print '<div class="field field-name-field-phone"><div class="field-items">' . implode(', ', $phone_list) . '</div></div>';

Тут предполагается, что хотябы одно значение будет введено, для таких полей я обычно ставлю обязаловку.