Wenn Sie nur überprüfen möchten, ob der aktuelle Benutzer angemeldet ist, können Sie verwenden $variables['logged_in']
, was generell in allen Vorlagendateien verfügbar ist.
In der Datei mark.html.twig wird beispielsweise der folgende Code verwendet, obwohl dies die einzige dokumentierte Variable ist status
.
{% if logged_in %}
{% if status is constant('MARK_NEW') %}
<span class="marker">{{ 'New'|t }}</span>
{% elseif status is constant('MARK_UPDATED') %}
<span class="marker">{{ 'Updated'|t }}</span>
{% endif %}
{% endif %}
Die Variable wird in anderen Template - Dateien, wie explizit dokumentiert html.html.twig , page.html.twig und node.html.twig .
Die Variable ist in allen Vorlagendateien verfügbar, da sie in _template_preprocess_default_variables()
diesem Aufruf user_template_preprocess_default_variables_alter()
(einer Implementierung von hook_template_preprocess_default_variables_alter()
) initialisiert wird , der den folgenden Code enthält.
$user = \Drupal::currentUser();
$variables['user'] = clone $user;
// Remove password and session IDs, since themes should not need nor see them.
unset($variables['user']->pass, $variables['user']->sid, $variables['user']->ssid);
$variables['is_admin'] = $user->hasPermission('access administration pages');
$variables['logged_in'] = $user->isAuthenticated();
_template_preprocess_default_variables()
wird aufgerufen von template_preprocess()
. Dies ist die Funktion, die für als Vorlagen implementierte Design-Hooks aufgerufen wird. Dies garantiert, dass die Variable in allen Vorlagendateien verfügbar ist.
Beachten Sie, dass Makros keinen Zugriff auf die aktuellen Vorlagenvariablen haben. Daher hat der Versuch, auf logged_in
den Code eines Makros zuzugreifen , keine Auswirkungen.
Unter den Vorlagendateien, die von Drupal-Kernmodulen verwendet werden, sind diejenigen, die ein Makro verwenden:
menu.html.twig
{% macro menu_links(items, attributes, menu_level) %}
{% import _self as menus %}
{% if items %}
{% if menu_level == 0 %}
<ul{{ attributes }}>
{% else %}
<ul>
{% endif %}
{% for item in items %}
<li{{ item.attributes }}>
{{ link(item.title, item.url) }}
{% if item.below %}
{{ menus.menu_links(item.below, attributes, menu_level + 1) }}
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
{% endmacro %}
book-tree.html.twig
{% macro book_links(items, attributes, menu_level) %}
{% import _self as book_tree %}
{% if items %}
{% if menu_level == 0 %}
<ul{{ attributes }}>
{% else %}
<ul>
{% endif %}
{% for item in items %}
<li{{ item.attributes }}>
{{ link(item.title, item.url) }}
{% if item.below %}
{{ book_tree.book_links(item.below, attributes, menu_level + 1) }}
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
{% endmacro %}
menu - toolbar.html.twig
{% macro menu_links(items, attributes, menu_level) %}
{% import _self as menus %}
{% if items %}
{% if menu_level == 0 %}
<ul{{ attributes.addClass('toolbar-menu') }}>
{% else %}
<ul class="toolbar-menu">
{% endif %}
{% for item in items %}
{%
set classes = [
'menu-item',
item.is_expanded ? 'menu-item--expanded',
item.is_collapsed ? 'menu-item--collapsed',
item.in_active_trail ? 'menu-item--active-trail',
]
%}
<li{{ item.attributes.addClass(classes) }}>
{{ link(item.title, item.url) }}
{% if item.below %}
{{ menus.menu_links(item.below, attributes, menu_level + 1) }}
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
{% endmacro %}
Das Ändern des letzten Makros mit dem folgenden Code hätte beispielsweise nicht das erwartete Ergebnis.
{% macro menu_links(items, attributes, menu_level) %}
{% import _self as menus %}
{% if items %}
{% if menu_level == 0 %}
<ul{{ attributes.addClass('toolbar-menu') }}>
{% else %}
<ul class="toolbar-menu">
{% endif %}
{% for item in items %}
{%
set classes = [
'menu-item',
logged_in ? 'menu-item--logged-in-user',
item.is_expanded ? 'menu-item--expanded',
item.is_collapsed ? 'menu-item--collapsed',
item.in_active_trail ? 'menu-item--active-trail',
]
%}
<li{{ item.attributes.addClass(classes) }}>
{{ link(item.title, item.url) }}
{% if item.below %}
{{ menus.menu_links(item.below, attributes, menu_level + 1) }}
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
{% endmacro %}
The variable is surely available in all the template files
Ich fürchte, Sie irren sich diesbezüglich. Wenn das Template es in den Kommentaren nicht erwähnt, muss es einen Grund geben, oder? Weil ich menu.html.twig anprobiert habe (was es in den Kommentaren nicht erwähnt) und nicht funktioniert habe. Während der Verwendung von Twig Extender funktioniert es._template_preprocess_default_variables()
wird für jede Vorlage Drupal-Ausgaben aufgerufen, so dass die Variablen, die es hinzufügt, in allen Vorlagendateien vorhanden sind. Die Dokumentation dokumentiert nicht alle Standardvariablen, soweit ich sehen kann.{% if logged_in %}
menu.html.twig an und du wirst sehen, dass es nicht funktioniert. Hat bei mir nicht funktioniert.Sie können mit dem Twig Extender- Modul. Zitat von seiner Projektseite:
quelle
Für alle, die es mit
logged_in
menu.twig.html versuchen; Sie müssen es von außerhalb desmenus.menu_links()
Makros aufrufen, da dielogged_in
Variable innerhalb des Makros außerhalb des Gültigkeitsbereichs liegt.quelle
Sie können überprüfen, ob der Benutzer wie folgt authentifiziert ist:
Zum Beispiel habe ich die folgende Funktion in themename.theme erstellt.
Danach können Sie die Logik in der Twig-Datei wie folgt erstellen:
Wenn der Benutzer angemeldet ist, erhalten Sie die Begrüßungsnachricht zusammen mit dem Benutzernamen, der E-Mail und dem Avatar-Bild. Wenn der Benutzer nicht angemeldet ist, wird nichts angezeigt.
Lassen Sie mich wissen, ob das hilft und / oder ob ich diesen Beitrag zum besseren Verständnis bearbeiten kann.
quelle