Нужен способ через API чистить кэш одного ресурса
Помогите кто знает
Нужен способ через API чистить кэш одного ресурса — товара в miniShop2
Что мне удалось нарыть самостоятельно:
forums.modx.com/index.php?topic=59814.0
Reply #6 — не работает
Reply #7 от Боба Рея — процессор не чистит кэш ресурса. Стопудово. Нужно чистить после внесения изменений. А я изменения вношу напрямую через MySQL (импортирую файл большого объёма) по расписанию каждый час.
Чистить кэш всего сайта каждый час — вообще не вариант, учитывая определённые уязвимости.
Последнее, что я пробовал, что в моём понимании должно было работать, но по факту не работает:
Нужен способ через API чистить кэш одного ресурса — товара в miniShop2
Что мне удалось нарыть самостоятельно:
forums.modx.com/index.php?topic=59814.0
Reply #6 — не работает
Reply #7 от Боба Рея — процессор не чистит кэш ресурса. Стопудово. Нужно чистить после внесения изменений. А я изменения вношу напрямую через MySQL (импортирую файл большого объёма) по расписанию каждый час.
Чистить кэш всего сайта каждый час — вообще не вариант, учитывая определённые уязвимости.
Последнее, что я пробовал, что в моём понимании должно было работать, но по факту не работает:
<?php
$id=27;
$resource=$modx->getObject('modResource',$id);
$alias=$resource->get('alias');
$params=array(
'id' => $id
, 'alias' => $alias
, 'alias' => $alias
,'context_key' => 'web'
);
$options=array();
$res=$modx->runProcessor('resource/update', $params,$options);
return $res;
Комментарии: 8
Я же те в твиттере ответил — не видел?
$cache = $modx->getCacheManager()->getCacheProvider($modx->getOption('cache_resource_key', null, 'resource'));
$key = $modx->resource->getCacheKey();
$cache->delete($key, array('deleteTop' => true));
$cache->delete($key);
Видел :) По какой-то причине решил, что код не подходит… Сейчас ещё раз попробую.
Он уже
а) принят в 2.3
б) давно работает в Tickets и MS2
в) я все равно его проверил перед тем, как тебе ответить. А ты… ай-ай-ай!
а) принят в 2.3
б) давно работает в Tickets и MS2
в) я все равно его проверил перед тем, как тебе ответить. А ты… ай-ай-ай!
))))))) Ну прости, каюсь ))))
Коммент Боба Рея задурил мне голову )))
Коммент Боба Рея задурил мне голову )))
Для потомков:
Предложенный вариант
А вот такой вариант чистит сразу:
Но в обоих вариантах используется объект cacheManager
Предложенный вариант
$cache = $modx->getCacheManager()->getCacheProvider($modx->getOption('cache_resource_key', null, 'resource'));
$key = $modx->resource->getCacheKey();
$cache->delete($key, array('deleteTop' => true));
$cache->delete($key);
работает, но как-то странно… я наблюдал, что при первом обновлении страницы после выполнения этого кода — страница всё равно загружается из Кэша, очень похоже, что это был кэш браузера.А вот такой вариант чистит сразу:
$id=79;
$resource=$modx->getObject('modResource',$id);
$cacheKey = $resource->getCacheKey();
$modx->cacheManager->refresh(array(
'resource' => array('key' => $cacheKey),
));
Изменения видны при первом же обновлении страницы.Но в обоих вариантах используется объект cacheManager
А вот такой вариант чистит сразу:да чистит, но только не конкретный id=79, а полностью все id обновляет, потому как проверил этот код сам и он подчищает все id что не есть гуд, так как если задача стоит обновить конкретный товар или каталог
С версии MODX 2.3 у ресурса есть свой метод clearCache.
if ($resource = $modx->getObject('modResource', 15)) {
$resource->clearCache();
}
Спасибо это я возьму на вооружение себе, ну а по поводу чистки конкретного документа можно использовать твой код, я лишь добавил одну строчку, главное работает теперь можно чистить по id документа
сам код:
сам код:
$id=9;
$resource=$modx->getObject('modResource',$id);
$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);
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.