Кэширование pdoMenu
Как можно закэшировать уже обработанный результат работы сниппета, чтобы при открытии еще не закэшированной страницы данные не обрабатывались заново? Меню очень уж большое…
Вызов:
В файле (core/cache/default/pdomenu/products.cache.php) кэшируется массив данных, а не готовый результат:
Вызов:
[[pdoMenu?
&parents=`2`
&cache=`1`
&cacheTime=`86400`
&cache_key=`pdomenu/products`
&fastMode=`1`
&select=`id,pagetitle,menutitle,uri,parent`
]]
В файле (core/cache/default/pdomenu/products.cache.php) кэшируется массив данных, а не готовый результат:
<?php if(time() > 1493309306){return null;} return array (
0 =>
array (
'id' => '13',
'pagetitle' => 'Котельное оборудование',
'menutitle' => '',
'uri' => 'catalog/kotelnoe-oborudovanie/',
'parent' => '2',
'children' =>
array (
24 =>
array (
'id' => '24',
'pagetitle' => 'Дымоходы',
'menutitle' => '',
'uri' => 'catalog/kotelnoe-oborudovanie/dymohody-kotly/',
'parent' => '13',
),
...
Заранее спасибо. Комментарии: 1
Нашел. Примерный результат: 0.27s против 0.35s на обработку всей страницы.
{if !$snippet = $_modx->cacheManager->get('pdomenu_products')}
{set $snippet = $_modx->runSnippet('pdoMenu', [
'parents' => 2,
'templates' => '3,13,19',
'fastMode' => 1,
'select' => 'id,pagetitle,menutitle,uri,parent',
'hereClass' => '',
'tplParentRow' => '@INLINE
<li class="{$classnames} dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" {$attributes}>{$menutitle}<b class="caret"></b></a>
<ul class="dropdown-menu">{$wrapper}</ul>
</li>',
'tplOuter' => '@INLINE {$wrapper}',
])}
{set $null = $_modx->cacheManager->set('pdomenu_products', $snippet, 1800)}
{/if}
{$snippet}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.