현재 사용자가 로그인 $variables['logged_in']
했는지 확인하기 만하면 모든 템플릿 파일에서 일반적으로 사용할 수있는를 사용할 수 있습니다.
예를 들어, mark.html.twig 파일은 다음 코드를 사용하지만 문서화 된 유일한 변수는 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 %}
변수는 html.html.twig , page.html.twig 및 node.html.twig 와 같은 다른 템플리트 파일에 명시 적으로 문서화되어 있습니다.
변수는 다음 코드를 포함 _template_preprocess_default_variables()
하는 호출 user_template_preprocess_default_variables_alter()
(구현 hook_template_preprocess_default_variables_alter()
) 에서 초기화되므로 모든 템플릿 파일에서 사용할 수 있습니다 .
$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()
template_preprocess()
템플릿으로 구현 된 테마 후크를 호출하는 함수 인에 의해 호출됩니다 . 이렇게하면 모든 템플릿 파일에서 변수를 사용할 수 있습니다.
있다는 사실을 숙지 매크로는 현재의 템플릿 변수에 액세스 할 수 없습니다 때문에 액세스를 시도, logged_in
어떤 효과가없는 것입니다 매크로의 코드이다.
Drupal 코어 모듈에서 사용되는 템플릿 파일 사이에서 매크로를 사용하는 파일은 다음과 같습니다.
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 %}
예를 들어 다음 코드를 사용하여 마지막 매크로를 변경하면 예상 한 결과가 없습니다.
{% 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
나는 당신이 이것에 대해 틀린 것을 두려워합니다. 의견에 템플릿이 언급되지 않은 경우 이유가 있어야합니다. menu.html.twig (댓글에 언급되지 않음) 에서 시도했지만 작동하지 않았기 때문입니다. Twig Extender를 사용하는 동안 작동합니다.