Как "наглухо" закешировать результат работы сниппета?

Приветствую

Есть сниппет, хотелось бы закешировать его таким образом, чтобы при сохранении ресурса/шаблона/чанка результат работы (вычислений) сниппета оставался неизменным.
Подскажите пожалуйста, можно ли это как-то реализовать?
Конкретные примеры и ссылки на полезные материалы только приветствуются.
weranda
28 февраля 2018, 08:10
modx.pro
1 430
0

Комментарии: 10

Наумов Алексей
28 февраля 2018, 11:12
+1
Почитайте docs.modx.com/revolution/2.x/developing-in-modx/advanced-development/caching
Раздел Programmatic (Custom) Caching

вам нужно вызвать снипеет некешированным в любом случае, а результат вычислений класть в кеш самостоятельно и все.

Я так делаю на одном из сайтов, получая данные из внешних источников. Кидаю их в кеш на сутки, любое сохранение в админке сайта на мой кеш не влияет.
    weranda
    28 февраля 2018, 13:49
    0
    Илья, я так понял, что ваш сниппет будет кешировать чанк, но не сниппет. Или же все таки сниппет тоже? Или мой сниппет надо поместить в чанк и вызвать чанк через ваш сниппет?
      g0dzilla
      28 февраля 2018, 16:37
      +3
      А Василия не читаем…
      {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
        weranda
        05 марта 2018, 11:04
        0
        Спасибо.
          weranda
          20 марта 2018, 13:07
          0
          Попробовал пример из документации. При сохранении любого ресурса этот кеш очищается. Есть еще варианты?
            Руслан Кундиус
            20 марта 2018, 14:50
            0
            Нужно создать раздел кеша, в первом комментарии об этом речь.

            Пример выше в виде сниппета будет выглядеть так:
            $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;
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      10