Создание блога на MODx Revolution

Это руководство поможет вам настроить гибкий, мощный блог на MODx Revolution. В связи с тем, что MODx Revolution является не платформой для блогов, а полномасштабной системой для веб-приложений, то безразличных надстроек она не содержит готового решения для ведения блогов. Вам для этого необходимо настроить систему самостоятельно.

К счастью, инструменты для этого уже существуют. Данная статья поможет вам в них разобраться. Предполагается, что вы уже знакомы с синтаксисом тэгов MODx Revolution.

Прежде чем мы начнем, надо сказать: статья довольно объемная, рассказывает о создании действительно мощного блога с системой постинга, архивами, тэгами, комментариями и т.д. Если вам не нужна какая-либо конкретная часть из перечисленного, то просто пропустите конкретный раздел. MODx является модульной системой, и ваш блог может работать так как вам хочется, надо просто установить и настроить определенный модуль. Еще раз скажу, тут описан только один из способов создания блога на MODx Revolution. Помимо него есть еще множество других способов.

Эта статья создавалась на основе блога splittingred.com. Этот сайт можно использовать как пример.

Необходимые дополнения

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

Необходимые дополнения

  • getResources - Для создания списков.
  • getPage - Для пагинации.
  • Quip - для комментирования чего бы то ни было.
  • tagLister - для управления тэгами и создания навигации по ним.
  • Archivist - для управления архивом.

Дополнительные расширения

  • Breadcrumbs - для навигации.
  • Галерея - Для управления фото галереей.
  • SimpleSearch - Для добавления простого поиска на ваш сайт.
  • getFeed - Для создания RSS каналов на своем сайте, например своего канал Twitter.
  • Login - для управления пользователями и ограничения прав доступа к сайту.

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

Во-первых, понадобиться создать шаблон для поста в блоге. Предполагается, что у вас уже есть шаблоны других страниц вашего блога, пусть этот будет называться "Base Template".

Сейчас мы создадим шаблон ‎'BlogPostTemplate'. Вот его код:


[[$pageHeader]]

[[*pagetitle]]

[[*introtext]]


[[*content]]

[[!Quip? &thread=`blog-post-[[*id]]` &replyResourceId=`123` &closeAfter=`30` ]]

[[!QuipReply? &thread=`blog-post-[[*id]]` ¬ifyEmails=`my@email.com` &moderate=`1` &moderatorGroup=`Moderators` &closeAfter=`30` ]]
[[$pageFooter]]

Рассмотрим данный код. Помните, любую часть шаблона вы можете переместить куда угодно. Это только базовая структура, если вы хотите чтобы тэги были внизу страницы, то переместите их туда, MODx не ограничивает вас ни в чем.

Верхний и нижний колонтитулы

Во-первых, вы должны были заметить, что у нас есть два чанка: "pageHeader" и "footer". Эти чанки содержат повторяющиеся куски HTML-кода, находящиеся сверху и снизу страницы. Поэтому, если я хочу изменить шапку или подвал сайта, мне надо только поправить код чанка и изменения будут применены ко всем страницам сайта. Также я сделал ссылку на эту же страницу, и назвал ее pagetitle.

Информация о посте

Далее мы создадим блок информации о посте, в основном это имя автора и тэги. Рассмотрим подробнее:



Posted on [[*publishedon:strtotime:date=`%b %d, %Y`]] | 
Tags: [[*tags:notempty=`[[!tolinks? &items=`[[*tags]]` &key=`tag` &target=`1`]]`]] | 

  Comments ([[!QuipCount? &thread=`blog-post-[[*id]]`]])



Во-первых, мы используем поле publishedon для формирования даты поста.

Во-вторых, мы отображаем список тегов для поста. Вы заметили, как мы оформили вывод тэгов? Если вы не создали тэги, то ничего не произойдет. Если вы их задали, то они будут обработаны сниппетом tolinks. tolinks является часть расширения tagLister, и преобразует тэги в список ссылок. Наши тэги станут интерактивными! Мы указали поле ‎'target' как 1, то есть указали на главную страницу. Если главная страница вашего блога не является главной страницей сайта, то измените этот параметр.

И наконец, мы загружаем быстрый счетчик комментариев вместе со ссылкой на них. Обратите внимание на параметр ‎'thread' сниппета QuipCount (и позже в вызове Quip), равный 'blog-post-[[*id]]‎'. Это означает, что MODx автоматически будет создавать новую ветку комментариев для каждого поста.

Содержимое поста

Вернемся к нашему шаблону. Мы сейчас находимся в разделе контента. Обратите внимание, что мы начинаем с параметра [[*introtext]]. Это полезный параметр ресурса MODx - думайте о нем как о вводном тексте в начале поста, который будет отображаться на главной.

Добавление комментариев к постам

Хорошо, теперь мы рассмотрим блок комментариев в шаблоне BlogPostTemplate. Как видите для комментариев мы используем Quip. Вы можете использовать другие системы, такие как Disqus. В этом уроке мы будем использовать Quip. Наш код выглядит следующим образом:


[[!Quip? &thread=`blog-post-[[*id]]` &replyResourceId=`19` &closeAfter=`30` ]]

[[!QuipReply? &thread=`blog-post-[[*id]]` &moderate=`1` &moderatorGroup=`Moderators` &closeAfter=`30` ]]
 

Заметим, у нас здесь два вызова сниппета - один для отображения комментариев к этому посту ( Quip ), а другой для отображения формы ответа ( QuipReply ).

В вызове Quip, мы указали идентификатор ветки как мы описывали выше, а затем установили некоторые другие настройки. Так как наши комментарии ‎будет разделены на ветки, то нам надо указать идентификатор ресурса, к которому будет относиться комментарий(подробнее см. документацию по Quip).

Следующее, что мы хотим задать - это свойство ‎'closeAfter' в Quip и QuipReply. Он говорит Quip-у автоматически закрывать комментарии к посту после 30 дней после создания поста.

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

Есть еще целая куча других параметров Quip, которые мы могли бы настроить, но мы оставим это для вас. Для того, чтобы получить более подробную информацию, обратитесь к документации.

Создание тэгов

Теперь, когда мы настроили наш шаблон, необходимо создать TV-параметр 'Tags', которую мы будем использовать для наших тэгов.

Создаем этот параметр. В названии пишем ‎'tags', в описании пишем "Comma delimited tags for the current Resource". Далее, убедитесь, что к нему имеет доступ шаблон "BlogPostTemplate", который мы создали ранее.

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

Создание разделов

Если вы хотите, чтобы ваш блог имел "Разделы", сначала нужно соответствующие им ресурсы.

Мы создадим 2 раздела: "Личные" и "Технология". Создаем два ресурса в корне сайта и делаем их папками. 

Далее будем считать что ID этимх ресурсов 34 и 35.

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

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

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

Настройка BlogPost Chunk

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


[[+pagetitle]]

[[+introtext]]


                  

Начнем с создания кликабельного названия статьи с параметром pagetitle в качестве названия. Затем заполним секцию "posted by" и список тэгов (подобно тому, как мы делали это ранее в BlogPostTemplate).

Далее, мы покажем вступительный текст, которые мы храним в поле "introtext".

В конце концов мы создадим небольшую ссылку "читать далее", ведущую на страницу полного содержания поста. Вот и все!

Настройка домашней страницы блога

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


[[!getResourcesTag?
  &elementClass=`modSnippet`
  &element=`getResources`
  &tpl=`blogPost`
  &parents=`34,35`
  &limit=`5`
  &includeContent=`1`
  &includeTVs=`1`
  &showHidden=`0`
  &hideContainers=`1`
  &cache=`0`
  &pageVarKey=`page`
]]
[[!+page.nav:notempty=`
    [[!+page.nav]]
`]]

Это позволяет показать все сообщения из двух разделов, которые мы сделали. Это также позволяет нам сделать фильтрацию по тегам (так как все наши "tolinks" и "tagLister" дают ссылки именно на этот ресурс (в параметре target указан именно этот ID). Иными словами, помещая здесь getResourcesTag мы делаем автоматическую фильтрацию по тэгам.

Вы можете легко сделать это на другой странице. Просто убедитесь, что изменили свойство target в tagLister и tolinks.

Добавление сообщения

Хорошо, структура полностью готова, теперь мы готовы добавить сообщение в блог.

Структура страниц в рамках разделов

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

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

Сниппет Archivist справиться с любой структурой вашего сайта. Будет изменяться только URL постов вашего блога. Так что развлекайтесь.

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

Хорошо, создайте новый ресурс, и поставили в нем шаблон "BlogPostTemplate". Теперь вы можете приступить к написанию своего поста.

В конце не забудьте проставить тэги в TV-параметре tags.

Настройка архива

Отлично - у вас есть первый пост! Вы можете посмотреть на него на странице разделов. Теперь надо создать способ просмотра старых постов. Тут вам поможет Archivist.

Создание архивов ресурсов

Создаем ресурс в корне вашего сайта под названием "Архивы". Поместите в него следующий код:


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

[[+arc_month_name]] [[+arc_year]] Archives


[[+archives]]

[[!+page.nav:notempty=`
    [[!+page.nav]]
`]]

Выглядит знакомо? Это очень похоже на getResourcesTag заданный на странице разделов. На этот раз getPage является надстройной над сниппетом getArchives. Мы сообщаем, что хотим обработать дочерние документы для ресурсов 34 и 35 (наши разделы). Результат записываем в placeholder "archives".

Ниже мы ставим навигацию по по годам и месяцам, а также пагинатор. Пусть этот ресурс будет иметь идентификатор 30.

Настройка виджета Archivist

Теперь у нас есть ресурс с архивом, но нам нужен способ вывести ссылки по месяцам. Это очень просто. Где - нибудь на вашем сайте поместите следующий код:


Archives


                  
    [[!Archivist? &target=`30` &parents=`34,35`]]

                  

Так что Archivist генерирует нужный нас список (Вы можете настроить его вид как вам хочется, прочитайте документацию для этого). Мы настроили все так, чтобы ссылки шли к нашим архивам (30), и обрабатывали только дочерние ресурсы 34 и 35 документов (наш раздел "Ресурсы").

Вот и все! Archivist будет автоматически обрабатывать остальное - в том числе все ваши URL. Например URL "archives/2010/05/" покажет все сообщения за май 2010 года, а "archives/2009/" покажет все сообщения в 2009 году.

Расширенные свойства

Добавление группы модераторов

Раньше, вызове QuipReply, мы указали moderatorGroup. Давайте создадим группу для модераторов.

Перейти в Безопасность -> Группы пользователей, и создавайте новую группу пользователей под названием "Модераторы". Добавите пользователей, которых вы хотите видеть в группе (включая себя!) и настройте права доступа как вам хочется.

Затем перейдите на вкладку "Доступ к контекстам". Нажмите "Добавить контекст", что даст доступ этой группе пользователей в контексту "mgr", и доступ по политике "куипмодераторполицы".

Это нужно, позволит любому из группы "Модераторы" модерировать сообщения, а также уведомляет их по электронной почте о новых сообщениях. Затем они могут либо войти в админку для модерирования, или нажать на ссылку непосредственно в письме, чтобы утвердить или отклонить комментарий. Ваш ACL должно выглядеть примерно так:

Нажмите кнопку "Сохранить". Возможно, вам придется сбросить сессии (Безопасность -> Сбросить права доступа) и повторно войти на сайт, чтобы перезагрузить права доступа, Quip возьмет остальное на себя.

Добавление виджета "Последние сообщения"

Если вам захочется создать такой виджет, то сделать это совсем не сложно.

Поместите этот код там, где вы хотите видеть его.


[[!getResources? 
  &parents=`34,35`
  &hideContainers=`1`
  &tpl=`latestPostsTpl`
  &limit=`5`
  &sortby=`publishedon`
]]

Мы сообщаем getResources что хотим увидеть 5 последних ресурсов в категориях с индексами 34 и 35, отсортированные по параметру publishedon.

Затем создайте чанк `latestPostsTpl`, который вы указали в предыдущем куске кода. Поместите следующий код в содержимое чанка:


  • [[+pagetitle]] [[+publishedon:notempty=`
    - [[+publishedon:strtotime:date=`%b %d, %Y`]]`]]
  •  
    

    Вуаля! Последние сообщения в блоге появились на сайте:

    Добавление виджета "Последние комментарии"

    Как насчет виджета, показывающего последние комментарии на блоге? Это просто - в Quip есть сниппет QuipLatestComments, который предназначен именно для этого.

    Поместите код туда, где хотите видеть этот виджет:

    
    [[!QuipLatestComments? &tpl=`latestCommentTpl`]]
    

    Теперь создайте кусок называется "latestCommentTpl ':

    
    
  • [[+body:ellipsis=`[[+bodyLimit]]`]]
    by [[+name]]
    [[+createdon:ago]]
  •  
    

    QuipLatestComments автоматически обрезает комментарий многоточием. Максимальное колчество символов задается параметром bodyLimit, по умолчанию 30 символов. Обратите внимание на фильтр "ago" выходного фильтра, который мы использовали здесь. Этот фильтр встроен в MODx Revolution, и переводит параметр в строку типа "два часа, 34 минут назад".

    Отметим также, что по умолчанию будет показано 5 комментариев. Результат:

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

    Добавление виджета "Наиболее часто используемые теги"

    Легко! tagLister делает это за вас. Просто поместите код:

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

    tagLister будет проверять TV-параметр tags, а также создавать ссылки, на список статей с этими тэгами.

    Заключение

    Ваш блог полностью настроен! Дерево документов должно выглядеть примерно так:

    Есть гораздо более глубокие настройки для блога. Эта статья предназначена в качестве отправной точки, вы можете настраивать и добавлять что угодно по своему вкусу. Отличительной особенностью MODx является то, что вы можете очень легко настраивать и масштабировать любое решение: в том числе и блог!

Тэги :

21 Комментариев

    Элементы 1—10 из 21.
    • Janet
      Очень полезная статья, тем более, что я собираюсь переставлять свой блог на MODx.
    • Cheizer
      Да Спасибо большое, очень долго искал как на MODx сделать блог, буду теперь по вашей статье делать
    • ТВ параметр
      Для ТВ параметра tags - можно еще включить настройку отображения - авто Тег) и будет счастье)
    • Олег
      Интересно) Попробую сделать себе нечто подобное)
    • Петр
      Добрый день!
      Отличная статья))))

      Подскажите, эта строчка выводит дату и время: Posted on [[*publishedon:strtotime:date=`%b %d, %Y`]]
      ,но дата на английском, а как ее сделать на русском языке?
    • Ильяс
      По моему выходными фильтрами это сделать нельзя. Придется сначала обработать их функцией stotodate, создать массив соответствий английских и русских названий месяцев, а потом при помощи функции str_replace произвести замену.

      Может быть можно это сделать более элегантно, но это первое что мне пришло в голову.
    • Станислав
      В самом начале: "Login - для управления пользователями и ограничения прав доступа к сайту."
      По факту - про организацию регистрации на сайте ничего не написано...
      Будьте добры, распишите процесс настройки вышеуказанного пакета. т.к. проблемы с регистрацией и активацией есть.
    • Александр
      Спасибо Вам. После evo смотрел на revo как баран на новые ворота
    • mr.Stiher
      Даже помощнее чем Wordpress будет.
      Спасибо автору за статью
    • andreysolo
      При переходе на полную статью меня выбрасывает на главную.
      Ссылка с титлов получается такого типа https://scriptology.ru/7E8 где 8 это id страницы новости.

      что то здесь не так?
      [[+pagetitle]]

Оставьте комментарий

Мы не опубликуем ваш email

Scroll To Top