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

Содержание:
  1. Основные объекты CMS MODX Revolution
  2. Создание шаблона для постов
  3. Создание основных страниц и разделов блога
  4. Комментарии

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

Основные объекты CMS MODX Revolution

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

  • Ресурс (resource). В большинстве случаев данный объект представляет собой веб-страницу сайта, но кроме этого ресурсом может быть вообще любая сущность, которую можно идентифицировать в сети с помощью URL или URI. Ресурсы также можно использовать как контейнеры и помещать в них другие ресурсы, таким образом, вы можете создать структуру сайта. Каждый ресурс характеризуется уникальным идентификатором. Для того чтобы обратиться к полю ресурса необходимо использовать следующий синтаксис:
    [[*pagetitle]] //выводит заголовок ресурса
    [[*id]] //выводит идентификатор ресурса
    
  • Элементы: шаблон (template), дополнительное поле (tv), чанк (chunk), сниппет (snippet), плагин (plugin). Они могут применяться для формирования структуры веб-страницы, хранения дополнительной информации связанной с основным ресурсом, вывода динамического контента, выполнения обработки событий веб-страницы и т.д.

Основные элементы CMS MODX Revolution

Элемент Описание
Шаблон (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

Комментарии: 74

pavise
pavise
В статье написано:
Во вкладке «Настройки» выберите из раскрывающего списка «Тип ресурса» значение «Раздел» и нажмите на кнопку «Сохранить».
У меня в «Тип ресурса» нет значения «Раздел».
Как сделать, чтобы он появился?
Александр Мальцев
Александр Мальцев
В текущей версии он называется «Раздел с тикетами». Чтобы он появился вам необходимо установить компонент Tickets.
Mohito
Mohito
Добрый день Александр, подскажите пожалуйста ещё актуальна статья?
Я просто начинающий и совсем зелёный, хочу сделать не большой мини сайт на платформе MODX и в установщике пакетов не нашёл компонента Tickets.
Есть для него какая-либо альтернатива сейчас?
Mohito
Mohito
Мне ваш сайт очень понравился, спасибо за ваши огромные труды для платформы MODX!!!
В интернете и в правду не много информации о системе, хотя она на мой взгляд более гибкая чем WP, и к тому же учит разбираться немного в коде, а не брать всё готовенькое, за счёт этого можно сделать что то своё уникальное, а не как все шаблоны WP)))
Александр Мальцев
Александр Мальцев
Добрый день! В MODX имеется множество поставщиков пакетов. В данном случае вам нужен modstore.pro. Для этого его вам нужно добавить в систему, а далее использовать для загрузки пакетов вместо дефолтного rest.modx.com/extras/.
Создание нового поставщика в MODX для загрузки пакетов
Александр Мальцев
Александр Мальцев
Спасибо за отзыв!
Mohito
Mohito
Да, такую информацию нашёл, зарегистрировался на сайте modstore.pro, но это не решило проблему, всё делаю по инструкции вот что пишет itchief.ru/assets/uploadify/a/8/8/a88b3cad0c6c65accdc7492e47dfd33f.png
Mohito
Mohito
Нашёл способ загрузить Tickets, просто скачав с GitHub и загрузив на сервер через FileZilа, но при установке пакетов локально, почему то не видит файлы.
Александр Мальцев
Александр Мальцев
Регистрироваться не нужно. Регистрация нужна только для загрузки купленных дополнений.
Александр Мальцев
Александр Мальцев
Не знаю, должно очень просто все загружаться:
Загрузка дополнений с modstore.com
Александр Мальцев
Александр Мальцев
MODX 3.0 — это новая версия, для рабочих проектов я ей не пользуюсь. Не все компоненты совместимы с ней.
Если нужно хорошая поддержка компонентов, то нужно использовать MODX 2.8.
Mohito
Mohito
Здравствуйте Александр, получилось установить v2.8, делаю по вашей инструкции --->>> itchief.ru/modx/create-posts
Но почему то в меню не выводит остальные страницы кроме главной, подскажите зелёному что тут нужно переделать?
1)<img
src=«/assets/uploadify/6/6/c/66c634d5407ad3504225c217224c6eb6s.jpg» class=«fancybox thumbnail center»>


2)<img
src=«/assets/uploadify/a/3/4/a34df094618a1261f7b10722b9402404s.jpg» class=«fancybox thumbnail center»>


3) <img
src=«/assets/uploadify/5/4/4/54463edabb044a5e2f0f7f8a921c0741s.jpg» class=«fancybox thumbnail center»>

Александр Мальцев
Александр Мальцев
Здравствуйте! Мне кажется, что вы что-то не то делаете. Страницы, которые просто являются страницами должны иметь в качестве типа ресурса просто «Документ». Например, такие как «О себе», «Карта блога» и так далее.
Тип ресурса «Раздел с тикетами» предназначен для создания раздела, который будет содержать много однотипных документов (тикетов). Например, раздел с постами, который будет очень большое количество однотипных постов.
Раздел с тикетами содержит по умолчанию такой код с помощью которого он выводит тикеты, которые в нём расположены:
[[!pdoPage?
  &element=`getTickets`
]]
[[!+page.nav]]
Но например на главной странице вы можете написать код, который будет выводить тикеты из разных разделов. Код вы можете написать сами, для этого не нужно создавать «Разделы с тикетами» просто так.
Sergey Net
Sergey Net
Здравствуйте Александр!
Спасибо большое за вашу статью и вообще ваши труды!
Учитывая что мир IT быстро развивается, хочу спросить — эта статья была написана в 2017, а в 2020 году, делая блог вы бы делали таким же способом? или может уже использовали какие-то другие инструменты?
Александр Мальцев
Александр Мальцев
Здравствуйте! Спасибо за отзыв! Да, технологии быстро развиваются и MODX, конечно, не поспевает за их развитием, тем более что активных разработчиков, двигающих эту систему не сильно много. Да, есть на PHP системы, быстро следующие за изменениями технологий, например, Laravel, Slim. Но их применение для разработки блогов или других проектов, потребует гораздо больших усилий, времени и мастерства. Не знаю, насколько будет оправданным их применение в этом случае. На мой взгляд такие системы, как Laravel – это просто другая область использования. Например, когда вам нужно создать уникальный проект. И его выполнить на MODX будет более сложно, чем на Laravel. Тут всё зависит от задачи.

MODX, конечно, развивается более медленно, чем PHP фреймворки, т.к. MODX – это всё-таки CMS. Но со временем и на MODX появятся эти новшества. А так сами решайте, что использовать MODX или что-то другое. Если MODX нравится и подходит под задачу, то не вижу смысла его не использовать.
Дмитрий
Дмитрий
Скажите, как можно вывести комментарии с постраничной навигацией (как на форумах), просто на странице может быть под 1000 комментариев и получится очень длинная страница.
Пока на странице выводятcя комментарии TicketComments хотелось бы их переделать.
Есть у Вас идеи?
Nik
Nik
Хочу поделиться как можно сделать постраничную навигацию в Tickets, на ajax (без перезагрузки страницы).
Примерно так —
Информация собрана по частям, из разных мест, и приведена в единое целое. Протестирована мной на тестовом сайте. К сожалению пока пример в работе показать не могу, поскольку тестовый сайт на локальном веб сервере. Могу заверить — все работает.
Итак, прописываем сниппет pdoPage в нужном нам месте, где будут комментарии, примерно таким образом:

<section class="comments">                  
<div id="pdopage">                     
<div class="rows">                    
[[!pdoPage?                        
&element=`TicketComments`                         
&action=`comments`                         
&limit=`5`                         
&parents=`0`                         
&formBefore=`0`                         
&sortby=`{"createdon":"DESC"}`                                              
&ajaxMode=`default`                        
&nestedChunkPrefix=`tickets_`
                         &tplComments=`tpl.Tickets.comment.wrapper.my`
                         &tplCommentForm=`tpl.Tickets.comment.form.my`
                         &tplCommentAuth=`tpl.Tickets.comment.one.auth.my`
                         &tplCommentGuest=`tpl.Tickets.comment.one.guest.my`                      
]]                      
</div>                      
[[!+page.nav]]                      
</div>                       
</section>
Чанки с окончанием .my, это копии чанков, переделанных под себя, у вас свое соответственно.
Еще, комменты у меня без древовидной структуры, я их убрал. То есть кнопочки ответить нету, только «написать комментарий», меня так устраивает.
Теперь нюансы. Параметр &formBefore у меня в ноль, не знаю кому как лучше, но последний отвеченный комментарий на первой странице и вверху, плюс из блока «Последние комментарии» всегда направляет именно к последнему комментарию. При значении единица такого не происходит.
Параметр &sortby у меня работает именно с createdon, с publishedon не работает.
Обязательный параметр &nestedChunkPrefix=`tickets_` — Префикс для «быстрых плейсхолдеров», без него у меня не работал рейтинг, кнопочки + и — отображались, но не нажимались, то есть рейтинг не подгружался как положено.
&ajaxMode ставим в `default`, кому надо кнопку «показать еще», то «button» (для буттон другая история).
Далее.
Прописываем этот скрипт на странице где у вас будут комменты, я прописал в футере.

<script>
pdoPage.callbacks['before'] = function(config) {};
pdoPage.callbacks['after'] = function(config) {};
</script>
Без этого скрипта у меня страница подпрыгивала до самого верху, при переходе например, со страницы 1, на страницу 2. С ним все остается на месте.
Следующий шаг.
Переходим в раздел сниппеты и создаем там новый сниппет CountComments:

<?php
$thread = $modx->getObject('TicketThread', array('resource' => $modx->resource->get("id")));
if (empty($toPlaceholder)) {
return $thread->get('comments');
} else {
$modx->toPlaceholder($toPlaceholder,$thread->get('comments'));
}
Далее.
Открываем чанк tpl.Tickets.comment.wrapper (у меня он с окончанием .my)
и прописываем там где будет выводиться слово комментарии и общее количество:

[[!CountComments? &toPlaceholder=`countComments`]]   
<h3 class="title" style="font-size: 105%; color: #112e39" ><i class="fa fa-comments" style="color:#0099FF" aria-hidden="true"></i> [[%comments]] ([[+countComments]])</h3>
То есть вместо total, ставим плейсхолдер countComments, и убираем обертку .
Для чего? Допустим, у вас на странице 41 комментарий, limit вы установили в 5 комментов, без этого общее количество комментариев у вас будет показываться 5, хотя их всего 41. То есть будет выводиться не общее количество комментариев, а сколько их на странице.

С countComments показывается общее кол-во.
В pdoPage есть параметр &totalVar, где указывается имя плейсхолдера для сохранения общего количества результатов, с ним я не работал не знаю.
Вроде бы все, ничего не упустил.
Nik
Nik
Дополню пока вспомнил, в описании немного ошибся, проблема не в &formBefore, а в сортировке по «ASC», тогда из последних комментариев перекидывало просто на страницу, а не на последний коммент.
Nik
Nik
И еще одно важное замечание! Это сортировка! При такой схеме как я указал выше, постраничная навигация будет, но она будет «по китайски». Как идет сортировка на обычном форуме

Последний оставленный коммент, на последней странице, самый первый на первой странице — вверху.
В этой же сортировке, просто переверните стрелочку наоборот по горизонтали.
Вообще компонент tickets изначально — это двухуровневая система овтетов, и как сделать чтобы она правильно сортировалась я так и не понял, а очень хотелось бы. С тикет больше подойдет не постраничная навигация, а как в соц.сетях, с кнопкой «показать еще». (там тоже свои доработки нужны). Но опять же, с кнопкой показать еще тоже не совсем удобно (мне например). И если простыня в тысячу комментариев, то допустим мне удобней когда постраничная.
Кстати для обычных комментов, можете присмотреться к компоненту easyComm, кому надо.
Хотя тикетс по функционалу мне больше нравится
Александр Мальцев
Александр Мальцев
Привет! Очень интересное решение, особенно для сайтов, где на одной страницы очень большое количество комментариев. Но, тут ещё по крайней мере нужно продумать момент, чтобы исключить дублирование контента на сайте (для поисковых систем), особенно если это комментарии к статье.
Nik
Nik
Доброго дня Александр! Давно хотел у вас спросить (если не секрет), а почему вы убрали кнопку «показать еще» на своем сайте? Насколько я понял она была, но возможно меня тогда еще здесь не было. У вас в статье «Форма обратной связи для сайта с отправкой на почту» 649 комментов и получается очень длинно…
Возможно в этой кнопке есть какая-то недоработка? Просто интересно
Nik
Nik
Не заметил такой кнопки и постраничной навигации и на modx.pro, только на modx.com — Community, используется scroll
Александр Мальцев
Александр Мальцев
Привет! Кнопка работает отлично. Первый момент из-за чего её убрал связан с тем, что так сложнее найти материал. Так можно нажать на Ctrl+F, ввести необходимую фразу, и перейти к местам где она встречается. Второй из-за того что к нему нельзя будет перейти по ссылке. Если есть ссылка на комментарий, то как к нему перейти, если он не отображается на странице. Третий момент связан с индексированием комментариев поисковыми системами. Если это сделать, то тогда нужно что-то придумывать чтобы поисковые роботы их как-то индексировали. В четвёртых как мне кажется не всегда удобно постоянно нажимать на кнопку «Показать ещё».
Александр Мальцев
Александр Мальцев
По моим ощущениям в большинстве случаев это связано с неудобством использования кнопки для определённых сценариев, например, таких как комментарии, ленты новостей и т.д. Чтобы перейти к следующим записям нужно будет постоянно нажимать на кнопку «Показать ещё». В дополнение пользователь не знает на какой он странице. Если потом опять нужно будет перейти к этому месту, то пользователю потребуется много раз нажимать на эту кнопку. Что не есть хорошо.

Скролл – это что-то среднее между постраничной навигацией и кнопкой «Показать ещё». Мне, например, удобней просматривать информацию с автоматической подгрузкой нежели постоянно нажимать на кнопку.

Тут всё зависит конечно от предпочтений веб-разработчика и от того, какой он вариант считает что будет более удобный пользователям при навигации по этой информации.
Nik
Nik
Самый важный момент я думаю это индексация поисковиками. И тут приходится выбирать удобство для пользователей или индексация комментов поисковиками. При постраничной навигации происходит ведь тоже самое? А как найти золотую середину, или ее нет, либо то либо другое…
Nik
Nik
Недавно искал ответ на один свой вопрос, как только не вбивал в поисковик запрос, по разному, ни гугл ни яндекс ничего не выдавал близко похожего, пока не перечитал все комментарии, и только в комментариях случайно нашел свой ответ
Александр Мальцев
Александр Мальцев
Если в приоритете индексация комментариев, то их нужно выводить все сразу.

Если комментарии выводить с использованием постраничной навигации, то на всех этих страницах будет повторяться текст статьи. Тут, кроме как исключить эти страницы из индекса, другого пути нет. Для этого нужно будет ко всем этим страницам, кроме первой (где выводятся первые комментарии) добавить следующее:
<meta name="robots" content="noindex, follow">
Если же на странице выводятся не комментарии, а например анонсы статей или товаров, то здесь имеет смысл их не исключать из индексирования, т.к. контент на каждой из них будет разный.
Александр Мальцев
Александр Мальцев
Может поисковая фраза не так точно «звучала», как это было написано в тексте страницы. Или этот контент просто не был виден для поисковых роботов. Или страницу поисковые системы вообще не включили в индекс.
Nik
Nik
То есть убрать дубли, это то про что вы упоминали выше, говоря о постраничной навигации. Спасибо за пояснения!
Александр Мальцев
Александр Мальцев
Пожалуйста!
Владимир
Владимир
Здравствуйте! Сделал все по вашему уроку, все работает, но не получается одно. Если в статью вставить картинку то она видна, но если вставить ссылку на документ, страницу сайта или любой другой файл то ссылка не работает. При наведении показывает путь файла как assets/путь файла. Так именно в Разделе с тикетами, если вставлять ссылки в других страницах, то ссылка правильно отображается имя сайта/assets/путь файла и открывается. Как исправить что бы в разделе с тикетами ссылки нормально открывались?
Владимир
Владимир
Все разобрался, нужно ссылки вручную без использования html редактора вставлять, / не было перед assest
Александр Мальцев
Александр Мальцев
Молодец!
Nickolay
Nickolay
Посмотрел ещё раз в лог — батюшки… [2017-02-19 18:38:53] (ERROR in uri /manager/?a=resource/update&id=6 @ E:\OpenServer\domains\mysite.ru\core\model\modx\modparser.class.php: 1352) Bad link tag `[[~? &scheme=`full` &rememberLastDir=`1` &defaultView=`icons` &unlocked=`1` &theme=`windows10`]]` encountered

Чтобы это значило?
Александр Мальцев
Александр Мальцев
У вас ошибка в теге, с помощью которого вы формируете ссылку. После тильды необходимо указывать id ресурса.
Например, ссылка на ресурс, имеющий id = 7:
[[~7? &scheme=`https`]]
Nickolay
Nickolay
Подтверждаю, блог и тикеты пустые. В логах и фаербаге ошибок нет. Сначала думал, что баг в сборке модикса 2.5.5 эдванс, поставил обычную. Та же песня — уже потряхивает))) В fb инспекторе видно, что выводится голый хэд и бади. Всё это происходит на оупенсервере 5.2.6. Кэш модикса удаляю руками — не помогает.
Евгений
Евгений
Почему то не могу посмотреть посты, опять белый лист и все, пост опубликован. Что я делаю не так?
Александр Мальцев
Александр Мальцев
Здесь необходимо смотреть какая возникает ошибка (например, 500 или какая-то другая). Для этого можно воспользоваться для начала панелью разработчика в браузере, а также посмотрите ошибки в логах сервера и в CMS MODX Revolution.
Аноним
Аноним
Как ты код сниппета выводишь здесь, в теле статьи? Он же интерпретируется модиксом как вызов сниппета и не показывается. или тут движок сайта не modx у тебя?
Александр Мальцев
Александр Мальцев
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, тогда теги [ ] тоже обрабатываться парсером не будут.
Аноним
Аноним
спасибо. но это я уже все разобрал за вчера.
Аноним
Аноним
Александр, подскажи ещё такую вещь. Как сделать с установленным компонентом Тикетс, чтобы ссылки на статьи шли от корня? То есть 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 стоит значение — Нет.
Александр Мальцев
Александр Мальцев
Алексей, tickets по умолчанию при сохранении нового тикета формирует ему URI. В этом случае используется уже он.
Чтобы это отменить:
1. Необходимо, у созданных уже ресурсов снять галочку «Заморозить URI».
2. Чтобы tickets не генерировал его для новых тикетов, открыть вкладку «Настройки раздела» и удалить всё из поля «Формирование URI». После этого сохранить.
Теперь tickets не будет генерировать URI и у тебя будет всё как было :)

P.S. Но это очень плохая практика и так лучше не делать.
Аноним
Аноним
Почему это плохая практика и так лучше не делать?
Мне всегда больше нравились ссылки вида сайт.ру/статья
Я думал что в «Формирование URI» %alias — псевдоним именно статьи, без раздела)
Александр Мальцев
Александр Мальцев
Это лично моё мнение по этому поводу. Для меня это тоже самое, что все файлы сохранять в один каталог. Т.е. получается что нет структуры. Представьте Вы открыли страницу, содержащую информацию о принтере. Прочитали и хотите посмотреть какие ещё есть принтеры. Т.е. как Вам в этом случаи поступить, как создать прозрачную ссылку? Кроме этого, допустим у Вас ещё есть и другие разделы на сайте. Например, страница с пользователями. Как у Вас в этом случае будет выглядеть ссылка? А как же поисковые роботы Яндекса и Google. Как они поймут Вашу структуру. На мой взгляд это удобно только для небольших сайтов, состоящих из 20 страниц и меньше. Тогда ссылки получаются более короткими, да и в структуре тут особо смысла нет.
Если Вам так удобно, то делайте так.
Аноним
Аноним
Понял. Благодарю за ценное мнение.
Можешь ещё подсказать по следующим вопросам.
Как сделать, чтобы содержимое тикета редактировалось редактором MarkItUp? В настройках он стоит, но когда создаю тикет, всё как у тебя на скриншоте. Если в настройках поставить TypoMCE, то он подцепляется. Может его надо как-то отдельно устанавливать. Может даже отдельную статью на эту тему лучше написать)
Как можно сделать, чтобы тикетс использовал мои чанки для шаблонов? Например Я сделал копию tpl.Tickets.list.row, которая называется tpl.Tickets.list.row.my. А то стандартный шаблон, не очень вписывается в дизайн) Как вот сделать, чтобы использовался tpl.Tickets.list.row.my? Или только править стандартный шаблон?
Александр Мальцев
Александр Мальцев
Установка редактора осуществляется в разделе Настройки системы. В нём необходимо найти параметр с именем «Редактор» (ключ which_editor) и выбрать ему в качестве значения необходимый визуальный редактор (например, MarkItUp). Перед этим его конечно необходимо установить в разделе Управление пакетами (Приложения -> Установщик).
Нет, стандартный шаблон лучше не трогать. Делаете копию (например, tpl.Tickets.list.row.my) и указываете её в качестве параметра.
Например, открываете ресурс (раздел с тикетами) -> открываете вкладку Настройка раздела и в содержимом указываете свой чанк:
[[!pdoPage?
  &element=`getTickets`
  &tpl=`tpl.Tickets.list.row.my`
]]
[[!+page.nav]]
Аноним
Аноним
Лучи добра очередной раз!)
В настройках-то стоит редактор markitUp!.. Но его же в репозиториях нет. Я устанавливал локально, стоит версия markitUp! 0.0.5, скачанная отсюда. Но тикетс почему то не подгружает его.
В описании компонента тикест же написано:
Удобный редактор MarkItUp для тикетов и комментариев.
Я думал он уже в состав входит. В описании ссылка на редактор вот эта, там и версия свежее, но как его установить в MODX, Я так и не понял и нигде не нашёл.
Буду дико рад, если поможешь это осуществить)
Александр Мальцев
Александр Мальцев
Алексей, я им не пользуюсь. Да и разбираться в чужом коде не хочется. Попробуй написать автору компонента на гитхаб про это.
Аноним
Аноним
Понял) Подскажи откуда ты столько знаешь про MODX? Посоветуй что почитать, хочу так же хорошо разбираться)
Александр Мальцев
Александр Мальцев
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! даже и не снился.
Аноним
Аноним
Я понимаю о чём ты говоришь) У меня был сайт на Джумле, как раз переделываю его на Модэкс. Но возникают трудности, не всегда мне просто по документации понятно, как это сделать)
Вот снова вопрос возник. Смотрю у меня в коде контента вместо тега p стоит br. Посмотрел у тебя в коде всё в порядке. Понял, что это дело рук Jevix. Нагуглил как через набор параметров убрать br и добавить p. Я так понимаю ты тоже самое делал?
Но вот в чём проблема. В 2 статьях из 3 всё стало нормально. А в одной почему-то Jevix ставит оба тега в конце абзаца вот так /p br. Куда копать не пойму. Если отключить Jevix, то всё норм. Единственное, что к этой статье есть два моих тестовых комментария. Вот и всё отличие между ними.
Аноним
Аноним
Изменить коммент не могу. В общем, во всех статьях в конце абзаца вставляется тег br. Подскажи как ты у себя это проблему решил? У меня через наборы параметров не получается.
Аноним
Аноним
Разобрался. Может поможет кому-то, надо было парамерт cfgSetAutoBrMode в значение Нет поставить)
Александр Мальцев
Александр Мальцев
Да, это рук Jevix. Он при сохранении комментариев или ticket (т.е. самих ресурсов) производит в них изменения в соответствии с параметрами. Настройка параметров Jevix осуществляется в панели управления. Для этого необходимо нажать на шестерёнку и перейти на страницу Наборы параметров.
Там слева два пункта. Один для комментариев, другой для Ticket. Названия параметров говорят сами за себя:
cfgAllowTagParams — разрешённые параметры тегов,
cfgAllowTags — разрешённые теги,
cfgSetAutoBrMode — заменяет новые строки на br, ну и т.д.

Я как вижу Вы уже сами разобрались во Всём этом. Jevix — это как бы фильтр для того, чтобы пользователи не могли ввести на сайте всё что угодно.
Sergey Net
Sergey Net
Привет Александр!
извини что вопрос не по теме — блог. Но он по теме написанного тобой комментария. Я сейчас только начинаю изучать Modx, и он мне очень нравиться. Нравится вот это чувство полного контроля над кодом.
Но, в наше время в IT сфере все движется с сумасшедшей скоростью. Скажи, как ты думаешь — Modx он успевает за современными тенденциями 2020-го года? Я хочу изучать Modx и дальше, но в то же время не хочу через пол года, изучив его сделав на нем несколько сайтов, не хочу узнать что я в лодке которая идет ко дну, и что Modx уже морально устарел и.т.д. Что ты думаешь по этому поводу? Что бы ты посоветовал?
Я хочу учится создавать все более и более хорошие сайты для клиентов, чтоб это была не пустышка, именно поэтому я перешел с WordPress конструкторов на Modx. Но вот ты, мудро и по дружески скажи — я в правильном направлении двигаюсь?
Александр Мальцев
Александр Мальцев
Привет! MODX конечно же не успевает за современными тенденциями. Но она развивается, хотя и очень медленно. Новые версии выходят. А так конкретных гарантий, что MODX продолжит развиваться через 5 лет конечно нет. Но и причин по которым эта CMS должна прекратить своё развитие тоже не вижу.

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

На мой взгляд нужно ориентироваться на то, нравится ли эта CMS или нет. Т.к. в этом случае вы будете разрабатывать в ней с совсем другим настроем нежели на системе, которая вам не нравится.

На MODX, так и на другой системе можно создать как хороший сайт, так и не очень. Тут всё зависит не от самой системы, а от мастерства её использования.
Виталий
Виталий
Во вкладке «Настройки» выберите из раскрывающего списка «Тип ресурса» значение «Раздел» и нажмите на кнопку «Сохранить».
Версия modx-2.4.2-pl не поддерживает данную функцию а сразу создает тикет.
Подскажите как решить данную проблему?
Александр Мальцев
Александр Мальцев
В версии modx-2.4.2-pl всё тоже самое. Только в последней версии Tickets пункт называется не Раздел, а Раздел с тикетами. Проверьте может Вы просто создаёте Тикет уже в Разделе с тикетами
Аноним
Аноним
Во вкладке «Настройки» выберите из раскрывающего списка «Тип ресурса» значение «Раздел» и нажмите на кнопку «Сохранить».
А как обратно вернуть?
Александр Мальцев
Александр Мальцев
А обратно вернуть не получится. Это необратимый процесс.
Аноним
Аноним
Серьёзно? Неужели разработчики не предусмотрели? А если удалить Tickets?
Александр Мальцев
Александр Мальцев
Ticket — это расширение стандартного modDocument ресурса CMF MODX. На мой взгляд это связано с тем, что когда Вы изменяете тип ресурса на раздел для Вас создаются записи в других таблицах. И простым переключением Вы уже тут не отделаетесь. Это уже другой объект, расширенный modDocument. Чтобы это осуществить, необходимо было бы удалять записи в других таблицах, а также все его дочерние ресурсы (тикеты). А это ответственный шаг и его нельзя сделать обычным переключением.
Для того чтобы это осуществить необходимо (правильное решение): удалить этот ресурс и создать новый (тот, который Вам нужно).
Или если Вы хотите поступить жёстко (при этом данные в других таблицах останутся), то сделайте следующее (неправильное решение, т.е. то, что Вы хотите сделать можно сделать так):
Откройте базу данных MODX (например, с помощью phpmyadmin) -> Откройте таблицу modx_site_content (она содержит все ресурсы) -> Найдите ресурс, который Вам необходимо изменить -> поменяйте у него значение поля class_key на modDocument.
Аноним
Аноним
Понял. Благодарю за разъяснение. Я уже думал на счёт того, чтобы ручками в базе поковыряться) Там ещё, по идее, значение поля properties надо тоже менять)
Я просто хочу сделать как у вас, чтобы было выпадающее меню с разделами. Я правильно понимаю, что для этого нужно создать ресурс Блог (контейнер), в нём, например, ресурсы Автомобили, Кошки, Собаки… И уже из них делать разделы с помощью расширения? Или эти подразделы можно делать с помощью расширения, если сделать основной ресурс Блог разделом?
Александр Мальцев
Александр Мальцев
Да, необходимо сначала будет создать ресурс Блог (контейнер (включенная галочка), тип ресурса: Документ), а в нём уже создать ресурсы Автомобили, Кошки и Собаки… (тип ресурса: Раздел с тикетами). После этого создавать ресурсы (тикеты) уже в этих разделах…
Аноним
Аноним
Лучи добра вам) Весьма подробно объясняете) Хорошо, что нарвался на ваш сайт) А то уже хотел штатными средствами реализовывать такую структуру)
Аноним
Аноним
Александр, просто нет слов. Ваши уроки по содержанию самые доступные из всех, что пришлось нарыть в интернете. В этой серии уроков, как мне видится, есть только одно «но»: Вы пишете о создании блога, но не рассматриваете такой важный, опять же на мой взгляд, аспект, как вставка изображения.
Простыми методами это можно сделать через дополнительное поле, но прошу Вас рассмотреть вариант использования для этих целей бесплатного дополнения Asset Manager, поскольку с его помощью также можно создавать галереи изображений, с привязкой к ресурсу.
Если сможете подсказать как вкладку это компонента сделать видимой в тикетах, буду очень признателен. По-умолчанию она видна только в обычных документах.
Еще раз спасибо за Ваши труды.
Александр Мальцев
Александр Мальцев
Спасибо, Андрей.
Возьму на заметку компонент Asset Manager.
Андрей
Андрей
Разбираюсь по-тихонечку с Asset Manager.
Очень удобно, что галерея привязывается к ресурсу
Чтобы его вкладка виделась в тикетах в админке, в настройках компонента в поле assman.class_keys указать [«Ticket»].
Автор пишет, что обновление компонента не допускают в репозиторий модекс
Поэтому, чтобы исправить баг меню в версии Модекса 2.4.2, нужно из гитхаба автора переписать файл core/components/assman/controllers/BaseController.php. Я на всякий перезалил всю папку с компонентом. Всё работает
Аноним
Аноним
У меня в типах ресурсов в пункте
Во вкладке «Настройки» выберите из раскрывающего списка «Тип ресурса» значение «Раздел» и нажмите на кнопку «Сохранить».
нет значения «Раздел»

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

MODX URI

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

Страница MODX Content Type

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

URL страницы по умолчанию