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

Дополнение: pdoTools

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

Вызов:
[[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, 19:25    Игорь Терентьев   
0    143 0

Комментарии (1)

  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}
    
    Вы должны авторизоваться, чтобы оставлять комментарии.