Наши заметки о MODx
В этом разделе мы будем собирать небольшую копилку секретов по работе с системой управления контентом сайта (CMS) MODx. Эти заметки ни в коем случае не претендуют на лавры документации. На нашем сайте тема MODx вообще занимает небольшой уголок, и эти материалы мы размещаем только потому, что по роду основной работы нам приходится оказывать техническую поддержку нескольким десяткам организаций, использующих наши прототипы сайтов. В то же время кое-что может пригодиться и другим людям.
Мы не претендуем на изложение "истины в последней инстанции". Наверняка в этих заметках гуру MODx найдут неточности и ошибки. Мы будем очень благодарны, если на это нам укажут в комментариях.
В заметках мы стараемся не просто сразу приводить готовое правильное решение, но и показываем, как мы набивали шишки в процессе поиска.

Публикация новостей с использованием MODx


На многих сайтах самым обновляемым контентом являются новости. Обычно каждая "новость" оформляется в виде отдельного документа в специальной папке, а куда-то (обычно на главную страницу) выводится лента новостей.

На нашем сайте новостей не так уж много (лень-матушка). А вот на сайтах, которые мы поддерживаем, публикуется до нескольких десятков новостей ежедневно.

Написать документ новости не сложно, хотя и здесь имеются нюансы, которые мы рассмотрим отдельно. В этой заметке мы разберемся с публикацией лент новостей.

Штатное решение для MODx - вывод ленты новостей с помощью мощного сниппета Ditto. Это мощное средство, но значительно нагружает сайт - создается очень много запросов к базе данных. Именно по этому многие используют другие,  более легкие сниппеты. И даже девиз такой вот встречается - "дитте - бой!". С этим вопросом мы также разберемся в отдельной заметке. А пока - про Ditto.

Использование Ditto для вывода новостей

Возьмем пример нашего сайта.  Все документы с новостями мы создаем в папке Последние новости с ID=24

На главной странице сайта весь контент представляет из себя вызов сниппета:

[ [Ditto? &startID=`24` &summarize=`10` &removeChunk=`Comments` &tpl=`ditto_news` &sortBy=`pub_date` &sortDir=`desc` &paginate=`1` &language=`russian-UTF8` &extenders=`summary,dateFilter` &paginateAlwaysShowLinks=`0`  &truncText=`Читать полностью...` &dateSource=`pub_date` &dateFormat=`%d.%m.%Y `] ]

Ниже прописано:

Показано [ +start+ ] - [ +stop+ ] из [ +total+ ] материалов

А ещё ниже:

[ +previous+ ] | [ +pages+ ] | [ +next+ ]

В результате посетители видят ленту новостей:

Лента новостей Ditto

Лента новостей Ditto

При этом внизу ленты имеется навигатор по страницам:

Навигатор по страницам новостей

Навигатор по страницам новостей

  Что мы видим в ленте новостей и как это задано вызове Ditto

1. Показываются 10 (аргумент &summarize=`10`) последних новостей из папки с ID=24  (аргумент &startID=`24`).

2. Что именно выводить задано шаблоном вывода (аргумент  &tpl=`ditto_news`).

3. Новости сортируются по дате публикации (аргумент &sortBy=`pub_date`), при этом более свежие новости показваются в начале ленты (аргумент &sortDir=`desc`), а дата берется из поля, заданного аргументом &dateSource=`pub_date`, и выводится в формате, заданном аргументом &dateFormat=`%d.%m.%Y `.

4. Текст ссылки на полный текст новости задан аргументом  &truncText=`Читать полностью...`.

5. Из новостей удаляются тексты, возможно вставляемые чанком Comments (аргумент &removeChunk=`Comments`).

6. Задана кодировка (аргумент  &language=`russian-UTF8`).

7. Новости разбиваются по страницам (аргумент  &paginate=`1`).

8. Ссылки Назад и Далее показываются всегда (аргумент  &paginateAlwaysShowLinks=`1`).

9. Для увеличения функциональности Ditto загружаются расширения summary и dateFilter (аргумент  &extenders=`summary,dateFilter`). 

Шаблон вывода новостей

Новость в ленту выводится по чанку, заданному аргументом &tpl=`ditto_news`. Вот текст этого чанка:  

<div class="ditto_summaryPost"> <br />
<div class="date"> [ +date+ ] </div> <br />
<h5> <a href="[ ~[ +id+ ]~ ]" title="[ +title+ ]">[ +title+ ]</a> </h5><br />
<h6>[ +longtitle+ ]</h6><br />
<div class="intro"> [ +introtext+ ] </div> <br />
<p class="ditto_link"> [ +link+ ] </p> <br />
</div>

  В чанке используются placeholder (подстановки). На место [ +title+ ] будет подставлено поле title, на место [ +introtext+ ] - поле introtext, а вот на место [ +date+ ] будет подставлено поле, заданное аргументом &dateSource=`pub_date`,то есть дата публикации, а не дата создания или редактирования документа - это позволяет управлять тем, какая именно дата будет отображаться. Можно ведь написать новость заранее, задать дату публикации, и именно эта дата будет показана на странице.

  Для Ditto имеется несметное количество аргументов. Мы их разбирать здесь не будем. В следующих заметках обозначим некоторые проблемы работы с новостями.

05-02-2009 10:57:08



    Содержание раздела «Новости в MODx»:
Комментарии любых посетителей

Написать комментарий