สิ่งนี้อาจไม่เหมาะสำหรับทุกคนและอาจจะไม่เร็วพอสำหรับ OP - เนื่องจากมันถูกทริกเกอร์ในการเริ่มต้นหน้าถัดไปเท่านั้น อย่างไรก็ตามมันช่วยฉันในการเรียกรหัสหลังจาก "แคชล้างทั้งหมด" ซึ่งไม่ได้ใช้เวลา
เห็นได้ชัดว่า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
ถูกเรียกใช้สำหรับเพจที่ไม่ได้แคชเท่านั้น แม้ว่าการล้างแคชแบบเต็มควรไม่มีหน้าแคช แต่ก็ไม่ควรทำให้เกิดปัญหา อย่างไรก็ตามระบบแคชภายนอกเช่น Varnish จะเข้าหาจุดวิกฤติและจะหมายความว่ามันจะเกิดขึ้นก็ต่อเมื่อคำขอที่เหมาะสมถัดไปกลับไปที่ Drupal
ควรสังเกตว่าขึ้นอยู่กับระบบแคชของคุณ - เมื่อcache_set
ผู้ใช้พร้อมกันทุกคน - พร้อมที่เบ็ดนี้จะถูกเรียกหลายครั้งพร้อมกันโดยเฉพาะอย่างยิ่งถ้าคุณมีผู้ใช้จำนวนมาก