Вы хотите создать блог на системе MODx, но не знаете как это сделать? Эта статья посвящена именно этому вопросу, и подходит к его решению комплексно. Приятного чтения!

Вступление

Для создания системы блога нужны дополнения MODX Revolution, вот несколько примеров таких дополнений:

  • getResources - для списка страниц, ресурсов и записей.
  • GetPage - для постановки номеров списков.
  • Taglister - управление тегами и навигации за счёт них.
  • Archivist - позволяет управлять разделом архивы.
  • Gallery - управления фото-галереями.
  • SimpleSearch - для добавления простого поискового окна.
  • GetFeed - для размещения фидов.

Создание шаблона блога

Первым делом необходимо создать шаблон блога. Допустим он содержит шапку, пост и подвал. Первое и последнее мы добавим посредством чанков, а вот структуру самого поста разберём подробнее:

<p class="post-info">
Posted on [[*publishedon:strtotime:date=`%b %d, %Y`]]
Tags: [[*tags:notempty=`[[!tolinks? &items=`[[*tags]]` &key=`tag` &target=`1`]]`]]
</p>
Posted on [[*publishedon:strtotime:date=`%b %d, %Y`]] - выводит поле ресурса publishedon, форматирую его, как нам нужно.
Tags: [[*tags:notempty=`[[!tolinks? &items=`[[*tags]]` &key=`tag` &target=`1`]]`]] - отображаем список тегов для поста. Вывод тегов задан таким образом, что если они не созданы – ничего не произойдёт, иначе, они будут обработаны сниппетом tolkins, преобразовываясь в списки ссылок. &target=`1` - ссылки будут вести на главную страницу.
<div class="entry">
<p>[[*introtext]]</p>
<hr>
[[*content]]
</div>
[[*introtext]] – будет выводить поле ресурса introtext. Будет выполнять роль начального отрывка поста на главной.

Установка тегов

Шаблон готов, теперь необходимо установить теги, в нашем случае это переменная шаблона tags, участвующая в системе тегов.

Создаём переменную шаблона tags, убеждаемся, что она имеет доступ к нашему шаблону и всё, теперь мы имеем возможность добавления тегов ко всем постам, путём изменения ресурса, просто добавляя теги через запятую.

Если есть необходимость в создании категорий, то нужно создать ресурсы, которые будут содержать посты соответствующих категорий.

Как пример, создадим два ресурса для категорий «Личные» и «Технология».

[[!getResourcesTag?
&element=`getResources`
&elementClass=`modSnippet`
&tpl=`blogPost`
&hideContainers=`1`
&pageVarKey=`page`
&parents=`[[*id]]`
&includeTVs=`1`
&includeContent=`1`
]]

[[!+page.nav:notempty=`
<div class="paging">
<ul class="pageList">
[[!+page.nav]]
</ul>
</div>
`]]

getResourcesTag - является надстройкой над сниппетами getResources и getPage, автоматически фильтрующий результаты TV параметра tags. В итоге, мы берём все опубликованные ресурсы этого раздела (отсортировав по тегу, заданному в параметре ?tag=TagName в URL)

Ниже getResourcesTag мы ставим пагинатор, так как по умолчанию getResourcesTag показывает только 10 сообщений на странице.

Ранние в сниппете getResource мы использовали чанк blogPost. В этот чанк подставляются параметры каждого поста, который мы показываем. Он должен содержать следующее:

<div class="post">
<h2 class="title"><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h2>
<p class="post-info">Posted by [[+createdby:userinfo=`fullname`]]
[[+tv.tags:notempty=` | <span class="tags">Tags:
[[!tolinks? &items=`[[+tv.tags]]` &keyTag=`tag` &target=`1`]]
</span>`]]</p>
<div class="entry">
<p>[[+introtext]]</p>
</div>
<p class="postmeta">
<span class="links">
<a href="[[~[[+id]]]]" class="readmore">Read more</a>
<span class="date">[[+publishedon:strtotime:date=`%b %d, %Y`]]</span>
</span>
</p>
</div>

Обратите внимание tolinks использует параметр &keyTag=`tag`, а не &key как указано в документации.

<h2 class="title"><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h<2>  - кликабельная ссылка к посту, названием является pagetile ресурса.
<p class="post-info">Posted by [[+createdby:userinfo=`fullname`]]
[[+tv.tags:notempty=` | <span class="tags">Tags:
[[!tolinks? &items=`[[+tv.tags]]` &keyTag=`tag` &target=`1`]]
</span>`]]</p> - Устанавливает часть posted by и список тегов.
<p>[[+introtext]]</p> - выводим отрывок из контента.
<a href="[[~[[+id]]]]" class="readmore">Read more</a>
<span class="date">[[+publishedon:strtotime:date=`%b %d, %Y`]]</span> - выводим ссылку read more, ссылающуюся на пост. И выводим дату публикации.

Это позволит нам выводить посты из обоих разделов, сделанных нами, в ресурсах 50 и 51. Это так же позволяет нам сортировать по тегам, так как наши вызовы tolkins и tagLister имеют target равную 1. Иначе говоря, разместив тут getResourcesTag у нас автоматически появятся теги.

Добавление сообщений в блог

Структура полностью готова, можно перейти к добавлению сообщений в блог. Создаём новый ресурс, и ставим в нём шаблон нашего блога. В конце ставим теги в TV-параметре tags.

Создадим способ просмотра старых постов с помощью Archivist. Создадим ресурс и поместим в него следующий код:

[[!getPage?
&element=`getArchives`
&elementClass=`modSnippet`
&tpl=`blogPost`
&hideContainers=`1`
&pageVarKey=`page`
&parents=`50,51`
&includeTVs=`1`
&toPlaceholder=`archives`
&limit=`10`
&cache=`0`
]]

<h3>[[+arc_month_name]] [[+arc_year]] Archives</h3>
[[+archives]]
[[!+page.nav:notempty=`
<div class="paging"> 
<ul class="pageList"> 
[[!+page.nav]] 
</ul> 
</div>
`]]

getPage обёрнут в сниппет getArchives и сообщает о том, что мы хотим взять записи в Ресурсах 50 и 51 (наша страницы Разделов). Мы установим результат в заполнитель с именем 'archives', на который сошлёмся позже. Затем, ниже после этого, мы добавим несколько заполнителей, которые показывают текущие месяц и год. И в самом конце мы установим пагинацию. Отлично! Мы это всё сделали. Наш Ресурс Resource, для создания ссылок на него, имеет ID = 30.

Теперь мы имеем ресурс, чтобы иметь доступ к старым записям, осталось сгенерировать месяца для записей. Допустим, в подвале сайта вставляем код:

<h3>Archives</h3>
<ul>
[[!Archivist? &target=`30` &parents=`50,51`]]
</ul>

Таким образом, сниппет Archives генерирует помесячный список записей.

Рассмотрим несколько дополнительных функций.

Виджет последней записи

Можно добавить виджет последней записи на сайте, для этого нам потребуется следующий код:

[[!getResources?
&parents=`50,51`
&hideContainers=`1`
&tpl=`latestPostsTpl`
&limit=`3`
&sortby=`publishedon`
]]

После чего на сайте отобразятся последние записи.

Виджет часто используемых тегов

Так же, можно добавить виджет часто используемых тегов, для этого нам необходимо поместить следующий код, куда нам нужно:

[[!tagLister? &tv=`tags` &target=`1`]]

tagLister проверит переменные шаблона tags и создаст ссылки на цель (в нашем случае это ресурс с ID 1) с 10 наиболее часто используемыми тегами.

В заключении стоит отметить, что данная статья несёт ознакомительный характер и своей задачей ставит дать знания, необходимые для начального понимания устройства блога на MODX.