Вопрос создания ленты новостей на сайте достаточно тривиален, но лично
я не находил подробного описания по созданию новостей для CMS MODx.
Естественно, что наиболее правильным вариантом является использования
модуля Ditto, но иногда возникает задача сортировать новости не по дате
создания, публикации, положению в меню, а по дате новости. Достаточно
часто новости создаются с опозданием и необходимо вставить новость
между уже опубликованных новостей или бывает, что дату новости нужно
поменять.
О том, как создать ленту новостей с сортировкой по дате, введенной пользователем и пойдет речь.
Для этого нам потребуется модуль Ditto не ниже 2-ой версии (в нем есть параметры, которые отсутствовали в более ранних версиях).
Создадим шаблон для вывода подробной новости и присоединим к этому шаблону Template Variable.
Ресурсы -> Управление ресурсами -> Вкладка «Шаблоны» -> Новый шаблон
По содержанию шаблон будет мало отличаться от шаблона внутренних
страниц. Все зависит от желаемого отображения подробной новости.
У меня в шаблоне место под подробную новость (контент) выглядит так:
<h2>Новости</h2>
<h5>[*pagetitle*]</h5>
<span>[[convertDate? MyDate=`[*tvdate*]`]]</span>
<div class="content_news">
[*#content*]
<br /><br />
<a href="../">Назад к списку новостей</a>
</div>
Переходим:
Ресурсы -> Управление ресурсами -> Вкладка «Параметры (TV)» -> Новый параметр (TV)
В имени параметра обязательно вводим название date, заголовок заполняем
по своему вкусу, тип ввода ставим Date (При выборе даты будет
отображаться удобное всплывающее окошко для работы с датой), визуальный
компонент обязательно ставим Unixtime (по нему мы и будем сортировать в
дальнейшем).

Создадим документ-каталог, в котором будем хранить наши новости:

Осталось последнее действие в этой части, а именно вывод списка
новостей. В месте для контента вводим вызов Ditto следующего содержания.
[[Ditto? &startID=`18` &tpl=`news_list` &sortDir=`DESC` &summarize=`20` &sortBy=`date` ]]
startID — номер документа, откуда будем брать новости (у нас папка «Новости»)
tpl — название чанка для вывода одной новости
sortDir — сортировка по убыванию или возрастанию (у нас по убыванию)
summarize — количество новостей, выводимых на странице
sortBy — сортируем по нашему TV date
А теперь перейдем собственно к созданию новостей. Создаем дочерний
документ для только что созданного документа-каталога «Новости». Для
этого нажмем правой кнопкой мыши на иконку возле названия каталога и
выберем «Дочерний документ».

В новом созданном документе применим следующие манипуляции:
1. В поле «Заголовок» вводим название новости
2. В поле «Аннотация» вводим краткое содержание новости
3. в поле «Шаблон» выбираем наш шаблон для новостей «Новости»
4. В содержании документа вводим саму новость. Можно добавлять изображения и
всячески оформлять в соответствии со стилями сайта.
5. В дополнительном поле дату новости через кнопку
Как
раз по этому полю и будем сортировать наши новости в списке.
6. Сохраняем наши изменения

По такому алгоритму и будем и создавать все наши новости. Естественно,
не будем забывать, наши новости еще нужно и опубликовывать. Либо при
нажатии правой кнопкой мыши на иконку рядом с новостью и выбрав в
контекстном меню пункт «Опубликовать», либо при редактировании на
вкладке «Настройки страницы» задать время публикации (и время снятия с
публикации, если это Вам необходимо).
Все зависит от верстки вашего сайта, а я приведу пример своего чанка.
Переходим в раздел Ресурсы -> Управление Ресурсами -> Чанки -> Новый чанк
Даем название чанку, к примеру, news_tpl
Содержание у меня такое:
<div class="list_news">
<span class="news_title"><a href="/[~[+id+]~]">[+pagetitle+]</a></span><span class="news_date"> [[convertDate? MyDate=`[+tvdate+]`]]</span>
<p>[+introtext+]</p>
</div>
Идем Ресурсы -> Управление Ресурсами -> Сниппеты -> Новый Сниппет
Назовем сниппет convertDate и содержание у него такое:
<? php
$monthes =
array('','января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
$day = date("j",$MyDate);
$month = $monthes[date("n",$MyDate)];
$year = date("Y",$MyDate);
echo $day.' '.$month.' '.$year.' года';
?>
