Jump to main content Jump to doc navigation

Создадим сниппеты

Сниппет 1: запись в кэш

Создайте сниппет с названием writeCache:

$cacheManager = $modx->getCacheManager();
$x = date('H:i:s');
$cacheManager->set('my_cache_key',$x);
return $x;

set() принимает второй аргумент по ссылке. Литерал — $cacheManager->set('my_cache_key', date('H:i:s')) — приведёт к фатальной ошибке PHP, поэтому метка времени сначала попадает в $x.

Поместите сниппет на кэшируемый ресурс, например «Страница 1»:

[[writeCache]]

Сниппет 2: чтение из кэша

Создайте сниппет с названием readCache:

$cacheManager = $modx->getCacheManager();
return $cacheManager->get('my_cache_key');

Поместите этот сниппет на другой ресурс, не кэшируемый, например «Страница 2»:

[[!readCache]]

Посмотрим на результат

  1. Откройте «Страницу 1». Вы увидите метку времени, например «11:44:55».
  2. Откройте «Страницу 2» в другой вкладке браузера. Показывается та же метка, и она не меняется — ожидание её не изменит.

Теперь очистите кэш сайта (Содержимое → Очистить кэш) и снова откройте оба ресурса.

Метка времени записывается только при первом заходе на «Страницу 1» после очистки; второй заход отдаётся из кэша ресурса.

Снова очистите кэш сайта, затем откройте «Страницу 2», не заходя на «Страницу 1».

readCache не возвращает ничего: кэш пуст, а writeCache не запускался после очистки.

Теперь вызовите writeCache без кэширования:

[[!writeCache]]
  1. Откройте «Страницу 1». Метка времени меняется при каждом запросе.
  2. Откройте «Страницу 2». Показывается метка из последнего запроса к «Странице 1» — кэшированное значение, которое вызов без кэширования не меняет.

Резюме

Оба сниппета пишут в раздел default и читают из него, поэтому их данные очищаются вместе с кэшем сайта (Содержимое → Очистить кэш). Сниппету, который так владеет своим выводом, не нужен собственный раздел для кэширования.

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

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • JT Skaggs
  • deJaya
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$194 per month—let's make that $500!

Learn more