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?
Odpowiedzi:
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.
źródło
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:
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.
źródło
|render
Nie 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 skomplikowaneSprawdź, 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 ”
źródło
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.twig
wiele pakietów), ponieważPodwójne ujemne
not ...isEmpty == true
jest 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_xxx
sięparagraph.field_xxx
wparagraph.html.twig
pliku szablonuźródło