Создание системы блога в MODx

G
N
I
D
A
O
L

Статья

image news
view350

Создание системы блога в MODx

Вы хотите создать блог на системе 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, ссылающуюся на пост. И выводим дату публикации.

На домашней странице блога будет следующий код:

[ [!getResourcesTag?
&elementClass=`modSnippet`
&element=`getResources`
&tpl=`blogPost`
&parents=`50,51`
&limit=`5`
&includeContent=`1`
&includeTVs=`1`
&showHidden=`0`
&hideContainers=`1`
&cache=`0`
&pageVarKey=`page`
] ]

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

Это позволит нам выводить посты из обоих разделов, сделанных нами, в ресурсах 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`
] ]

Мы даём команду getResources выдать нам список из последних 3 записей ресурса в наших разделах ресурсов 50 и 51, отсортировав их по дате публикации. Далее создаём чанк latestPostsTpl, который вы определили вызовом tpl в вызове сниппета getResources. И вставляем в этот чанк следующий код:

<li>
<a href="[ [~[ [+id] ]] ]">[ [+pagetitle] ]</a>
[ [+publishedon:notempty=`<br /> - [ [+publishedon:strtotime:date=`%b %d, %Y`] ]`] ]
</li>

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

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

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

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

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

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