Вывод ресурсов по месяцам, группировка по месяцам
Здравствуйте, начал использовать в своих проектах pdoTools, очень нравится.
Возник вопрос: возможно ли при выводе ресурсов через pdoResources или pdoPage группировать их по месяцам? Т.е. если начались новости за другой месяц, то делим вывод ресурсов и вставляем свой html код
Я нашел в доках вот такую штуку.
И теоретически я бы мог решить свою задачу следующим образом:
Возник вопрос: возможно ли при выводе ресурсов через pdoResources или pdoPage группировать их по месяцам? Т.е. если начались новости за другой месяц, то делим вывод ресурсов и вставляем свой html код
Апрель 2016(html)
-- Новость
-- Новость
Март 2016(html)
--Новость
--Новость
Ресурсы ест-но сортированы по дате публикации.Я нашел в доках вот такую штуку.
&tplCondition Поле ресурса, из которого будет получено значение для выбора чанка по условию в &conditionalTpls.
&tplOperator Необязательный оператор для проведения сравнения поля ресурса в &tplCondition с массивом значений и чанков в &conditionalTpls.
&conditionalTpls JSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться &tplCondition, а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешно. Оператор сравнения указывается в &tplOperator. Для операторов типа isempty можно использовать массив без ключей.
И теоретически я бы мог решить свою задачу следующим образом:
&tplCondition=`publishdon:date('%m')`
&tplOperator=`==`
&conditionalTpls=`{"01":"chunkJan", "02":"chunkFeb"}`
Может кто подскажет иное решение? хотелось бы за один проход(запрос) построить html Комментарии: 7
Спасибо! Помогло! Но на той странице так и не удалось решить совместную работу с пагинацией. Как можно заставить работать с pdoPage?
Изменил код, добавил $pdoFetch->run() и заработало с pdoPage. возможно ли как то добавить еще функционал includeTVs, хотелось бы отображать дополнительную информацию!? не могу найти в сниппетах pdoResources, как это работает(
<?php
$tplWrapper = '@INLINE {{+output}}';
$tplMonthYear = '@INLINE <div class="title date">{{+date}}</div><ul class="section-blog__list">{{+resources}}</ul><div class="clearfix clearfix--t70"></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 );
$sortby = $modx->getOption( 'sortby', $scriptProperties, '{"publishedon":"DESC"}' );
/** @var pdoFetch $pdoFetch */
$fqn = $modx->getOption('pdoFetch.class', null, 'pdotools.pdofetch', true);
$path = $modx->getOption('pdofetch_class_path', null, MODX_CORE_PATH . 'components/pdotools/model/', true);
if ($pdoClass = $modx->loadClass($fqn, $path, 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;
}
$pdoFetch->addTime('pdoTools loaded');
$output = $pdoFetch->run();
$parents = $modx->getOption( 'parents', $scriptProperties, $modx->resource->get( 'id' ) );
$options = array(
'parents' => $parents,
'sortby' => $sortby,
'limit' => $limit,
'offset' => $offset,
);
$resources = $pdoFetch->getCollection( 'modResource', array( 'published' => true, 'deleted' => false, 'template' => 9 ), $options );
$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( $tplMonthYear, array(
'date' => $month.', '.$year,
'count' => count( $resources ),
'resources' => $tmp2,
) );
}
$output .= $tmp1;
}
$pdoFetch->setTotal();
return $pdoFetch->getChunk( $tplWrapper, array( 'output' => $output ) );
Никак пагинацию не получается вывести.
Вызов стандартный
[[!pdoPage?
&element = `...`
]]
[[!+page.nav]]
pageCount и page.total тоже пусты. Выводится только первая страница.
lexikon, не подскажешь, где копать?
Вызов стандартный
[[!pdoPage?
&element = `...`
]]
[[!+page.nav]]
pageCount и page.total тоже пусты. Выводится только первая страница.
lexikon, не подскажешь, где копать?
Для вывода по месяцам есть — pdoArchive, пример в документации.
Спасибо, дорогой человек!
То, что нужно.
То, что нужно.
Василий, я попробовал использовать код по ссылке. При использовании к примеру с getPage и параметром &element=`snippet` не подхватывает TVшки(
Ради интереса пробовал скопировать сниппет getResources под другим именем и воспользоваться им в параметре &element — ТВшки также не подгружаются( Как можно решить данную задачу? Заранее благодарен за ответ
Ради интереса пробовал скопировать сниппет getResources под другим именем и воспользоваться им в параметре &element — ТВшки также не подгружаются( Как можно решить данную задачу? Заранее благодарен за ответ
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.