pdoFetch / Вывод новостей по годам и месяцам
Всем привет. Появилась задача на проекте сделать вывод новостей в стиле c пагинацией:
Наткнулся на решение от Василия modx.pro/help/7072/#comment-49706, сделал по его примеру.
В результате, если я указываю чанк &tpl в вызове сниппета, то все нормально, появляется пагинация и подгружается следующая страница после скролла. Дальше не идет. Если страница загружена из кэша, то загрузится только первая страница, пагинация даже не появится.
PS когда не указываешь чанк, то отрабатывает все как надо.
Ниже, весь код, который я использую.
Спасибо за помощь! :)
Вызов сниппета:
Year
Months
News
News
Наткнулся на решение от Василия modx.pro/help/7072/#comment-49706, сделал по его примеру.
В результате, если я указываю чанк &tpl в вызове сниппета, то все нормально, появляется пагинация и подгружается следующая страница после скролла. Дальше не идет. Если страница загружена из кэша, то загрузится только первая страница, пагинация даже не появится.
PS когда не указываешь чанк, то отрабатывает все как надо.
Ниже, весь код, который я использую.
Спасибо за помощь! :)
Вызов сниппета:
<div id="pdopage">
[[!+page.nav]]
<div class="rows">
[[!pdoPage?
&parents=`[[*id]]`
&depth=`3`
&limit=`12`
&element=`pdoNews`
&showLog=`1`
&tpl=`mainNewsRow`
&tvPrefix=``
&includeTVs=`mainNewsId`
&hideContainers=`1`
&ajaxMode=`scroll`
]]
</div>
</div>
Сниппет: ?php
$tplWrapper = '@INLINE <div>{{+output}}</div>';
$tplYear = '@INLINE <div>{{+year}}<div>{{+resources}}</div></div>';
$tplMonth = '@INLINE <div>{{+month}}<div>{{+resources}}</div></div>';
$tplDay = '@INLINE <div>{{+day}}<div>{{+resources}}</div></div>';
$tpl = $modx->getOption( 'tpl', $scriptProperties, '@INLINE <div><a href="{{+uri}}">{{+pagetitle}}</a></div>' );
$limit = $modx->getOption( 'limit', $scriptProperties, 10 );
$offset = $modx->getOption( 'offset', $scriptProperties, 0 );
$fqn = $modx->getOption( 'pdoFetch.class', null, 'pdotools.pdofetch', true );
if ( $pdoClass = $modx->loadClass( $fqn, '', false, true ) ) {
$pdoFetch = new $pdoClass( $modx, $scriptProperties );
} elseif ( $pdoClass = $modx->loadClass( $fqn, MODX_CORE_PATH . 'components/pdotools/model/', false, true ) ) {
$pdoFetch = new $pdoClass( $modx, $scriptProperties );
} else {
$modx->log( modX::LOG_LEVEL_ERROR, 'Could not load pdoFetch from "MODX_CORE_PATH/components/pdotools/model/".' );
return false;
}
$parents = $modx->getOption( 'parents', $scriptProperties, $modx->resource->get( 'id' ) );
$options = array(
'parents' => $parents,
'sortby' => 'createdon',
'sortdir' => 'DESC',
'limit' => $limit,
'offset' => $offset
);
$resources = $pdoFetch->getCollection( 'modResource', array( 'published' => true, 'deleted' => false ), $options );
$pdoFetch->addTime( 'pdoTools загружен' );
$tree = array();
foreach ( $resources as $resource ) {
$year = date( 'Y', $resource['createdon'] );
$month = date( 'm', $resource['createdon'] );
$tree[ $year ][ $month ][] = $resource;
}
$output = '';
foreach ( $tree as $year => $months ) {
$tmp1 = '';
$count = 0;
foreach ( $months as $month => $resources ) {
$tmp2 = '';
foreach ( $resources as $resource ) {
$tmp2 .= $pdoFetch->getChunk( $tpl, $resource );
$count ++;
}
$tmp1 .= $pdoFetch->getChunk( $tplMonth, array(
'month' => $month,
'count' => count( $resources ),
'resources' => $tmp2,
) );
}
$output .= $pdoFetch->getChunk( $tplYear, array(
'year' => $year,
'count' => $count,
'resources' => $tmp1,
) );
}
$pdoFetch->setTotal();
return $pdoFetch->getChunk( $tplWrapper, array( 'output' => $output ) );