{var $get = ($.get | toJSON) | md5}
{* Проверяем, есть ли фильтр уже в кеше *}
{if !$filter = $_modx->cacheManager->get('msearch2/settings/' ~ $get ~ '/filters')}
{set $filter = $_modx->runSnippet('!mFilter2', [
'class' => 'msProduct',
'parents' => $_modx->resource.id,
'element' => 'msProducts',
])}
{* Сохраняем фильтр в кеш *}
{set $null = $_modx->cacheManager->set('msearch2/settings/' ~ $get ~ '/filters', $filter)}
{/if}
{* Подключаем JS-скрипты и прописываем config на странице *}
{'!mFilterJS' | snippet}
{* Показываем фильтр из кеша *}
{$filter}Сниппет mFilterJS:
<?php
$uri = $_SERVER['REQUEST_URI'];
/* Раскомментировать, если установлен customExtra
$modx->addPackage('customextra', $modx->getOption('core_path').'components/customextra/model/');
if ($item = $modx->getObject('customExtraItem', ['name' => $uri])) {
$item->set('id1', ($item->id1 + 1));
$item->save();
} else {
$item = $modx->newObject('customExtraItem', ['name' => $uri, 'id1' => 1]);
$item->save();
}
*/
$cache_prefix = 'msearch2/settings/' . md5(json_encode($_GET));
if ($config = $modx->cacheManager->get($cache_prefix . '/config')) {
$modx->regClientStartupScript('<script type="text/javascript">mse2Config = ' . json_encode($config) . ';</script>', true);
$modx->regClientCSS('/assets/components/msearch2/css/web/default.css');
$modx->regClientScript('
<script type="text/javascript" src="/assets/components/msearch2/js/web/default.js"></script>
<script type="text/javascript">
if ($("#mse2_mfilter").length) {
if (window.location.hash != "" && mSearch2.Hash.oldbrowser()) {
var uri = window.location.hash.replace("#", "?");
window.location.href = document.location.pathname + uri;
}
else {
mSearch2.initialize("body");
}
}
</script>', true);
$cached = true;
$key = 'msearch2/cached/' . md5($uri);
$modx->cacheManager->set($key, $cached);
$_SESSION['mSearch2'][$config['key']] = $modx->cacheManager->get($cache_prefix . '/properties');
}
return;Чтобы автоматически создать кеш для популярных страниц, добавить в CRON
* * * * * php ~/www/core/components/customextra/cron/filters_cache.php
<?php
// Подключаем
define('MODX_API_MODE', true);
require dirname(dirname(dirname(dirname(__DIR__)))) . '/index.php';
$modx->addPackage('customextra', $modx->getOption('core_path').'components/customextra/model/');
$q = $modx->newQuery('customExtraItem', ['id1:>' => 0]);
$q->sortby('id1', 'DESC');
$q->limit(100);
$items = $modx->getCollection('customExtraItem', $q);
$i = 0;
foreach ($items as $item) {
$key = 'msearch2/cached/' . md5($item->name);
if (!$cached = $modx->cacheManager->get($key)) {
$cached = true;
$modx->cacheManager->set($key, $cached);
$id1 = $item->get('id1') - 1;
$item->set('id1', $id1);
$item->save();
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL, 'https://site.ru' . $item->name);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'site.ru');
$query = curl_exec($curl_handle);
curl_close($curl_handle);
$i++;
if ($i < 10) {
continue;
} else {
break;
}
}
}
Объектная
А как сделать так, чтобы в кэш попадали все страницы поиска, если используется настройка 'ajaxMode' => 'scroll'?
А почему может не создавать файл config и properties?