Как "наглухо" закешировать результат работы сниппета?
Приветствую
Есть сниппет, хотелось бы закешировать его таким образом, чтобы при сохранении ресурса/шаблона/чанка результат работы (вычислений) сниппета оставался неизменным.
Подскажите пожалуйста, можно ли это как-то реализовать?
Конкретные примеры и ссылки на полезные материалы только приветствуются.
Есть сниппет, хотелось бы закешировать его таким образом, чтобы при сохранении ресурса/шаблона/чанка результат работы (вычислений) сниппета оставался неизменным.
Подскажите пожалуйста, можно ли это как-то реализовать?
Конкретные примеры и ссылки на полезные материалы только приветствуются.
Комментарии: 10
Почитайте docs.modx.com/revolution/2.x/developing-in-modx/advanced-development/caching
Раздел Programmatic (Custom) Caching
вам нужно вызвать снипеет некешированным в любом случае, а результат вычислений класть в кеш самостоятельно и все.
Я так делаю на одном из сайтов, получая данные из внешних источников. Кидаю их в кеш на сутки, любое сохранение в админке сайта на мой кеш не влияет.
Раздел Programmatic (Custom) Caching
вам нужно вызвать снипеет некешированным в любом случае, а результат вычислений класть в кеш самостоятельно и все.
Я так делаю на одном из сайтов, получая данные из внешних источников. Кидаю их в кеш на сутки, любое сохранение в админке сайта на мой кеш не влияет.
А могли бы пример привести?
Вот пример.
Спасибо.
Илья, я так понял, что ваш сниппет будет кешировать чанк, но не сниппет. Или же все таки сниппет тоже? Или мой сниппет надо поместить в чанк и вызвать чанк через ваш сниппет?
А Василия не читаем…
{if !$snippet = $_modx->cacheManager->get('cache_key')}
{set $snippet = $_modx->runSnippet('!pdoResources', [
'parents' => 0,
'tpl' => '@INLINE {$id} - {$pagetitle}',
'showLog' => 1,
])}
{set $null = $_modx->cacheManager->set('cache_key', $snippet, 1800)}
{/if}
{$snippet}
Источник примера: https://docs.modx.pro/components/pdotools/parser
Спасибо.
Попробовал пример из документации. При сохранении любого ресурса этот кеш очищается. Есть еще варианты?
Нужно создать раздел кеша, в первом комментарии об этом речь.
Пример выше в виде сниппета будет выглядеть так:
Пример выше в виде сниппета будет выглядеть так:
$options = array(
xPDO::OPT_CACHE_KEY => 'mypartition'
);
if (!$snippet = $modx->cacheManager->get('cache_key', $options)) {
$snippet = $modx->runSnippet('pdoResources', array(
'parents' => 0,
'tpl' => '@INLINE {$id} - {$pagetitle}',
'showLog' => 1
));
$modx->cacheManager->set('cache_key', $snippet, 1800, $options);
}
return $snippet;
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.