Вывод ресурсов по месяцам, группировка по месяцам

Здравствуйте, начал использовать в своих проектах pdoTools, очень нравится.
Возник вопрос: возможно ли при выводе ресурсов через 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
lexikon
15 апреля 2016, 15:40
modx.pro
1
3 885
0

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

    lexikon
    15 апреля 2016, 23:25
    0
    Спасибо! Помогло! Но на той странице так и не удалось решить совместную работу с пагинацией. Как можно заставить работать с pdoPage?
      lexikon
      15 апреля 2016, 23:52
      0
      Изменил код, добавил $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 ) );
        Димыч
        19 января 2019, 02:58
        0
        Никак пагинацию не получается вывести.
        Вызов стандартный
        [[!pdoPage?
        &element = `...`
        ]]
        [[!+page.nav]]

        pageCount и page.total тоже пусты. Выводится только первая страница.

        lexikon, не подскажешь, где копать?
          Андрей
          19 января 2019, 12:04
          0
          Для вывода по месяцам есть — pdoArchive, пример в документации.
            Димыч
            19 января 2019, 14:21
            0
            Спасибо, дорогой человек!
            То, что нужно.
      lexikon
      18 апреля 2016, 21:35
      0
      Василий, я попробовал использовать код по ссылке. При использовании к примеру с getPage и параметром &element=`snippet` не подхватывает TVшки(
      Ради интереса пробовал скопировать сниппет getResources под другим именем и воспользоваться им в параметре &element — ТВшки также не подгружаются( Как можно решить данную задачу? Заранее благодарен за ответ
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7