MODX - Создание ресурсов блога

На этом уроке мы рассмотрим основные объекты CMS MODX Revolution и создадим несколько веб-страниц (ресурсов) для блога.

В MODX Revolution основные объекты можно разделить на 2 категории:

  • Ресурс (resource). В большинстве случаев данный объект представляет собой веб-страницу сайта, но кроме этого ресурсом может быть вообще любая сущность, которую можно идентифицировать в сети с помощью URL или URI. Ресурсы также можно использовать как контейнеры и помещать в них другие ресурсы, таким образом, вы можете создать структуру сайта. Каждый ресурс характеризуется уникальным идентификатором. Для того чтобы обратиться к полю ресурса необходимо использовать следующий синтаксис:
    [[*pagetitle]] //выводит заголовок ресурса
    [[*id]] //выводит идентификатор ресурса
    
  • Элементы: шаблон (template), дополнительное поле (tv), чанк (chunk), сниппет (snippet), плагин (plugin). Они могут применяться для формирования структуры веб-страницы, хранения дополнительной информации связанной с основным ресурсом, вывода динамического контента, выполнения обработки событий веб-страницы и т.д.
Элемент Описание
Шаблон (template) Шаблон всегда должен быть связан с ресурсом и определяет, как данный ресурс будет выглядеть в браузере. Шаблон следует создавать, если с его помощью будет выводиться множество ресурсов. В шаблонах можно использовать любые теги, чанки, сниппеты и др.
Дополнительное поле (tv) Дополнительное поле (TV) - это пользовательское поле для MODX ресурсов. Переменные TV используются для расширения атрибутов, доступных для ресурса. Изначально в MODX ресурс имеет определенное количество полей по умолчанию: pagetitle, content, description и др. Если вам необходимо добавить несколько дополнительных полей к вашим страницам, то это можно сделать с помощью переменных TV. MODX позволяет иметь практически неограниченное число переменных TV.
Чанк (chunk) Чанк – это кусочек статического текста, который Вы можете использовать на всех страницах сайта. В чанках можно размещать сниппеты, но запрещается использовать код PHP. Для обращения к чанкам в MODX Revolution принята следующая запись:
[[$chunk]]  //вызов кэшированного чанка
[[!$chunk]]  //вызов не кэшированного чанка
Сниппет (snippet) Сниппет – это исполняемый кусок PHP кода, который осуществляет вывод динамического контента на странице или в другом элементе CMS MODX Revolution. Он может применяться для создания динамического меню, вывода последних постов, организации поиска по сайту и многого другого. В сниппетах нельзя смешивать код php и html, т.е. он должен начинаться с <?php и заканчиваться ?>. Если вам необходимо получить на выходе из сниппета html код, то используйте чанк, который установите в качестве возвращаемого значения сниппета. Для передачи значений из спиппета в чанк используйте плейсхолднеры. Для вызова сниппетов используйте следующий код:
[[mySnippet]]  //вызов кэшированного сниппета
[[!mySnippet]] //вызов не кэшированного сниппета
Плагин (plugin) Плагины также как и сниппеты представляют собой фрагменты кода, которые имеют доступ к MODx API. Однако в отличие от сниппетов плагины не требуется вызывать непосредственно в коде, т.к. они связаны с системными событиями, которые могут произойти на веб-странице. Т.е. код плагина выполняется только при наступлении какого-либо события на веб-страницы.

Для обращения к элементам MODX Revolution используется специальный тег, состоящий из множества частей.

[[ //открывающий тег
! //необязательный флаг, который устанавливает, что данный тег является некэшируемым 
elementToken //необязательный маркер, идентифицирующий тип элемента ($ - чанк, * - поля ресурса/tv, + - плейсхолдеры и др.). Если данный маркер не использовать, то данный элемент является сниппетом 
elementName //имя элемента
@propertyset //необязательный идентификатор, предназначенный для использования набора свойств (PropertySet)
:filterName=`modifier`:... //необязательный элемент, который предназначен для применения одного или нескольких выходных фильтров 
? //данный элемент необходимо использовать, если дальше будут следовать свойства 
&propertyName=`propertyValue` &... //необязательный элемент, предназначенный для установки свойств, которые разделяются с помощью символа & 
]] //закрывающий тег

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

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

  • Откройте начальный шаблон, посредством нажатия не него левой кнопкой мыши;
  • Измените его имя на "Блог", а описание на "Шаблон для раздела";
  • Создание шаблона в MODX Revolution для раздела Блог

  • Нажмите на кнопку "Сохранить".

Создайте шаблон, который будем использовать для вывода поста:

  • Нажмите на значок "Новый шаблон";
  • В открывшейся форме введите имя "Пост", а описание - "Шаблон для поста";
  • Нажмите на кнопку "Сохранить".

Примечание: создавать код для шаблонов MODX Revolution мы будем создавать немного позднее, на следующих уроках.

В результате выполненных действий у нас должны получиться следующие шаблоны:

Шаблоны (templates) в MODX Revolution

Наш блог будет состоять из:

  • главной страницы, имеющей название "Мой блог";
  • раздела "Блог", в котором мы будем создавать посты;
  • страницы "О себе", где мы разметим информацию об блоге и авторе;
  • страницы "Карта блога", которая будет содержать ссылки на все ресурсы нашего сайта в удобной для посетителя форме.

Для создания страниц или их редактирования необходимо перейти в левой панели на вкладку "Ресурсы" и открыть раскрывающий список "Website".

Т.к. главная страница у нас уже есть, то произведите необходимую настройку её полей:

  • В поле "Заголовок" введите текст "Мой блог";
  • В раскрывающем списке "Начальный шаблон" выберите значение "(пустой)".

    Настройка полей документа в MODX Revolution

  • После выполнения изменений в полях ресурса, выполните его сохранение.

Для создания раздела с тикетами (постами) нажмите на значок "Новый документ", в открывшейся форме выполните следующее:

  • В поле "Заголовок" введите текст "Блог";
  • Выберите из раскрывающего списка "Шаблон" значение "Блог";
  • Во вкладке "Настройки" выберите из раскрывающего списка "Тип ресурса" значение "Раздел" и нажмите на кнопку "Сохранить".
  • После сохранения документа перейдите во вкладку "Настройка раздела", а затем в ней выберите пункт "Дочерние тикеты";
  • В этом разделе в качестве шаблона дочерних документов выберите значение "Пост", а в поле "Формирование URI" измените строчку на %alias%ext;

    Настройка дочерних тикетов раздела

  • Нажмите на кнопку "Сохранить".

Страницы "О себе" и "Карта блога" создадим следующим образом:

  • Нажмите на значок "Новый документ";
  • В открывшейся панели в поле "Заголовок" введите название соответствующей страницы;
  • В качестве шаблона ресурса выберите значение "(пустой)", т.е. данный ресурс не будет использовать шаблон.
  • Во вкладке "Настройки" проверьте, что тип ресурса соответствует значению "Документ", а тип содержимого – значению "HTML".
  • Нажмите на кнопку "Сохранить".

Настройка полей ресурса О себе

Для создания постов в разделе "Блог" выполните следующее:

  • Загрузите изображения в каталог на сервере (например: assets/images/tickets/2015.02/), которые Вы будете использовать в постах;
  • Откройте ресурс "Блог" и перейдите на вкладку "Раздел";
  • Создайте пост используйте кнопку "Создать тикет";

    Создание тикета в MODX Revolution

    • В открывшейся форме введите посту заголовок и содержимое. В содержимом для обрезания поста используйте тег <cut />. Т.е. с помощью данного тега определите, какая часть статьи будет отображаться при выводе списка постов на веб-странице;

      Создание поста в MODX Revolution

  • Создайте аналогичным образом ещё 3 - 4 поста.

    Посты в MODX Revolution



   MODX Revo 0    6813 0

Комментарии (33)

  1. Аня # +1
    А можно ли сделать в modx так, чтобы название url заканчивалось .html?
    1. Александр Мальцев # 0
      Аня, если Вы настроили дружественные URL, то в качестве идентификаторов ресурсов будут использоваться URI. По умолчанию название таких ресурсов будет заканчиваться на .html. Если вы хотите изменить конкретный URI ресурса, то не забудьте поставить галочку «Заморозить URI», чтобы впоследствии данный параметр не изменился.

      MODX URI

      Или можете изменить данное окончание при генерации URI для всех ресурсов. Данный параметр находится в меню «Сайт» -> «Типы Содержимого»:

      Страница MODX Content Type

      Но, если Вы не настроили ЧПУ (дружественные URL) тогда будет использоваться не URI, а URL. Тогда MODX Revolution будет выводить ресурсы через id.

      URL страницы по умолчанию
    2. Алексей Ширкин # 0
      У меня в типах ресурсов в пункте
      Во вкладке «Настройки» выберите из раскрывающего списка «Тип ресурса» значение «Раздел» и нажмите на кнопку «Сохранить».
      нет значения «Раздел»

      Как быть?
      1. Александр Мальцев # 0
        Добрый день, Алексей.
        Вам необходимо проверить наличие установленного пакета Tickets.
      2. Андрей # 0
        Александр, просто нет слов. Ваши уроки по содержанию самые доступные из всех, что пришлось нарыть в интернете. В этой серии уроков, как мне видится, есть только одно «но»: Вы пишете о создании блога, но не рассматриваете такой важный, опять же на мой взгляд, аспект, как вставка изображения.
        Простыми методами это можно сделать через дополнительное поле, но прошу Вас рассмотреть вариант использования для этих целей бесплатного дополнения Asset Manager, поскольку с его помощью также можно создавать галереи изображений, с привязкой к ресурсу.
        Если сможете подсказать как вкладку это компонента сделать видимой в тикетах, буду очень признателен. По-умолчанию она видна только в обычных документах.
        Еще раз спасибо за Ваши труды.
        1. Александр Мальцев # 0
          Спасибо, Андрей.
          Возьму на заметку компонент Asset Manager.
          1. Андрей # 0
            Разбираюсь по-тихонечку с Asset Manager.
            Очень удобно, что галерея привязывается к ресурсу
            Чтобы его вкладка виделась в тикетах в админке, в настройках компонента в поле assman.class_keys указать [«Ticket»].
            Автор пишет, что обновление компонента не допускают в репозиторий модекс
            Поэтому, чтобы исправить баг меню в версии Модекса 2.4.2, нужно из гитхаба автора переписать файл core/components/assman/controllers/BaseController.php. Я на всякий перезалил всю папку с компонентом. Всё работает
        2. Алексей # 0
          Во вкладке «Настройки» выберите из раскрывающего списка «Тип ресурса» значение «Раздел» и нажмите на кнопку «Сохранить».
          А как обратно вернуть?
          1. Александр Мальцев # 0
            А обратно вернуть не получится. Это необратимый процесс.
            1. Алексей # 0
              Серьёзно? Неужели разработчики не предусмотрели? А если удалить Tickets?
              1. Александр Мальцев # 0
                Ticket — это расширение стандартного modDocument ресурса CMF MODX. На мой взгляд это связано с тем, что когда Вы изменяете тип ресурса на раздел для Вас создаются записи в других таблицах. И простым переключением Вы уже тут не отделаетесь. Это уже другой объект, расширенный modDocument. Чтобы это осуществить, необходимо было бы удалять записи в других таблицах, а также все его дочерние ресурсы (тикеты). А это ответственный шаг и его нельзя сделать обычным переключением.
                Для того чтобы это осуществить необходимо (правильное решение): удалить этот ресурс и создать новый (тот, который Вам нужно).
                Или если Вы хотите поступить жёстко (при этом данные в других таблицах останутся), то сделайте следующее (неправильное решение, т.е. то, что Вы хотите сделать можно сделать так):
                Откройте базу данных MODX (например, с помощью phpmyadmin) -> Откройте таблицу modx_site_content (она содержит все ресурсы) -> Найдите ресурс, который Вам необходимо изменить -> поменяйте у него значение поля class_key на modDocument.
                1. Алексей # 0
                  Понял. Благодарю за разъяснение. Я уже думал на счёт того, чтобы ручками в базе поковыряться) Там ещё, по идее, значение поля properties надо тоже менять)
                  Я просто хочу сделать как у вас, чтобы было выпадающее меню с разделами. Я правильно понимаю, что для этого нужно создать ресурс Блог (контейнер), в нём, например, ресурсы Автомобили, Кошки, Собаки… И уже из них делать разделы с помощью расширения? Или эти подразделы можно делать с помощью расширения, если сделать основной ресурс Блог разделом?
                  1. Александр Мальцев # 0
                    Да, необходимо сначала будет создать ресурс Блог (контейнер (включенная галочка), тип ресурса: Документ), а в нём уже создать ресурсы Автомобили, Кошки и Собаки… (тип ресурса: Раздел с тикетами). После этого создавать ресурсы (тикеты) уже в этих разделах…
                    1. Алексей # 0
                      Лучи добра вам) Весьма подробно объясняете) Хорошо, что нарвался на ваш сайт) А то уже хотел штатными средствами реализовывать такую структуру)
          2. Виталий # 0
            Во вкладке «Настройки» выберите из раскрывающего списка «Тип ресурса» значение «Раздел» и нажмите на кнопку «Сохранить».
            Версия modx-2.4.2-pl не поддерживает данную функцию а сразу создает тикет.
            Подскажите как решить данную проблему?
            1. Александр Мальцев # 0
              В версии modx-2.4.2-pl всё тоже самое. Только в последней версии Tickets пункт называется не Раздел, а Раздел с тикетами. Проверьте может Вы просто создаёте Тикет уже в Разделе с тикетами
            2. Алексей # 0
              Александр, подскажи ещё такую вещь. Как сделать с установленным компонентом Тикетс, чтобы ссылки на статьи шли от корня? То есть site.ru/statya, а не site.ru/razdel/statya. До установки компонента у меня так и было. Я просто думал, что блог вообще делается штатными средствами. У меня созданы шаблон для полной статьи и шаблон для блоговой страницы. И контент выводился через pdoResources. Ссылки, соответственно, везде были прописаны так
              <a href="/[[~[[+id]]]]">Читать далее...</a>
              и все были от корня. Нашёл, что за вывод блоговой страницы отвечает шаблон tpl.Tickets.list.row. Поменял в нём ссылки на
              <a href="/[[~[[+id]]]]">Читать далее...</a>
              , но они всё равно имеют вид site.ru/razdel/statya.
              В системных настройках use_alias_path стоит значение — Нет.
              1. Александр Мальцев # 0
                Алексей, tickets по умолчанию при сохранении нового тикета формирует ему URI. В этом случае используется уже он.
                Чтобы это отменить:
                1. Необходимо, у созданных уже ресурсов снять галочку «Заморозить URI».
                2. Чтобы tickets не генерировал его для новых тикетов, открыть вкладку «Настройки раздела» и удалить всё из поля «Формирование URI». После этого сохранить.
                Теперь tickets не будет генерировать URI и у тебя будет всё как было :)

                P.S. Но это очень плохая практика и так лучше не делать.
                1. Алексей # 0
                  Почему это плохая практика и так лучше не делать?
                  Мне всегда больше нравились ссылки вида сайт.ру/статья
                  Я думал что в «Формирование URI» %alias — псевдоним именно статьи, без раздела)
                  1. Александр Мальцев # 0
                    Это лично моё мнение по этому поводу. Для меня это тоже самое, что все файлы сохранять в один каталог. Т.е. получается что нет структуры. Представьте Вы открыли страницу, содержащую информацию о принтере. Прочитали и хотите посмотреть какие ещё есть принтеры. Т.е. как Вам в этом случаи поступить, как создать прозрачную ссылку? Кроме этого, допустим у Вас ещё есть и другие разделы на сайте. Например, страница с пользователями. Как у Вас в этом случае будет выглядеть ссылка? А как же поисковые роботы Яндекса и Google. Как они поймут Вашу структуру. На мой взгляд это удобно только для небольших сайтов, состоящих из 20 страниц и меньше. Тогда ссылки получаются более короткими, да и в структуре тут особо смысла нет.
                    Если Вам так удобно, то делайте так.
                    1. Алексей # 0
                      Понял. Благодарю за ценное мнение.
                      Можешь ещё подсказать по следующим вопросам.
                      Как сделать, чтобы содержимое тикета редактировалось редактором MarkItUp? В настройках он стоит, но когда создаю тикет, всё как у тебя на скриншоте. Если в настройках поставить TypoMCE, то он подцепляется. Может его надо как-то отдельно устанавливать. Может даже отдельную статью на эту тему лучше написать)
                      Как можно сделать, чтобы тикетс использовал мои чанки для шаблонов? Например Я сделал копию tpl.Tickets.list.row, которая называется tpl.Tickets.list.row.my. А то стандартный шаблон, не очень вписывается в дизайн) Как вот сделать, чтобы использовался tpl.Tickets.list.row.my? Или только править стандартный шаблон?
                      1. Александр Мальцев # 0
                        Установка редактора осуществляется в разделе Настройки системы. В нём необходимо найти параметр с именем «Редактор» (ключ which_editor) и выбрать ему в качестве значения необходимый визуальный редактор (например, MarkItUp). Перед этим его конечно необходимо установить в разделе Управление пакетами (Приложения -> Установщик).
                        Нет, стандартный шаблон лучше не трогать. Делаете копию (например, tpl.Tickets.list.row.my) и указываете её в качестве параметра.
                        Например, открываете ресурс (раздел с тикетами) -> открываете вкладку Настройка раздела и в содержимом указываете свой чанк:
                        [[!pdoPage?
                          &element=`getTickets`
                          &tpl=`tpl.Tickets.list.row.my`
                        ]]
                        [[!+page.nav]]
                        
                        1. Алексей # 0
                          Лучи добра очередной раз!)
                          В настройках-то стоит редактор markitUp!.. Но его же в репозиториях нет. Я устанавливал локально, стоит версия markitUp! 0.0.5, скачанная отсюда. Но тикетс почему то не подгружает его.
                          В описании компонента тикест же написано:
                          Удобный редактор MarkItUp для тикетов и комментариев.
                          Я думал он уже в состав входит. В описании ссылка на редактор вот эта, там и версия свежее, но как его установить в MODX, Я так и не понял и нигде не нашёл.
                          Буду дико рад, если поможешь это осуществить)
                          1. Александр Мальцев # 0
                            Алексей, я им не пользуюсь. Да и разбираться в чужом коде не хочется. Попробуй написать автору компонента на гитхаб про это.
                            1. Алексей # 0
                              Понял) Подскажи откуда ты столько знаешь про MODX? Посоветуй что почитать, хочу так же хорошо разбираться)
                              1. Александр Мальцев # 0
                                MODX — это не WordPress и не Joomla!..
                                Если разработчик только начинающий, то сделать что-то на Joomla или WordPress более просто. Там не нужно даже знать HTML и CSS. Установил готовый шаблон, что-то подкрутил, вот уже и готово. Из-за этого популярность этих систем намного выше.
                                Например, в Яндексе вводят что-то связанное с:
                                WordPress — 1 754 098 раз за месяц,
                                Joomla! — 268 121 раз за месяц,
                                MODX — 47 073 раз за месяц.
                                Вывод: Т.к. популярность MODX намного ниже, то и количество материалов по ней очень мало. Поэтому используй то, что сможешь найти. Самый основной ресурс — это конечно modx.com (документация — rtfm.modx.com/), ну и остальные ресурсы, какие сможешь найти (docs.modx.pro и др.).

                                Хоть MODX и более сложен в изучении, но и возможности он предоставляет намного больше. Во-первых, он не CMS (т.е. не конструктор сайтов), а CMF (т.е. конструктор CMS).
                                Во-вторых, Вы полностью контролируете вывод HTML, т.е. всегда знаете, что у Вас получится. А это большой плюс для поисковой оптимизации (SEO). В третьих Вы сможете создать любой нестандартный потенциал, который пользователям Joomla! даже и не снился.
                                1. Алексей # 0
                                  Я понимаю о чём ты говоришь) У меня был сайт на Джумле, как раз переделываю его на Модэкс. Но возникают трудности, не всегда мне просто по документации понятно, как это сделать)
                                  Вот снова вопрос возник. Смотрю у меня в коде контента вместо тега p стоит br. Посмотрел у тебя в коде всё в порядке. Понял, что это дело рук Jevix. Нагуглил как через набор параметров убрать br и добавить p. Я так понимаю ты тоже самое делал?
                                  Но вот в чём проблема. В 2 статьях из 3 всё стало нормально. А в одной почему-то Jevix ставит оба тега в конце абзаца вот так /p br. Куда копать не пойму. Если отключить Jevix, то всё норм. Единственное, что к этой статье есть два моих тестовых комментария. Вот и всё отличие между ними.
                                  1. Алексей # 0
                                    Изменить коммент не могу. В общем, во всех статьях в конце абзаца вставляется тег br. Подскажи как ты у себя это проблему решил? У меня через наборы параметров не получается.
                                    1. Алексей # 0
                                      Разобрался. Может поможет кому-то, надо было парамерт cfgSetAutoBrMode в значение Нет поставить)
                                    2. Александр Мальцев # 0
                                      Да, это рук Jevix. Он при сохранении комментариев или ticket (т.е. самих ресурсов) производит в них изменения в соответствии с параметрами. Настройка параметров Jevix осуществляется в панели управления. Для этого необходимо нажать на шестерёнку и перейти на страницу Наборы параметров.
                                      Там слева два пункта. Один для комментариев, другой для Ticket. Названия параметров говорят сами за себя:
                                      cfgAllowTagParams — разрешённые параметры тегов,
                                      cfgAllowTags — разрешённые теги,
                                      cfgSetAutoBrMode — заменяет новые строки на br, ну и т.д.

                                      Я как вижу Вы уже сами разобрались во Всём этом. Jevix — это как бы фильтр для того, чтобы пользователи не могли ввести на сайте всё что угодно.
                2. Amsterdam # 0
                  Как ты код сниппета выводишь здесь, в теле статьи? Он же интерпретируется модиксом как вызов сниппета и не показывается. или тут движок сайта не modx у тебя?
                  1. Александр Мальцев # 0
                    MODX сначала парсит свои теги.
                    Т.е. если MODX встречает, например, такую конструкцию:
                    <code>
                    [[TicketMeta]]
                    </code>
                    
                    То он сначала выполнит [[TicketMeta]]:
                    <code>
                    Тут будет результат выполнения сниппета TicketMeta
                    </code>
                    
                    Чтобы такого не было Вам необходимо заменить:
                    [ -> &#91;
                    ] -> &#93;
                    
                    После этого, когда MODX встретит такую конструкцию, он её обрабатывать не будет, т.к. она не будет содержать теги MODX. В итоге Вы получите на экране необходимый код, а не результат его вывода.
                    <code>
                    &#91;&#91;TicketMeta&#93;&#93;
                    </code>
                    
                    Что это осуществить, Вам надо производить эти преобразования либо при сохранении, либо при выводе.
                    Например, можно воспользоваться компонентом (сниппетом) Jevix. Он выполняет нечто подобное при выводе:
                    [[Jevix? &input=`
                    <code>
                    [[TicketMeta]]
                    </code>
                    `]]
                    
                    Если, например, Вы используете Tickets, то данный механизм в него включён по умолчанию. Можно, например, в ресурсах, не включать галочку Выполнять теги MODX, тогда теги [ ] тоже обрабатываться парсером не будут.
                    1. Amsterdam # 0
                      спасибо. но это я уже все разобрал за вчера.

                  Вы должны авторизоваться, чтобы оставлять комментарии.