KlenOfSky WEB Agency - создание и тех. поддержка сайтов. Продвижение в Яндекс и Google

Создание сайтов, поисковое продвижение в Google. Сопровождение, тех.поддержка


Звонить: +7 (999)96-88-777
Писать: web@klenovsky.ru


Кеширование блоков в MODx Revo

Кеширование блоков в MODx Revo

При создании сайтов часто сталкиваюсь с ситуацией, когда страницы сайта отличаются только содержанием, а все остальные блоки, такие как сайдбар, шапка, футер и прочие — содержат информацию, которая идентична для всех страниц сайта.

Возникает вопрос: для чего эти блоки повторно генерировать каждый раз при серфинге по страницам сайта? Логичнее было бы сгенерировать их раз, закешировать вывод и после этого просто выводить из кеша при запросе.

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

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

<?php
$cache_key = "chunk_".$name;

$output = $modx->cacheManager->get($cache_key);

if (empty($output)) {
  $output = $modx->getChunk($name, $scriptProperties);
  $modx->cacheManager->set($cache_key,$output);
}

return $output;

После чего вызовы чанков, которые хотим закешировать, заменим вызовом нашего сниппета. Например:

[[$header]] 	<!--    --> 	[[chunk? &name=`header`]]
[[$footer]] 	<!--    --> 	[[chunk? &name=`footer`]]

Единственное замечание к такому решению вопроса, то что он не является универсальным - то есть, если у вас присутствует в блоках какая-либо логика она работать перестанет.

Поэтому, используйте аккуратно и обязательно проверяйте результат на корректность работы.

Найти сгенерированный сниппетом кеш можно в папке /core/cache/default/ — по одному файлу для каждого чанка.

На этом все.

Большая Семеновская, 42 10509 Россия, город Москва, +7 (999)96-88-777
Рассказать друзьям:

comments powered by Disqus