Sadece geçerli kullanıcının oturum açmış olduğunu kontrol ederseniz $variables['logged_in']
, genellikle tüm şablon dosyalarında bulunan bu düğmeyi kullanabilirsiniz.
Örneğin, belgelenen tek değişken olmasına rağmen mark.html.twig dosyası aşağıdaki kodu kullanır 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 %}
Değişken, html.html.twig , page.html.twig ve node.html.twig gibi diğer şablon dosyalarında açıkça belgelenmiştir .
Değişken tüm şablon dosyalarında kullanılabilir, çünkü aşağıdaki kodu içeren _template_preprocess_default_variables()
bu çağrıları user_template_preprocess_default_variables_alter()
(uygulaması hook_template_preprocess_default_variables_alter()
) başlatır .
$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()
tarafından çağrılan template_preprocess()
şablon olarak uygulanan tema kancalar çağrısında işlevi olan; bu, değişkenin tüm şablon dosyalarında kullanılabilir olmasını garanti eder.
Makroların geçerli şablon değişkenlerine erişimi olmadığını unutmayın , bu nedenle logged_in
bir makronun kodunda erişmeye çalışmanın herhangi bir etkisi olmayacaktır.
Drupal çekirdek modüllerinden kullanılan şablon dosyaları arasında, makro kullanan dosyalar şunlardır:
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 %}
kitap-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 %}
menüsü - 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 %}
Örneğin, son makroyu aşağıdaki kodla değiştirmek beklenen sonucu vermeyecektir.
{% 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
Korkarım bu konuda yanlışsın. Şablon yorumlarda belirtmiyorsa, bir nedeni olmalı, değil mi? Çünkü menu.html.twig üzerinde denedim (yorumlarda bahsetmiyor) ve işe yaramadı. Twig Extender kullanırken çalışır.