Как не чистить кэш всего сайта?
Постоянно задают вопросы "а как при сохранении чистить кэш не всего сайта, а только обновляемого ресурса?".
А вот так:
<?php
switch($modx->event->name) {
case 'OnDocFormRender':
$resource->set('syncsite', 0);
break;
case 'OnDocFormSave':
if ($modx->event->params['mode'] != 'upd') {return;}
$resource->_contextKey = $resource->context_key;
$cache = $modx->cacheManager->getCacheProvider($modx->getOption('cache_resource_key', null, 'resource'));
$key = $resource->getCacheKey();
$cache->delete($key, array('deleteTop' => true));
$cache->delete($key);
break;
}Создать плагин с любым именем, назначить ему события OnDocFormRender и OnDocFormSave, скопипастить.
Первое событие плагина убирает галочку "Очистить кэш" у формы редактирования ресурса. Если включить ее вручную - кэш будет очищен, как обычно.
Второе - получает обработчика кэша ресурсов и говорит ему удалить запись нужного документа. Все остальные не трогаются.
У простых ресурсов кэш хранится в одном файле, у сложных (где вызываются кэшируемые сниппеты) - в директории. Поэтому, мы чистим сначала директорию, а потом и файл, чтобы наверняка.
С компонентом Articles этот фокус не работает - там нет syncsite в админке.
0
👍
👎
❤️
🔥
😮
😢
😀
😡
4 744
09.11.2012 10:41:50