Ich habe die Bedingung, Bereiche in meiner Seitenvorlage zu drucken, da diese nicht leer ist , aber es werden immer leere Bereiche gedruckt, egal was passiert. Was ist der richtige Weg, um leere Regionen zu erkennen?
Zum Beispiel {% if page.local_tasks is not empty %}{{ page.local_tasks }}{% endif %}
druckt aus <div class="region region-local-tasks"></div>
.
Wenn ich die Region themename_preprocess_page()
mit var_dump(drupal_render($variables['page']['highlighted']));
rendere, erhalte ich SafeString mit Platzhalter-Token:
<div class="region region-highlighted"><drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="a8c34b5e"></drupal-render-placeholder></div>
Also, technisch ist die Region nicht leer , aber ich kann nichts dagegen tun.
page.local_tasks
enthält, wenn Sie der Meinung sind, dass es leer sein sollte?Antworten:
TL; DR dafür ist, dass es keine Möglichkeit gibt, zuverlässig zu überprüfen, ob die Region leer ist oder nicht in der Vorlage.
In Drupal 8 können wir zu dem Zeitpunkt, an dem wir uns auf Vorlagenebene befinden, nicht feststellen, ob die Region Inhalt enthält oder nicht, da der Inhalt träge gerendert wird. Hierfür gibt es ein offenes Drupal 8-Problem .
Um dies zu erreichen, müssen Sie wahrscheinlich CSS schreiben, das prüft, ob die Region leer ist. Sie können versuchen, Folgendes zu verwenden : leerer Pseudo-Selektor .
quelle
Versuchen Sie, Filter nach dem Rendern wie folgt anzuwenden:
quelle
strip_tags
Filters herausgefiltert).Im Zweig sollten Sie wirklich in der Lage sein:
Möglicherweise befindet sich jedoch etwas in page.local_tasks (z. B. leeres Markup). Bitte versuche folgendes:
quelle
debug
meinst dudump
? Was passiert, wenn Sie es tun{% if page.local_tasks %}Crazy magic{% endif %}
?page.local_tasks
nicht leer ist. Es ist voller HTML. Ich werde meine Antwort aktualisieren.Das hat bei mir funktioniert.
Einfach genug.
quelle
Sie sollten
Renderer
Service anstelle von verwendenwas veraltet ist, also:drupal_render()
Dadurch wird
drupal-render-placeholder
vermieden, dass in der Ausgabe ein Tag generiert wird.Ähnliches Problem: Wie kann man den Drupal-Render-Platzhalter manuell ersetzen?
quelle
Versuche dies :
quelle
Das funktioniert in meinem Fall tatsächlich
striptags akzeptiert eine Reihe von Tags, die beibehalten werden sollen, sodass Sie auch alle inhaltslosen Tags hinzufügen können, die Sie erwarten, wie z
<form><img>
.quelle
Folgendes funktioniert auch, wenn das Debuggen von Zweigen aktiviert ist:
quelle
So erkennen Sie, ob die Region leer ist oder nicht: Code wie folgt:
Im obigen Code wird geprüft, ob die Region local_tasks leer ist oder nicht, und wenn sie leer ist, wird diese Region nicht gedruckt
quelle