MODx CMS

индекс
52,84

Создание ленты новостей в CMS MODx с сортировкой по дате

Вопрос создания ленты новостей на сайте достаточно тривиален, но лично я не находил подробного описания по созданию новостей для CMS MODx. Естественно, что наиболее правильным вариантом является использования модуля Ditto, но иногда возникает задача сортировать новости не по дате создания, публикации, положению в меню, а по дате новости. Достаточно часто новости создаются с опозданием и необходимо вставить новость между уже опубликованных новостей или бывает, что дату новости нужно поменять.


Материал предоставил Chips , поэтому благодарность выражайте ему. ;-)

О том, как создать ленту новостей с сортировкой по дате, введенной пользователем и пойдет речь.


Для этого нам потребуется модуль 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>


Пусть шаблон будет называться «Новости». Просто и понятно, а про сниппет convertDate поговорим чуть позже.

Можно вообще не создавать отдельный шаблон для новостей, но в таком случае TV для даты будет присутствовать и в тех документах, где он может и не требоваться.

Template Variable для даты новости


Переходим:

Ресурсы -> Управление ресурсами-> Вкладка «Параметры (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><br/>
<p>[+introtext+]</p>
</div>

Наибольший интерес здесь, конечно же, представляет строчка [[convertDate? MyDate=`[+tvdate+]`]] . В ней мы вызываем специально написанный сниппет для конвертации даты в более читабельный вид. Параметром MyDate передаем текущую дату новости в списке новостей.

Создание сниппета для новости


Идем Ресурсы -> Управление Ресурсами -> Сниппеты -> Новый Сниппет

Назовем сниппет convertDate и содержание у него такое:

<? php
$monthes =
array('','января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
$day = date("j",$MyDate);
$month = $monthes[date("n",$MyDate)];
$year = date("Y",$MyDate);
echo $day.' '.$month.' '.$year.' года';
?>

Простейший PHP-код по преобразованию даты. Создаем массив названий месяцев в родительном падеже, пропуская при этом нулевой элемент. Далее просто выводим дату в виде строки.

Выглядеть это будет примерно так.




Вот и всё. Список новостей готов. Сюда также можно добавить добавление новостей из разных папок. (если у вас идет деление новостей по разделам), добавив в параметр startID через запятую ID документов-папок с новостями.

Еще можно, а чаще всего даже нужно, создать переход по страницам для вывода новостей, но об этом уже в другой раз.
+1
29 августа 2008, 12:07
9

комментарии (13)

0
Artima #
А вот минусы хорошо бы аргументировать.
0
heel #
Я так замечаю, что многие материалы, которые относятся к Modx, уходят в минус.
0
Artima #
Видимо кто-то сильно не любит такие публикации, но при этом упорно продолжает за ними следить. :-)

Хоть и нездоровый, но интерес :-)
+1
tmr #
Как вариант, для даты новостей можно использовать стандартное поле «Дата публикации», а Ditto выводить с &dateSource=`pub_date`. Тогда, если дата указана, [+date+] примет значение поля pub_date таблицы modx_site_content, иначе publishedon, автоматическую дату реальной публикации.
Такое годится для подавляющего большинства новостей, проставляет дату автоматически (либо принудительно, по вашему выбору) и избавляет от лишнего тега.
[[Ditto?&startID=`10`&tpl=`news_tpl`&sortBy=`pub_date`&sortDir=`DESC`&dateSource=`pub_date`&summarize=`20`]]
0
Artima #
Верно. При этом дополнительного поля уже не потребуется :-)
0
leksus #
А как оно дату подставляет автоматически? У меня pub_date автоматом не заполняется…
0
seopupkin #
Artima, спасибо!.. Хоть бы один минусовщик отписался…
0
mestny #
Отличная статья, сапсибо автору! А кто нить знает как сделать что бы отображались новости только за три дня: за вчера, сегодня и завтра?
0
unreg #
Сделал как написано, выводится дата только 1 января 1970 года.
Куда копать?
0
GmasteR #
Выводите через [+date+] в чанке.
и про &dateFormat=`%d.%m.%Y` в параметрах сниппета не забудьте
0
unreg #
Вот опять взялся за ту проблему :) Уже в Modx 1.0.0 (на денвере, с английской XP)
Все вроде правильно делаю, все равно дата выводится как 1 января 1970…
Может быть проблема в том, что у меня новости выводятся по pub_date?

[!Ditto? &startID=`2` &tpl=`news_p1` &summarize=`15` &dateFormat=`%d %B %Y` &language=`russian-utf8` &dateSource=`pub_date` &sortBy=`pub_date` &paginate=1 &tplPaginatePage=`pgn`!]

в чанке вот так:
[[convertDate? MyDate=`[+date+]`]]
0
GmasteR #
Выводите в чанке ПРОСТО [+date+]
Без convertDate!
0
burzilov #
А куда пропали иллюстрации из статьи?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.