Вы хотите создать блог на системе 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.