Перевірте, чи поле не порожнє


15

Який найкращий метод перевірити, чи поле порожнє в шаблоні вузла.

У node - example.html.twig ми можемо використовувати змінну "content".

Я не можу використовувати чек, як перевірку блоку

{% if content.field_example  %}

Я можу використовувати щось подібне:

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

Але який найкращий метод?


1
Використовуйте гачку_препроцес і перевірте програмно, можливо додайте змінну індикатора. Інакше те, що написав 4k4.

Відповіді:


21

Як я також писав у " Як можна відображати поля із посилання на об'єкт у шаблонах вузлів?" [Drupal 8] , вміст - це масив візуалізації, який містить дані, підготовлені для відображення.

Якщо ви хочете щось перевірити або порівняти, використовуйте натомість значення, доступні для об'єкта вузла.

{% if node.field_example.value %}.

Зауважте, що властивість залежить від типу поля. Якщо це довідкове поле, вам потрібно використовувати target_id замість цього. Посилане запитання посилається на шпаргалку API поля особи, яка містить переліки загальних типів полів та їх властивості.


Для поля зображення {% node.field_article_image.target_id%}
Йогеш Kushwaha

13

Ви не можете бути впевнені в структурі масиву візуалізації всередині вмісту, тому це можливо не найкращий метод.

Це може бути кращим рішенням:

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

Це перевіряє, чи візуалізація поля генерує якийсь результат.

Але це залежить від того, як ви налаштували формат поля і що ви намагаєтеся зробити. Наприклад, ви могли налаштувати відображення мітки, якщо поле порожнє. Тоді вам доведеться це відрегулювати. Якщо ви не залежите від виведеного виводу і хочете перевірити, чи є в полі значення бази даних, використовуйте об'єкт вузла. Дивіться відповідь Бердіра.


Я вважаю відповідь Бердіра правильною, тому що вона більш гнучка.
sainf

@ 4k4: цього |renderнедостатньо через випадкові проблеми з пробілами у шаблонах полів. Дивіться за цим посиланням: Перевірка порожніх полів у шаблонах Twig складна
Mojtaba Reyhani

@MojtabaReyhani: Дякую, чудова знахідка. Знайдено там посилання drupal.org/node/2783633#comment-11510195 . Додано це до коду.
4k4

4

Перевірте, чи поле не порожнє в шаблоні Twig ( Шаблон колекції поля ) : field-collection-item - field-services.html.twig

Встановіть модуль значень поля 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файлі шаблону

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.