pdoResources разбивка ресурсов по дням
Привет. Подскажи пожалуйста, может кто знает, как сделать следующий вывод материалов через pdoResources
По формату
Выводится сначала последний день (02.10.2015)
Затем список всех новостей этого дня
Затем предыдущий день (01.10.2015)
И все материалы этого дня
…
и так далее
Вот для наглядности картинка:
По формату
Выводится сначала последний день (02.10.2015)
Затем список всех новостей этого дня
Затем предыдущий день (01.10.2015)
И все материалы этого дня
…
и так далее
Вот для наглядности картинка:
Комментарии: 3
Можно попробовать сделать следующим образом. Сначала выбираем все даты публикаций (дополнительные параметры, вроде родителей и лимита настраивайте под себя):
В шаблоне tpl.NewsFeed снова вызываем pdoResources и выбираем все ресурсы, опубликованные в определенный день:
Т.к. дата публикации хранится вместе со временем в формате UNIXTIME, то нужен сниппет (у меня — timePeriod), который возвращает время начала суток и конца суток для заданного дня в UNIXTIME (и в этом промежутке мы потом и выбираем ресурсы):
[[!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 без дополнительных сниппетов, но у меня не получилось.
Спасибо! А подскажи пожалуйста, как это сделать не по дням, а по месяцам
Вообщем по разбивка ресурсов по месяцам:
[[!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 ;
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.