Si vous venez de vérifier que l'utilisateur actuel est connecté, vous pouvez l'utiliser $variables['logged_in']
, qui est généralement disponible dans tous les fichiers de modèle.
Par exemple, le fichier mark.html.twig utilise le code suivant, bien que la seule variable documentée soit 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 %}
La variable est explicitement documentée dans d'autres fichiers de modèle, tels que html.html.twig , page.html.twig et node.html.twig .
La variable est disponible dans tous les fichiers de modèle, car elle est initialisée dans _template_preprocess_default_variables()
celui invoque user_template_preprocess_default_variables_alter()
(une implémentation de hook_template_preprocess_default_variables_alter()
), qui contient le code suivant.
$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()
est appelé par template_preprocess()
, qui est la fonction appelée pour les crochets de thème implémentés en tant que modèles; cela garantit que la variable est disponible dans tous les fichiers de modèle.
Gardez à l'esprit que les macros n'ont pas accès aux variables de modèle actuelles , donc essayer d'accéder logged_in
au code d'une macro n'aurait aucun effet.
Entre les fichiers de modèle utilisés à partir des modules principaux de Drupal, ceux utilisant une macro sont:
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 %}
Par exemple, la modification de la dernière macro avec le code suivant n'aurait pas le résultat attendu.
{% 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
Je crains que vous vous trompiez à ce sujet. Si le modèle ne le mentionne pas dans les commentaires, il doit y avoir une raison, non? Parce que j'ai essayé sur menu.html.twig (qui ne le mentionne pas dans les commentaires) et n'a pas fonctionné. Lorsque vous utilisez Twig Extender, cela fonctionne._template_preprocess_default_variables()
est appelé pour chaque modèle de sortie Drupal, donc les variables qu'il ajoute sont présentes dans tous les fichiers de modèle. La documentation ne documente pas toutes les variables par défaut, pour autant que je puisse voir.{% if logged_in %}
menu.html.twig et vous verrez que cela ne fonctionne pas. Ça n'a pas marché pour moi.Vous pouvez avec le module Twig Extender . Citation de sa page de projet:
la source
Pour tous ceux qui essaient d'utiliser à
logged_in
partir de menu.twig.html; vous devez l'appeler de l'extérieur de lamenus.menu_links()
macro car lalogged_in
variable est hors de portée dans la macro.la source
Vous pouvez vérifier si l'utilisateur est authentifié comme suit:
Par exemple, j'ai créé la fonction suivante dans themename.theme.
Après cela, vous pouvez créer la logique dans le fichier Twig comme suit:
Si l'utilisateur est connecté, vous recevrez le message de bienvenue avec le nom d'utilisateur, l'e-mail et la photo d'avatar. Si l'utilisateur n'est pas connecté, rien n'apparaîtra.
Faites-moi savoir si cela aide et / ou si je peux éditer ce message pour une meilleure compréhension.
la source