Image Blog

Создание системы блога в 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, автоматически фильтрующий результаты TV0параметра 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></h2>  - кликабельная ссылка к посту, названием является 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.

Блузки Рубашки Кофты Размещайтесь в белый каталог сайтов, и закажите фотообои на стену и тюремные татуировкиИнтернет - каталог интернет сайтовPreCat.ru Premium Catalogue - Каталог сайтов