MIGO Web-Development - разработка и cоздание сайтов в Киеве, Украине

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


звонить: +38 (093) 636 78 08
писать: web@migo.com.ua


Кеширование блоков в 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/ — по одному файлу для каждого чанка.

На этом все.

проспект И.Мазепы 5 07300 Украина, Киевская обл., г. Вышгород, +38 (093) 636 78 08
Рассказать друзьям:

comments powered by Disqus