यदि आप केवल वर्तमान उपयोगकर्ता की जांच करने के लिए लॉग-इन कर रहे हैं, तो आप उपयोग कर सकते हैं $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 %}
पुस्तक-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 %}
मेनू - 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 (जिसमें टिप्पणियों में इसका उल्लेख नहीं है) पर काम किया और काम नहीं किया। ट्विग एक्सटेंडर का उपयोग करते समय यह काम करता है।