Sprawdź, czy pole nie jest puste

15

Jaka jest najlepsza metoda sprawdzenia, czy pole jest puste w szablonie węzła.

W węźle - przyklad.html.twig możemy użyć zmiennej „content”.

Nie mogę używać czeku jak sprawdzanie bloku

{% if content.field_example  %}

Mogę użyć czegoś takiego:

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

Ale jaka jest najlepsza metoda?

sainf
źródło
1
Użyj hook_preprocess i sprawdź programowo, być może dodaj zmienną wskaźnikową. W przeciwnym razie to, co napisał 4k4.

Odpowiedzi:

21

Jak napisałem również w Jak można renderować pola z odwołania do encji w szablonach węzłów? [Drupal 8] , treść to tablica renderująca, która zawiera dane przygotowane do wyświetlenia.

Jeśli chcesz coś sprawdzić lub porównać, użyj zamiast tego wartości, które są dostępne w obiekcie węzła.

{% if node.field_example.value %}.

Należy pamiętać, że właściwość zależy od typu pola. Jeśli jest to pole referencyjne, zamiast tego należy użyć target_id. Przywoływane pytanie prowadzi do ściągawki interfejsu API pola encji, która zawiera listę popularnych typów pól i ich właściwości.

Berdir
źródło
Dla pola obrazu {% node.field_article_image.target_id%}
Yogesh Kushwaha
13

Nie możesz być pewien struktury tablicy renderowania w treści, więc nie jest to najlepsza metoda.

To może być lepsze rozwiązanie:

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

To sprawdza, czy renderowanie pola generuje jakiekolwiek dane wyjściowe.

Zależy to jednak od tego, jak skonfigurowałeś format pola i co próbujesz zrobić. Na przykład możesz skonfigurować wyświetlanie etykiety, jeśli pole jest puste. Następnie musisz to dostosować. Jeśli nie zależysz od renderowanego wyniku i chcesz tylko sprawdzić, czy pole ma wartość w bazie danych, użyj obiektu węzła. Zobacz odpowiedź Berdira.

4k4
źródło
Uważam, że odpowiedź Berdira jest właściwa, ponieważ jest bardziej elastyczna.
święty
@ 4k4: |renderNie wystarczy ze względu na przypadkowe problemy z białymi znakami w szablonach pól, zobacz ten link: Sprawdzanie pustych pól w szablonach Twig jest skomplikowane
Mojtaba Reyhani
@MojtabaReyhani: Dziękuję, świetne znalezisko. Znaleziono tam link drupal.org/node/2783633#comment-11510195 . Dodano to do kodu.
4k4
4

Sprawdź, czy pole nie jest puste w szablonie Twig ( szablon kolekcji ) : field-collection-item - field-services.html.twig

Zainstaluj moduł wartości gałązki pola, aby uzyskać wartość za pomocą „ | wartość_pola ”, a następnie „ nie jest pusty

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

       ...

{% endif %} 
Alberto Galvis
źródło
1
{% if not (node.field_whatever.isEmpty == true) and content.field_whatever is defined %}
  <div class="whatever_markup">
    {{ content.field_whatever }}
  </div>
{% endif %}

To rozwiązanie jest dość kuloodporne, a nawet działa w ramach ponownego użycia i / lub wspólnych szablonów (np. Współdzielonych przez node--teaser.html.twigwiele pakietów), ponieważ

  • działa dla wszystkich typów pól
  • sprawdza, czy pole istnieje
  • sprawdza, czy pole nie jest puste
  • sprawdza, czy pole nie jest ukryte w trybie wyświetlania

Podwójne ujemne not ...isEmpty == truejest konieczne, w przeciwnym razie nieistniejące pole nie przejdzie kontroli. Uważam również, że moje rozwiązanie jest znacznie szybsze i odporne na błędy niż jakakolwiek kontrola polegająca na renderowaniu pola.

To powinno działać na dowolnym szablonie podmiotu, np można po prostu wymienić node.field_xxxsię paragraph.field_xxxw paragraph.html.twigpliku szablonu

Hudri
źródło