pdoResources разбивка ресурсов по дням

Привет. Подскажи пожалуйста, может кто знает, как сделать следующий вывод материалов через pdoResources

По формату
Выводится сначала последний день (02.10.2015)
Затем список всех новостей этого дня
Затем предыдущий день (01.10.2015)
И все материалы этого дня

и так далее

Вот для наглядности картинка:
Павел
02 октября 2015, 10:35
modx.pro
4
2 207
+1

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

Владимир
02 октября 2015, 19:02
1
+2
Можно попробовать сделать следующим образом. Сначала выбираем все даты публикаций (дополнительные параметры, вроде родителей и лимита настраивайте под себя):
[[!pdoResources?
  &parents=`0`
  &sortby=`publishedon`
  &sortdir=`DESC`
  &limit=`0`
  &select=`publishedon as period`
  &groupby=`DATE(FROM_UNIXTIME(publishedon))`
  &tpl=`tmp.NewsFeed`
]]

В шаблоне tpl.NewsFeed снова вызываем pdoResources и выбираем все ресурсы, опубликованные в определенный день:
<h2>[[+period:date=`%d-%m-%Y`]]</h2>
[[!timePeriod? &period=`[[+period]]`]]
[[pdoResources?
  &parents=`0`
  &sortby=`publishedon`
  &sortdir=`DESC`
  &limit=`0`
  &where=`["publishedon BETWEEN [[+tp.start]] AND [[+tp.end]]"]`
  &tpl=`@INLINE <h3>[[+pagetitle]]</h3><p>[[+introtext]]</p>`
]]

Т.к. дата публикации хранится вместе со временем в формате UNIXTIME, то нужен сниппет (у меня — timePeriod), который возвращает время начала суток и конца суток для заданного дня в UNIXTIME (и в этом промежутке мы потом и выбираем ресурсы):
<?php
$start = strftime("%d.%m.%Y",$period) . " 00:00:00";
$end = strftime("%d.%m.%Y",$period) . " 23:59:59";

$modx->toPlaceholders(array(
  'start' => strtotime($start),
  'end' => strtotime($end),
),'tp');
Возможно, фильтр по дате можно встроить в where без дополнительных сниппетов, но у меня не получилось.
    Павел
    23 марта 2016, 09:57
    0
    Спасибо! А подскажи пожалуйста, как это сделать не по дням, а по месяцам
    Павел
    23 марта 2016, 11:48
    1
    +1
    Вообщем по разбивка ресурсов по месяцам:
    [[!pdoResources?
      &parents=`26`
      &sortby=`publishedon`
      &sortdir=`ASC`
      &limit=`0`
      &select=`publishedon as period`
      &groupby=`DAYOFMONTH(FROM_UNIXTIME(publishedon))`
      &tpl=`test_pavel2`
    ]]
    tpl.NewsFeed:
    <h2>[[+period:date=`%B-%Y`]]</h2>
    [[!timePeriod? &period=`[[+period]]`]]
    [[pdoResources?
      &parents=`26`
      &sortby=`publishedon`
      &sortdir=`ASC`
      &limit=`0`
      &where=`["publishedon BETWEEN [[+tp.start]] AND [[+tp.end]]"]`
      &tpl=`@INLINE <h3>{{+pagetitle}}</h3><p>{{+introtext}}</p>`
    ]]
    и сам сниппет timePeriod:
    <?php
    $start = strftime("1.%m.%Y",$period) . " 00:00:00";
    $end = strftime(date('t', $period).".%m.%Y",$period) . " 23:59:59";
    
    $modx->toPlaceholders(array(
      'start' => strtotime($start),
      'end' => strtotime($end),
    ),'tp');
    
    return $start." - ".$end ;
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3