Jika Anda hanya memeriksa pengguna saat ini login, Anda dapat menggunakan $variables['logged_in']
, yang umumnya tersedia di semua file template.
Misalnya, file mark.html.twig menggunakan kode berikut, meskipun satu-satunya variabel yang didokumentasikan adalah 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 %}
Variabel secara eksplisit didokumentasikan dalam file templat lain, seperti html.html.twig , page.html.twig , dan node.html.twig .
Variabel tersedia di semua file template, karena ini diinisialisasi dalam _template_preprocess_default_variables()
yang memanggil user_template_preprocess_default_variables_alter()
(implementasi dari hook_template_preprocess_default_variables_alter()
), yang berisi kode berikut.
$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()
disebut dengan template_preprocess()
, yang merupakan fungsi yang dipanggil untuk tema kait diimplementasikan sebagai templat; ini menjamin variabel tersedia di semua file templat.
Perlu diingat bahwa makro tidak memiliki akses ke variabel templat saat ini , jadi mencoba mengakses logged_in
dalam kode makro tidak akan berpengaruh.
Di antara file templat yang digunakan dari modul inti Drupal, yang menggunakan makro adalah:
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 %}
Misalnya, mengubah makro terakhir dengan kode berikut tidak akan memiliki hasil yang diharapkan.
{% 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
Saya khawatir Anda salah tentang ini. Jika template tidak menyebutkannya di komentar, pasti ada alasannya, kan? Karena saya mencoba pada menu.html.twig (yang tidak menyebutkannya di komentar) dan tidak berhasil. Saat menggunakan Twig Extender berfungsi._template_preprocess_default_variables()
dipanggil untuk setiap output template Drupal, sehingga variabel yang ditambahkannya ada di semua file template. Dokumentasi tidak mendokumentasikan semua variabel default, sejauh yang saya bisa lihat.{% if logged_in %}
pada menu.html.twig dan Anda akan melihatnya tidak berfungsi. Tidak bekerja untuk saya.Anda bisa menggunakan modul Twig Extender . Kutipan dari halaman proyeknya:
sumber
Untuk semua orang yang mencoba menggunakan
logged_in
dari menu.twig.html; Anda perlu menyebutnya dari luarmenus.menu_links()
makro karenalogged_in
variabel berada di luar cakupan dalam makro.sumber
Anda dapat memeriksa apakah pengguna dikonfirmasi seperti:
Misalnya, saya telah membuat fungsi berikut di themename.theme.
Setelah itu, Anda dapat membuat logika di dalam file Twig seperti:
Jika pengguna masuk, Anda akan mendapatkan pesan ucapan beserta nama pengguna, email & gambar avatar. Jika pengguna tidak masuk, itu tidak akan muncul apa-apa.
Beri tahu saya jika itu membantu dan / atau jika saya dapat mengedit posting ini untuk pemahaman yang lebih baik.
sumber