Убедитесь, что поле не пустое

15

Какой лучший способ проверить, является ли поле пустым в шаблоне узла.

В узле - example.html.twig мы можем использовать переменную «content».

Я не могу использовать проверку как проверку блока

{% if content.field_example  %}

Я могу использовать что-то вроде этого:

{% if content.field_example['#object'] is defined  %}

Но какой метод самый лучший?

sainf
источник
1
Используйте hook_preprocess и проверяйте программно, возможно, добавьте переменную индикатора. Иначе, что написал 4к4.

Ответы:

21

Как я уже писал в Как вы можете визуализировать поля из ссылки на сущность в шаблонах узлов? [Drupal 8] , content - это массив визуализации, который содержит данные, подготовленные для отображения.

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

{% if node.field_example.value %},

Обратите внимание, что свойство зависит от типа поля. Если это поле ссылки, вам нужно использовать target_id. Упомянутый вопрос ссылается на шпаргалку API полей сущностей, в которой перечислены общие типы полей и их свойства.

Berdir
источник
Для поля изображения {% node.field_article_image.target_id%}
Йогеш Кушваха
13

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

Это может быть лучшим решением:

{% if content.field_example|render|striptags|trim %}
  <p>field is not empty</p>
{% endif %}

Это проверяет, генерирует ли рендеринг поля какие-либо выходные данные.

Но это зависит от того, как вы настроили формат поля и что вы пытаетесь сделать. Например, вы могли бы настроить отображение метки, если поле пустое. Тогда вы должны настроить это. Если вы не зависите от визуализированного вывода и хотите только проверить, имеет ли поле значение в базе данных, используйте объект узла. Смотри ответ Бердира.

4k4
источник
Я считаю, что ответ Бердира правильный, потому что он более гибкий.
августа
@ 4k4: |renderэтого недостаточно из-за случайных проблем с пробелами в шаблонах полей. См. Эту ссылку: Проверка пустых полей в шаблонах Twig сложна
Мойтаба Рейхани,
@MojtabaReyhani: Спасибо, отличная находка. Нашел там эту ссылку drupal.org/node/2783633#comment-11510195 . Добавил это в код.
4k4 20.09.16
4

Проверьте, не является ли поле пустым в шаблоне Twig ( Field Collection )
Шаблон : field-collection-item - field-services.html.twig

Установите модуль значения Field Twig, чтобы получить значение, используя « | field_value », а затем « не пусто »

{% if content.field_work|field_value is not empty %}

       ...

{% endif %} 
Альберто Гальвис
источник
1
{% if not (node.field_whatever.isEmpty == true) and content.field_whatever is defined %}
  <div class="whatever_markup">
    {{ content.field_whatever }}
  </div>
{% endif %}

Это решение является пуленепробиваемым и даже работает в повторно используемых и / или общих шаблонах (например, совместно используемых в node--teaser.html.twigнескольких пакетах), потому что

  • это работает для всех типов полей
  • он проверяет, существует ли поле
  • проверяет, не является ли поле пустым
  • проверяет, не скрыто ли поле в режиме отображения

Двойной отрицательный not ...isEmpty == trueзнак необходим, иначе несуществующее поле не пройдет проверку. Я также считаю, что мое решение намного быстрее и устойчивее к ошибкам, чем любая проверка, включающая рендеринг поля.

Это должно работать для любого шаблона объекта, например , вы можете просто заменить node.field_xxxс paragraph.field_xxxв paragraph.html.twigфайле шаблона

Hudri
источник