यह हर किसी के लिए उपयुक्त नहीं हो सकता है, और ओपी के लिए जल्दी नहीं हो सकता है - क्योंकि यह केवल अगले पृष्ठ के आरंभ पर शुरू होता है। हालाँकि, इससे मुझे "कैश क्लियर ऑल" के बाद ट्रिगर कोड के साथ मदद मिली, जो समय के प्रति संवेदनशील नहीं था।
जाहिर है HOOK
अपने खुद के मॉड्यूल नाम के साथ की जरूरत है।
/**
* Implements hook_init().
*/
function HOOK_init(){
// if there is no cache_not_empty defined, define it
// and then trigger our cache cleared code
if ( !cache_get('HOOK_cache_not_empty') ) {
cache_set('HOOK_cache_not_empty', TRUE);
foreach (module_implements('cache_cleared') as $module) {
module_invoke($module, 'cache_cleared');
}
}
}
/**
* Implements hook_cache_cleared().
*/
function HOOK_cache_cleared(){
// do what you need here, in which ever module.
}
यदि आपके पास एक विशिष्ट बिन है जिसे आपको लक्षित करने की आवश्यकता है, तो उपरोक्त का समर्थन करने के लिए संशोधित किया जा सकता है, जब तक कि पूरे बिन आपके कैश के बिंदु पर खाली हो जाता है।
hook_init
केवल गैर-कैश्ड पृष्ठों के लिए निष्पादित किया जाता है। हालाँकि पूर्ण कैश के स्पष्ट होने का मतलब कोई कैश किए गए पृष्ठ नहीं होने चाहिए, लेकिन इससे कोई समस्या नहीं होनी चाहिए। हालांकि, वार्निश जैसे बाहरी कैशिंग सिस्टम इस ट्रिगर के रास्ते में मिलेंगे, और इसका मतलब यह होगा कि यह केवल तब होगा जब अगला उचित अनुरोध ड्रुपल तक वापस पहुंच जाएगा।
यह भी ध्यान दिया जाना चाहिए कि आपके कैशिंग सिस्टम के आधार पर - बिल्कुल जब cache_set
सभी समवर्ती उपयोगकर्ताओं के लिए उपलब्ध हो जाता है - कि यह हुक कई बार समवर्ती रूप से ट्रिगर किया जा सकता है, खासकर यदि आपके पास बड़ी संख्या में उपयोगकर्ता हैं।