Как стать автором
Обновить

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

Время на прочтение2 мин
Количество просмотров2.6K
Дано: 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
Теги:
Хабы:
Всего голосов 5: ↑4 и ↓1+3
Комментарии5

Публикации

Истории

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань