कस्टम कैश टैग लागू करना


14

मैं सिंक में विभिन्न प्रकारों (संस्थाओं, नोड्स, ब्लॉक आदि) से संबंधित सामग्री रखने में मदद करने के लिए डी 8 में नए कैश टैगिंग का उपयोग करना चाहूंगा। लेकिन इस सुविधा के वर्तमान में उपलब्ध प्रलेखन को पढ़ने से मुझे यह समझ में नहीं आता है कि उक्त वस्तुओं को बनाते / अद्यतन करते समय सामग्री के आइटम में अपना कैश टैग कैसे जोड़ा जाए।

उदाहरण के लिए एक प्रकार के स्टोर का नया नोड बनाते समय मैं कैश टैग स्थान जोड़ना चाहूंगा: new_york_123 और आ ब्लॉक के समान। फिर अगर मैंने न्यूयॉर्क के प्रदर्शन का नाम 123 स्थान को SoHo में बदल दिया, तो मैं कैश टैग को अमान्य कर सकता हूं और सभी संबंधित सामग्री अपडेट कर सकता हूं।


1
सभी संस्थाओं के पास पहले से ही कैश टैग है (उदाहरण के लिए नोड: 123) जो स्वचालित रूप से अमान्य है। इसलिए यदि आप केवल नोड बना रहे हैं / अपडेट कर रहे हैं और प्रदर्शित कर रहे हैं, तो आपको कुछ भी नहीं करना चाहिए, बस काम करना चाहिए।
बेरदीर जूल

बनाने / अपडेट करने पर सभी संबंधित प्रकार की सामग्री (नोड्स, ब्लॉक, एंटिटीज़) को खोजने के लिए एक क्वेरी की आवश्यकता होगी और फिर उन्हें प्रत्येक कैश टेबल से साफ़ करना होगा। यदि किसी एकल कस्टम कैश टैग का उपयोग केवल उन वस्तुओं के कैश को साफ़ करने के लिए अमान्य करने के लिए किया जाना चाहिए, जो सामग्री आइटम के संबंध की पहचान करने के लिए उपयोग की जाती हैं।
लिटिल कोडिंग

मुझे समझ नहीं आ रहा है कि आपका क्या मतलब है और आपकी संरचना क्या है। जब उनका उपयोग किया जाता है तो टैग जोड़े जाते हैं। कैश टैग्स को ब्लॉक की तरह किसी भी रेंडर तत्व में जोड़ा जाना चाहिए अगर उस नोड / चीज़ को बदला जाए तो उसे बदलना होगा। यदि आप संस्थाओं को प्रदर्शित करने के लिए मानक तंत्र का उपयोग करते हैं, तो संभवतः ऐसा ही है। यदि यह काम नहीं करता है, तो आपको कोड के साथ और अधिक विस्तार से साझा करने की आवश्यकता है, जो आप कर रहे हैं।
बर्दिर

कैश टैग उपयोगकर्ता: {आईडी} को उस उपयोगकर्ता से संबंधित सभी सामग्री के लिए कैश को स्पष्ट करने के लिए अमान्य किया जा सकता है। एक ही विचार है, लेकिन कस्टम कैश टैग के साथ।
लिटिलकोडिंग

जवाबों:


13

यहां कस्टम ब्लॉक के संदर्भ में कैश टैग का उपयोग करने का तरीका बताया गया है जिसे मैंने कोशिश की है और काम करता है लेकिन मुझे लगता है कि यह अन्य संदर्भों पर लागू होता है

डिफ़ॉल्ट ड्रुपल टैग का उपयोग करें

बिल्ड एरे में आप निर्दिष्ट कर सकते हैं cache > tags > node_listऔर यह ब्लॉक कंटेंट अमान्य हो जाएगा (ताज़ा) जब कोई भी NODE आपकी ओर से करने के लिए और कुछ नहीं के साथ बदला जाता है

public function build() {
    return array(
        '#markup' => MY_MODULE_awesome_dynamic_node_content(),
        '#cache' => [
            'tags' => ['node_list'], //invalidate when any node updates
            //'tags' => ['node:1','term:2'], //invalidate when node 1 or term 2 updates
        ],
    );
}

वैकल्पिक रूप से आप एक या एक से अधिक नोड / टर्म / यूजर आईडी डाल सकते हैं ताकि ऊपर दिए गए कोड टिप्पणी में दिखाए गए अनुसार विशिष्ट नोड्स या शर्तों पर सरणी को अमान्य कर सकें। नोट: आप नोड्स, शब्द, उपयोगकर्ता और कस्टम टैग को मिक्स और मैच कर सकते हैं जैसा कि आप फिट देखते हैं।

अपने खुद के टैग का उपयोग करें

यदि आप अपने बिल्ड ऐरे को साफ़ करने का अपना तरीका चाहते हैं, तो बिल्ड ऐरे में अपना कस्टम यूनिक टैग जोड़ें (कोई भी यूनिक स्ट्रिंग करेंगे)

public function build() {
    return array(
        '#markup' => MY_MODULE_awesome_dynamic_node_content(),
        '#cache' => [
            'tags' => ['MY_CUSTOM_UNIQUE_TAG'],
        ],
    );
}

और invalidateTagsअपने स्वयं के टैग के साथ अपने कस्टम कोड लॉजिक कॉल में

function MY_MODULE_custom_clear_cache_logic(){ 
    ...
    \Drupal\Core\Cache\Cache::invalidateTags(array('MY_CUSTOM_UNIQUE_TAG'));        

यदि आप ड्रुपल 8 कैश इंटर्नल के बारे में अधिक पढ़ना चाहते हैं


2
मुझे लगता है कि आप cache_tags.invalidatorएक वर्ग को सीधे संदर्भित करने के बजाय आदर्श रूप से सेवा का उपयोग करेंगे ।
एंडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.