Есть материал с текстовым полем. Нужно в блоке сниппетом вывести значение этого поля (т.е. его текст), если оно не пустое.
Подскажите старому перцу, пожалуйста. Все забыл уже.
Upd.: Воспользовался решением, предложенным RxB:
<?php
$node = menu_get_object();
$field = field_get_items('node', $node, 'name_of_field',);
print $field['0']['value'];
?>
Комментарии
Display suite ?
ну что тут еще добавить??
Эти модули управляют показом полей, но насколько я знаю, они не умеют выводить поля по условиям.
Тогда опишу задачу иначе: на странице материала нужно вывести либо поле "1", либо поле "2". Причем поле "2" выводим, если оно не пустое (в таком случае не выводим поле "1").
Drupal такого не умеет.
[color=#FFF]( Мне кажется по времени написать микро модуль займет столько же времени сколько и спрашивать что то на этом форуме )[/color]
А когда-то, я читал ваши посты и ставил вашу сборку руссифицированной пятёрки...
$node = menu_get_object();
$field = field_get_items('node', $node, 'name_of_field',);
print $field['0']['value'];
?>
Как-то так, можете стукнуть в личку или скайп, часов после 9 по Москве. Расскажу.
Да, Виктор, время идет... Кому-то на пользу, а кому-то нет.
Попробую ваш вариант. Спасибо.
Чаво-то у меня не получается вывести. Там, кажется, запятая лишняя после 'name_of_field', но не получается не из-за этого. Вадим, Вам помогло решение?
cck_blocks
Все отлично помогло, спасибо RxB. Там действительно нужно удалить зпт в конце перед скобкой:
<?php
$node = menu_get_object();
$field = field_get_items('node', $node, 'name_of_field');
print $field['0']['value'];
?>
Спасибо!
А если надо имя термина таксономии в блоке вывести (имя термина таксономии задается в поле типа 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;
?>
Подсмотрел тут
Разобрался, как вывести программно несколько значений поля через запятую в блоке (в моем случае множественное текстовое поле для внесения номеров телефонов (field_phone)):
<?php
$node = menu_get_object();
$phone = array();
foreach ($node->field_phone['und'] as $phone) {
$phone_list[] = $phone['value'];
}
print implode(', ', $phone_list);
?>
Подсмотрел тут
А так в блоке значение поля типа 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>';
?>
Не пойму как вывести значение "Формат: По умолчанию" поля типа selec list
field_name[0]['value'] выводит safe name
field_name[0]['#markup'] не распознается, хотя через Devel это единственное, что выводит дефолтовое значение.
Я понимаю, что как то надо распаривать field_name[0]['#markup'] через array(), но как не пойму, пробовал по разному, но не получается.
Вроде вывел #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 не показывается.
подскажите как в блоке вывести значение поля ['#markup'] а не его ключ
разобрались как???
Я выше написал? Не работает?
один элемент выводится, а не все введеные.
а если нет значения ???
В смысле множественное значение? Есть способы.. только универсальные вряд ли смогу привести.
Делать по условию IF ELSE
---
Могу привести свои коды, но они заточены под проект, который я делал.
Если разберешься и сможешь под свой адаптировать, то будет збс
$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'] . ' ' . '«' . $title[0]['value'] . '»' . '" target="_blank">Просмотреть личный сайт</a></div></div>';
};
Например, если просто текстовое поле, то:
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');
В остальных случаях может быть сложнее.
Если имеется в виду поле со множественным значением, то:
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>';
Тут предполагается, что хотябы одно значение будет введено, для таких полей я обычно ставлю обязаловку.
погляжу