আমি কোনও নির্দিষ্ট মডিউলের জন্য টুইগ এবং ব্লক ক্যাশে কীভাবে অক্ষম করব?


15

আমি ড্রুপাল 8-তে একটি মডিউলে কাজ করছি যা একটি বাহ্যিক আরএসটি এপিআই থেকে সময় সংবেদনশীল ডেটা উদ্ধার করে। ডেটা প্রক্রিয়া করে একটি ব্লকে ফরোয়ার্ড করা হয়। চূড়ান্ত তথ্যটি কোনও টুইগ টেম্পলেটটিতে পাঠানো হয়:

...

public function build() {
  $build = [];

  $build['ticker_block'] = [
    '#theme' => 'module_theme',
    '#data' => $myService->data(),
  ];

  return $build;
}

এটি উত্পাদন পরিবেশে কাজ করে না যেখানে ক্যাশে সক্ষম রয়েছে এবং রেন্ডার করা ডেটা বাসি হিসাবে দেখায়। আমি কেবলমাত্র আমার মডিউলটির জন্য ক্যাশে অক্ষম করব এবং টুইগ টেম্পলেট এবং ব্লক প্লাগইন উভয়ের জন্যই আমাকে এটি করতে হবে?

উত্তর:


27

আপনি # ক্যাশে উপাদান দিয়ে রেন্ডার অ্যারেতে ক্যাশে নিয়ন্ত্রণ করতে পারেন।

ক্যাশে অক্ষম করতে যুক্ত করুন:

$build['#cache']['max-age'] = 0;

এই ক্ষেত্রে ব্লকটি লগ ইন করা ব্যবহারকারী বা সেশন সহ বেনামী ব্যবহারকারীদের জন্য ক্যাশে করা হবে না।

আপনি যদি কোনও অধিবেশন ছাড়াই অনামী ব্যবহারকারীদের জন্য ক্যাশে অক্ষম করতে চান:

পৃষ্ঠা_ ক্যাশে মডিউল পুরোপুরি আনইনস্টল করে বা কিল সুইচটি ট্রিগার করে এটি অক্ষম করুন, দেখুন আমি কীভাবে কোনও নির্দিষ্ট পৃষ্ঠা ক্যাশে যাওয়া রোধ করতে পারি? উদাহরণ স্বরূপ.

টুইগ কোডের ক্যাচিং এর সাথে সংযুক্ত নেই, ডাবল কোডটি কেবল একবার ক্যাশে হয়, আপনি ক্যাশে সাফ করার পরে প্রথমবার এটি ব্যবহৃত হয়।

(বার্ডিরের মন্তব্যে সম্পাদনা করুন)


আমি মনে করি ক্যাশে প্রসঙ্গটি এই নির্দিষ্ট ক্ষেত্রে সহায়তা করবে না, তবে আপনি 0 এর পরিবর্তে প্রকৃত সর্বোচ্চ বয়স ব্যবহার করতে চান যা 60 এর মতো সম্পূর্ণরূপে ক্যাশে অক্ষম করেছে your আপনার ডেটা কতটা সংবেদনশীল তা নিশ্চিত নয় তবে সাধারণত, জিনিসগুলি পারে এক মিনিট বা কয়েক জন্য ক্যাশে করা। এছাড়াও, নোট করুন যে সর্বাধিক বয়স বেনাম পৃষ্ঠা ক্যাশে প্রভাবিত করে না। বেনামী ব্যবহারকারীদের জন্য আপনার যদি এটির প্রয়োজন হয় তবে আপনাকে জাভাস্ক্রিপ্ট ব্যবহার করে এটি সম্পূর্ণরূপে অক্ষম করতে হবে বা ডেটা আনতে হবে।
বারদির

@ বার্ডির: আমি বেনামে ব্যবহারকারীর জন্য সর্বাধিক বয়স = 0 ব্যবহার করি তবে সেশনগুলি সহ। এটি ডেভ এখন কাজ করছে। আপনি কি মনে করেন উত্পাদনের জন্য এটি ঠিক আছে? সম্পূর্ণরূপে অক্ষম করার অর্থ কী?
কে 4

এটি ঠিক আছে যদি আপনার সেশন থাকে, তবে এটি কার্যকর হয়। পৃষ্ঠা_ ক্যাশে মডিউল সম্পূর্ণরূপে আনইনস্টল করে বা কিল স্যুইচটি ট্রিগার করে এটি অক্ষম করুন, উদাহরণস্বরূপ drupal.stackexchange.com/questions/151254/… দেখুন ।
বার্ডির

দুর্দান্ত তথ্যের জন্য আপনাকে ধন্যবাদ, আমি উত্তরে এটি যোগ করেছি।
4k4

1
$ build ['# ক্যাশে'] ['সর্বাধিক বয়স'] = 0; কৌতুকটি !!! বিয়ার চারদিকে! :)
সোরিন

6

নির্দিষ্ট ব্লকটি ক্যাচিং বন্ধ করতে নিম্নলিখিত ফাংশনটি ব্যবহার করুন:

/**
 * Implements hook_preprocess_HOOK() for block.html.twig.
 */
function template-name_preprocess_block(&$vars) {
  if($vars['derivative_plugin_id'] == 'add-block-id-name') {
    //-- This stops the block being cache in drupal 8
    $vars['#cache']['max-age'] = 0;
  }
}

দুর্দান্ত উত্তর।
পুতলি

2

নির্দিষ্ট পৃষ্ঠা / সামগ্রীর ধরণ / নিয়ামকের জন্য ক্যাশে অক্ষম করুন

রুট ঘোষণা থেকে কোনও কাস্টম পৃষ্ঠার জন্য ক্যাশে অক্ষম করুন।

আপনি যদি কাস্টম নিয়ন্ত্রণকারী (কাস্টম মডিউল) এর জন্য ক্যাশে অক্ষম করতে চান তবে আপনার কাছে no_cacheবিকল্প রয়েছে (YOUR_MODULE.routing.yml)। উদাহরণ: ফাইল: mymodule.routing.yml

mymodule.myroute:
  path: '/mymodule/mypage'
  defaults:
    _controller: '\Drupal\mymodule\Controller\Pages::mypage'
    _title: 'No cache page'
  requirements:
    _access: 'TRUE'
  options:
    no_cache: 'TRUE'

রুটের প্রতিক্রিয়াগুলিকে অপ্রয়োজনীয় হিসাবে চিহ্নিত করতে 'no_cache' রুট বিকল্প যুক্ত করা হয়েছে


0

একটি নির্দিষ্ট ব্লকের ক্যাচিং প্রতিরোধ করতে:

থিম_নাম.থমে ফাইলটিতে নীচের কোডটি যুক্ত করুন

function theme_name_preprocess_block(&$variables) {
  if ($variables['plugin_id'] == 'block_id') {
    $variables['#cache']['max-age'] = 0;
  }
}

0

ব্লকের ধরণের জন্য ক্যাশে অক্ষম করতে, এই ধরণের ব্লকটিকে প্রিপ্রসেস করুন এবং ম্যাক্স_এজ 0 তে সেট করুন।

   /**
     * Implements hook_preprocess_HOOK() for Block document templates.
     */
    function THEMENAME_preprocess_block(array &$variables) {

      //disbale cache from spotlight
      $content = $variables['elements']['content'];
      //dump($content); //check the contents
      if (isset($content['#block_content']) && $content['#block_content'] instanceof BlockContentInterface) {

        if ($content['#block_content']->bundle() == 'BLOCK_TYPE') {
          $variables['#cache']['max-age'] = 0;
        }

      }


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