Pull to refresh

вывод новостей с группировкой по дате

Reading time 2 min
Views 2.5K
Дано: MODx 1.0.0
Нужно: выводить список новостей в следующем формате:
25.08.09
> заголовок 2 новости от 25 августа
описание

> заголовок 1 новости от 25 августа
описание

24.08.09
> заголовок новости от 24 августа
описание

Реально ли это сделать без переписывания куска Ditto?

Вариант 1 — extender. Сохраняем код в файл assets/snippets/ditto/extenders/dateGroup.extender.inc.php
<?php
    global $dateSource, $dateFormat;
    $dateSource = isset($dateSource) ? $dateSource : "createdon";
    $placeholders['groupDate'] = array(array($dateSource, "*"), "getGroupDate", $dateSource);
    $dateFormat = isset($dateFormat)? $dateFormat : '%d.%m.%y';

    if (!function_exists("getGroupDate")) {
        function getGroupDate($resource) {
            static $date = '', $id = '';
            global $dateSource, $dateFormat;
            if ($date !== strftime('%d.%m.%y', $resource[$dateSource]) || $id == $resource['docid']) {
                $id = $resource['id'];
                $date = strftime('%d.%m.%y', $resource[$dateSource]);
                return strftime($dateFormat, $resource[$dateSource]);
            } else {
                return false;
            }
        }
    }
?>

Далее: в параметрах вызова ditto включаем PHx — '&phx=`1`', в чанке выводящем каждую новость их списка (&tpl) пишем примерно следующее:
[+groupDate:isnot=``:then=`<p class='news_date'>[+groupDate+]</p>`+]
<p class='news_item'>
<span class='title'><a href='[~[+id+]~]'>[+pagetitle+]</a></span>
[+introtext:isnot=``:then=`<br /><span class='description'>[+introtext+]</span>`+]
</p>

Вариант 2, без Ditto (предложил fuzzy) — modx.ru/blog/modx-adding-articles
Tags:
Hubs:
+3
Comments 5
Comments Comments 5

Articles