Это может не подходить для всех, и может не быть достаточно быстрым для 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.
Следует также отметить, что в зависимости от вашей системы кэширования - от того, когда именно a cache_set
становится доступным для всех одновременно работающих пользователей - этот хук может запускаться несколько раз одновременно, особенно если у вас большое количество пользователей.