Кэширование pdoMenu

Как можно закэшировать уже обработанный результат работы сниппета, чтобы при открытии еще не закэшированной страницы данные не обрабатывались заново? Меню очень уж большое…

Вызов:
[[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',
      ),
...
Заранее спасибо.
Игорь Терентьев
26 апреля 2017, 16:25
347
0

Комментарии: 1

Игорь Терентьев
25 мая 2017, 20:27
0
Нашел. Примерный результат: 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}