ব্যবহারকারী কোনও থিমটিতে লগ ইন করেছেন কিনা তা পরীক্ষা করুন


16

ড্রুপাল In-তে আমরা চেক $GLOBAL['user']->uidবা ব্যবহার করে বর্তমান ব্যবহারকারী কোনও থিমটিতে লগ-ইন করা হয়েছে কিনা তা সহজেই পরীক্ষা করতে পারি user_is_logged_in()

কোনও ব্যবহারকারী কোনও পৃষ্ঠার টেমপ্লেটে, দ্রুপাল 8-এ লগ-ইন আছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?

একটি সমাধান হ'ল ম্যানুয়ালি চেক ইন করা hook_preprocess_page(), তবে এটি যেহেতু খুব জনপ্রিয় তাই আমি মনে করি দ্রুপাল টুইগ থিম ইঞ্জিনের জন্য ডিফল্টরূপে কিছু সরবরাহ করে।

উত্তর:


26

আপনি যদি কেবলমাত্র বর্তমান ব্যবহারকারী লগ ইন আছেন তা পরীক্ষা করতে পারেন, আপনি ব্যবহার করতে পারেন $variables['logged_in'] যা সাধারণত সমস্ত টেম্পলেট ফাইলগুলিতে পাওয়া যায়।

উদাহরণস্বরূপ, চিহ্ন। 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(), যা টেমপ্লেট হিসাবে প্রয়োগ থিম হুক জন্য ডাকা ফাংশন; এটি গ্যারান্টি দেয় যে সমস্ত টেম্পলেট ফাইলগুলিতে ভেরিয়েবল উপলব্ধ।

মনে রাখবেন যে ম্যাক্রোগুলির বর্তমান টেম্পলেট ভেরিয়েবলগুলিতে অ্যাক্সেস নেই so সুতরাং ম্যাক্রোর কোডটিতে অ্যাক্সেস করার চেষ্টা logged_inকরা কোনও প্রভাব ফেলবে না।
ড্রুপাল কোর মডিউলগুলি থেকে ব্যবহৃত টেম্পলেট ফাইলগুলির মধ্যে যেগুলি ম্যাক্রো ব্যবহার করে তা হ'ল:

  • 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আমি আশঙ্কা করছি আপনি এই সম্পর্কে ভুল। যদি টেমপ্লেট মন্তব্যগুলিতে এটি উল্লেখ না করে তবে অবশ্যই একটি কারণ থাকতে হবে, তাই না? কারণ আমি মেনু . html.twig (যা মন্তব্যে এটি উল্লেখ করে না) চেষ্টা করেছিলাম এবং কার্যকর হয়নি। টুইগ এক্সটেন্ডার ব্যবহার করার সময় এটি কাজ করে।
কোনও এসসিওয়েট

_template_preprocess_default_variables()প্রতিটি টেম্পলেট ড্রুপাল আউটপুটগুলির জন্য ডাকা হয়, সুতরাং এটি যুক্ত করা ভেরিয়েবলগুলি সমস্ত টেম্পলেট ফাইলগুলিতে উপস্থিত থাকে। ডকুমেন্টেশন সমস্ত ডিফল্ট ভেরিয়েবল নথি করে না, যতদূর আমি দেখতে পাচ্ছি।
কিমলালুনো

2
@ কিয়ামলালুনো যখনই আপনার ফ্রি সময় পাবেন, মেন্যু html.twig এ চেষ্টা {% if logged_in %}করুন এবং আপনি দেখবেন এটি কার্যকর হয় না। আমার পক্ষে কাজ করেনি।
কোনও এসসিওয়েট

6

আপনি করতে পারেন টুইগ এক্সটেন্ডার মডিউল। এর প্রকল্প পৃষ্ঠা থেকে উদ্ধৃতি:

নতুন টুইগ এক্সটেনশন (ফিল্টার এবং ফাংশন) যুক্ত করতে একটি সাধারণ প্লাগইন সিস্টেম যুক্ত করুন। নতুন প্লাগইন যুক্ত করতে "টুইগ. এক্সটেনশনগুলি" এর জন্য একটি নতুন পরিষেবা সরবরাহকারী সরবরাহ করে।

ফাংশন: is_user_logged_in

ব্যবহারকারী লগ ইন হয়েছে কিনা তা পরীক্ষা করুন।

{% if user_is_logged_in() %}
Hello user
{% else %}
Please login
{% endif %}

কেবল 57 টি ব্যবহার এবং বিটা :(। হতে পারে আপনার চেয়ে ভাল সমাধান হ'ল [ars ওয়ার্স ['is_login'] =! rup দ্রুপাল :: কারেন্ট ইউজার () -> অজ্ঞাতনামা (); prep প্রিপ্রোসেস_পেজে? আপনার মতামত কী?
ইউসুফ

2
সেই কার্যকারিতাটির জন্য কোনও মডিউলের প্রয়োজন নেই, যেহেতু ড্রুপাল কোর এর ইতিমধ্যে রয়েছে। আমার উত্তর দেখুন।
কিমলালুনো

@ কিমালালুনো হ্যাঁ, আমি আপনার সাথে একমত, এই প্রয়োজনীয়তাটি খুব জনপ্রিয় এবং আমি নিশ্চিত যে দ্রুপাল এর জন্য কিছু সরবরাহ করেছিল।
ইউসুফ

1

logged_inমেনু.টিভিগ এইচটিএমএল থেকে ব্যবহার করার চেষ্টা করা প্রত্যেকের জন্য ; ভেরিয়েবলটি ম্যাক্রোর মধ্যে সুযোগের বাইরে থাকায় আপনাকে এটিকে menus.menu_links()ম্যাক্রোর বাইরে থেকে কল করতে হবে logged_in


1

আপনি যদি ব্যবহারকারীকে এর মতো প্রমাণীকরণ করা হয় তা পরীক্ষা করতে পারেন:

উদাহরণস্বরূপ, আমি themename.theme এ নিম্নলিখিত ফাংশন তৈরি করেছি।

# Function to get user logged info
function tropical_preprocess_page(&$variables){
  // if user is authenticated
  if($variables['user']->isAuthenticated()){
    # gets username
  $user_logged_in_name = $variables['user']->getDisplayName();
  # creates value to ouput in the DOM & capitalize first letter
  $variables['user_logged_in_name'] = ucfirst($user_logged_in_name);

  # gets user email
  $user_email = $variables['user']->getEmail();
  $variables['user_email'] = $user_email;

  // get user picture
  $user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
  $variables['user_picture'] = $user->get('user_picture')->entity->url();

  // Check if user is logged in
  $user_logged = $variables['user']->isAuthenticated();
  $variables['user_logged'] = $user_logged;
  }
}

এর পরে, আপনি টুইগ ফাইলের মধ্যে যুক্তিটি তৈরি করতে পারেন:

<div class="user-logged-greeting">
  {% if user_logged %}
    <h2>Welcome back, {{ user_logged_in_name }}!</h2>
    <p>The email for this user is: <strong>{{ user_email }}<strong></p>
    <img src="{{ user_picture }}" width="50" height="50">
  {% endif %}
</div>

যদি ব্যবহারকারী লগ ইন থাকে তবে আপনি ব্যবহারকারীর নাম, ইমেল এবং অবতার ছবি সহ শুভেচ্ছা বার্তাটি পাবেন। ব্যবহারকারী লগ ইন না থাকলে এটি কিছুই দেখায় না won't

যদি তা সহায়তা করে এবং / অথবা আমি আরও ভাল বোঝার জন্য এই পোস্টটি সম্পাদনা করতে পারি তবে আমাকে জানান।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.