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.