আমি একটি ইস্যুতে ছড়িয়েছি যেখানে প্রতি পৃষ্ঠায় অনন্য হওয়া একটি ব্লক লগ-আউট ব্যবহারকারীর জন্য নয়। ইস্যুটি একটি কাস্টম ব্লক প্লাগইন যা আমার কাছে একটি ভিউস অনুসন্ধান পৃষ্ঠায় রয়েছে যাতে কাস্টম ফিল্টার রয়েছে (সাজানো ফিল্টারগুলির জন্য পছন্দসই প্রতিস্থাপনের মতো like
ড্রুপাল 8 সম্পর্কে আমি যা শিখেছি তার উপর ভিত্তি করে আমি আমার বিল্ড অ্যারেতে ক্যাশে প্রসঙ্গগুলি যুক্ত করেছি:
public function build() {
$search_form = \Drupal::formBuilder()->getForm('Drupal\mymodule\Form\SearchForm');
return [
'search_form' => $search_form,
'#cache' => ['contexts' => ['url.path', 'url.query_args']]
];
}
তবে মনে হচ্ছে এটি অবশ্যই ভুল হতে পারে কারণ লগ-আউট করার পরে, ব্লকটি প্রথম দর্শনটিতে ক্যাশ হয়ে যায় এবং যখন ইউআরএল পরিবর্তন হয় তখন এটি ব্লকের নতুন সংস্করণ দেখায় না।
আমি ভেবেছিলাম এটি সম্ভবত ভিউ পৃষ্ঠা হতে পারে যা সমস্যার কারণ হতে পারে তবে আমি যখন ভিউ পৃষ্ঠায় ক্যাশে বন্ধ করে দিয়েছিলাম তখনও সমস্যাটি থেকেই যায়।
আমি বেশ কয়েকটি উপায়ে সমস্যার সমাধান করতে সক্ষম হয়েছি, উদাহরণস্বরূপ, একটি প্রিপ্রসেস_ব্লক হুক ব্যবহার করে:
function mymodule_preprocess_block__mycustomsearchblock(&$variables) {
$variables['#cache']['contexts'][] = 'url.path';
$variables['#cache']['contexts'][] = 'url.query_args';
}
তবে এটি আমাকে বিরক্ত করেছিল আমি কেবল আমার ব্লকের বিল্ড অ্যারেতে ক্যাশে প্রসঙ্গগুলি রাখতে পারি না।
যেহেতু আমার ব্লকটি ব্লকবেস প্রসারিত করেছে, তাই আমি getCacheContexts () পদ্ধতিটি চেষ্টা করার সিদ্ধান্ত নিয়েছি, বিশেষত যেহেতু আমি দেখেছি কোরের মধ্যে কিছু মডিউল এইভাবে এটি করছে।
public function getCacheContexts() {
return Cache::mergeContexts(parent::getCacheContexts(), ['url.path', 'url.query_args']);
}
এটি ইস্যুটিও স্থির করে দিয়েছে, তবে মজার বিষয় হল যখন আমি প্রিপ্রসেস ব্লক ফাংশনে ভেরিয়েবলগুলি আউটপুট করি তখন এগুলি $ ভেরিয়েবল ['# ক্যাশে'] ['প্রসঙ্গ'] তে প্রদর্শিত হয় না, তবে তারা $ ভেরিয়েবল ['উপাদানগুলিতে প্রদর্শন করে) '] [' # ক্যাশে '] [' প্রেক্ষিতে ']
array:5 [▼
0 => "languages:language_interface"
1 => "theme"
2 => "url.path"
3 => "url.query_args"
4 => "user.permissions"
]
আমি কীভাবে এটি কাজ করে, এবং কেন এটি বিল্ড ফাংশন থেকে কাজ করছে না তা জানার চেষ্টা করছি।
ভিউ মাল্টিপল () ফাংশনে / স্কোর / মডুলস / ব্লক / এসআরসি / ব্লকভিউবিল্ডার.এফপি দেখে মনে হচ্ছে এটি সত্তা এবং প্লাগইন থেকে ক্যাশে ট্যাগগুলি টানছে:
'contexts' => Cache::mergeContexts(
$entity->getCacheContexts(),
$plugin->getCacheContexts()
),
সুতরাং এটি ব্যাখ্যা করে কেন আমার ব্লক প্লাগইনে একটি getCacheContexts () পদ্ধতি যুক্ত করা আমার ব্লকের সাথে প্রসঙ্গগুলি যুক্ত করে। এছাড়াও, একই শ্রেণিতে প্রাক-রেন্ডার পদ্ধতিটি দেখে মনে হচ্ছে এটি ব্লক বিল্ড ফাংশনে ক্যাশে অ্যারে ব্যবহার করে না, যা আমাকে বিভ্রান্ত করে, কারণ মনে হয় ড্রুপাল 8-তে ক্যাচিং যুক্ত করার উপায়টি একটি # ক্যাশে যুক্ত করা উপাদান রেন্ডার উপাদান।
আমার প্রশ্নটি হ'ল
1) কোনও ব্লগ প্লাগইনে অ্যারেতে ক্যাশে প্রসঙ্গগুলি সরাসরি যুক্ত করা হয়?
2) যদি তাই হয়, তবে তার চারপাশে কোনও উপায় আছে, আমাদের কি এটি বিল্ড অ্যারের কোনও শিশু উপাদানকে যুক্ত করতে হবে?
3) যদি প্রসঙ্গটি সরাসরি যুক্ত করা হয় তা উপেক্ষা করা হয়, তবে কাস্টম মডিউলগুলিতে ব্লক প্লাগইনগুলিতে যাওয়ার জন্য একটি getCacheContexts () যুক্ত করা হচ্ছে?