Jeśli chcesz tylko sprawdzić, czy bieżący użytkownik jest zalogowany, możesz użyć $variables['logged_in']
, który jest ogólnie dostępny we wszystkich plikach szablonów.
Na przykład plik mark.html.twig używa następującego kodu, chociaż jedyną udokumentowaną zmienną jest 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 %}
Zmienna jest jawnie udokumentowana w innych plikach szablonów, takich jak html.html.twig , page.html.twig i node.html.twig .
Zmienna jest dostępna we wszystkich plikach szablonów, ponieważ jest inicjowana w _template_preprocess_default_variables()
tym user_template_preprocess_default_variables_alter()
wywołaniu (implementacji hook_template_preprocess_default_variables_alter()
), która zawiera następujący kod.
$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()
jest wywoływany przez template_preprocess()
, która jest funkcją wywoływaną dla zaczepów motywu zaimplementowanych jako szablony; gwarantuje to, że zmienna jest dostępna we wszystkich plikach szablonów.
Należy pamiętać, że makra nie mają dostępu do bieżących zmiennych szablonu , więc próba dostępu logged_in
do kodu makra nie przyniesie żadnego efektu.
Pomiędzy plikami szablonów używanymi z podstawowych modułów Drupala, te używające makra to:
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 %}
Na przykład zmiana ostatniego makra za pomocą następującego kodu nie przyniosłaby oczekiwanego rezultatu.
{% 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
Obawiam się, że się mylisz w tej sprawie. Jeśli szablon nie wspomina o tym w komentarzach, musi być jakiś powód, prawda? Ponieważ próbowałem na menu.html.twig (który nie wspomina o tym w komentarzach) i nie działało. Podczas korzystania z Twig Extender działa._template_preprocess_default_variables()
jest wywoływany dla każdego szablonu Drupala, więc dodane przez niego zmienne są obecne we wszystkich plikach szablonu. Dokumentacja nie dokumentuje wszystkich domyślnych zmiennych, o ile widzę.{% if logged_in %}
menu.html.twig, a zobaczysz, że to nie działa. Nie działało dla mnie.Możesz to zrobić dzięki modułowi Twig Extender . Cytat ze strony projektu:
źródło
Dla wszystkich, którzy próbują korzystać
logged_in
z menu.twig.html; musisz wywołać go spozamenus.menu_links()
makra, ponieważlogged_in
zmienna jest poza zakresem w makrze.źródło
Możesz sprawdzić, czy użytkownik jest uwierzytelniony w następujący sposób:
Na przykład utworzyłem następującą funkcję w themename.theme.
Następnie możesz utworzyć logikę w pliku Twig w następujący sposób:
Jeśli użytkownik jest zalogowany, otrzymasz wiadomość powitalną wraz z nazwą użytkownika, adresem e-mail i zdjęciem awatara. Jeśli użytkownik nie jest zalogowany, nic się nie pokaże.
Daj mi znać, czy to pomoże i / lub czy mogę edytować ten post dla lepszego zrozumienia.
źródło