Не срабатывает условие if. Вывожу поля в шаблоне ноды, нужна проверка на наличие поля.

Аватар пользователя psyh psyh 4 мая 2014 в 15:07

Вывожу поля в шаблоне ноды. Уже разобрался с тем как вывести, но нужна проверка на наличие поля.
Весь день бьюсь с этой мелочью, никак не срабатывает условие.

Вот код:

    <?php        
        $node 
node_load($nid);
        
$field field_get_items('node'$node'field_sity'); //Город
        
$output_sity field_view_value('node'$node'field_sity'$field[0]);
    
?>
    <?php if ($output_sity): ?>
        <p><span class="label">Город: </span><span class="value"><?php print render($output_sity); ?></span></p>
    <?php endif; ?>

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

<?php if ($output_sity) !== 0: ?>
или
<?php if ($output_sity) !== '': ?>

Никак не работает.

Комментарии

Аватар пользователя drupby drupby 5 мая 2014 в 11:06

а в шаблоне ноды нету переменной $content, содержащей все поля? $content['field_sity']

Аватар пользователя psyh psyh 5 мая 2014 в 16:28

Вообще $content есть. Я в отображении полей скрыл все поля кроме картинок и body. А остальные поля планирую вывести в шаблоне такой конструкцией как написал выше.
Думаете сделать условие на наличие поля $content['field_sity']?

Аватар пользователя drupby drupby 5 мая 2014 в 18:08

"Psyh" wrote:
Думаете сделать условие на наличие поля $content['field_sity']?

думаю да

if ($content['field_sity']) {
 //code
}
Аватар пользователя psyh psyh 5 мая 2014 в 19:01

Всем спасибо.
Мне подсказали как сделать. Сначала посмотрел что содержится в этой переменной:
var_dump($output_sity)

А в ней оказался вот такой массив, когда поле заполнено:
array(7) { ["#markup"]=> string(20) "Красноярск" ["#access"]=> bool(true) ["#printed"]=> bool(true) ["#type"]=> string(6) "markup" ["#pre_render"]=> array(2) { [0]=> string(24) "drupal_pre_render_markup" [1]=> string(27) "ctools_dependent_pre_render" } ["#after_build"]=> array(1) { [0]=> string(38) "conditional_fields_element_after_build" } ["#children"]=> string(20) "Красноярск" }
В итоге сделал сравнение такого вида:
<?php if ($output_sity['#markup']): ?>

2 sergeybelya city конечно правильно Smile Сначала это поле так и называлось. Потом обнаружил что несколько полей поломались, не знаю что с ними случилось, но значения в них не сохранялись. Я удалил эти поля и создал заново. А с city опечатался, но переделывать поленился.
2 drupby Проверил эту переменную ($content['field_sity']). Ее не существует.