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

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'];
?>

Комментарии

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

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

21 февраля 2012 в 19:04

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

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

21 февраля 2012 в 19:08

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

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

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

21 февраля 2012 в 19:29

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

9 июля 2012 в 16:26

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

3 января 2013 в 22:22

А если надо имя термина таксономии в блоке вывести (имя термина таксономии задается в поле типа 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;
?>

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

3 июля 2013 в 21:53

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

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

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

4 июля 2013 в 12:48

А так в блоке значение поля типа 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>';
?>
4 июля 2013 в 13:10

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

12 июля 2013 в 17:01

Вроде вывел #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 не показывается.

12 июля 2013 в 18:23

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

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

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

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

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

4 сентября 2013 в 16:10
$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>';
};
4 сентября 2013 в 16:14

"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');

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

4 сентября 2013 в 16:18

"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>';

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

4 сентября 2013 в 16:25