Компонент Tickets в MODX для реализации комментариев и отзывов
Есть замечательный компонент для CMS MODX Revolution — «Tickets». Написал его наш соотечественник «bezumkin», за что ему большой респект. Компонент может быть использован как альтернатива «Quip», для комментирования статей. Точное его описание и видео с быстрым стартом вы можете найти на официальной страничке компонента.
Опишу некоторые моменты установки и настройки компонента Tickets для использования комментирования статей. Создание тикетов при помощи компонента опущу.
1. Устанавливаем «Tickets».
Оставлять комментарии при помощи «Tickets» могут только зарегистрированные пользователи которые находятся в группе с определенными правами.
- В меню заходим «Безопасность > Контроль доступа».
- Создаем новую группу. Задаем ей имя (например «Users»). Политика бэкенда — «TicketUserPolicy».
- После создания группы переходим к её редактированию (ПКМ>Редактировать).
- Открываем вкладку — «Доступ к контекстам»
- Редактируем контекст web (ПКМ > Редактировать)
- Устанавливаем политику доступа — «TicketUserPolicy»
Группу создали, права дали. Дальше необходимо этих пользователей откуда-то взять. У меня на сайте отсутствовала регистрация и напрягать ей пользователей я не хотел, поэтому воспользовался компонентом «Loginza».
3. Устанавливаем компонент Loginza и вызываем его в нужном месте:
[[!Loginza? &groups=`Users`]]Теперь пользователи, которые будут авторизоваться на вашем сайте через социальные сети при первом входе автоматически регистрируются в группе «Users» и получают возможность оставлять комментарии.
4. Добавляем в шаблон статей сниппет комментирования:
[[!TicketComments]]
Сниппет можно использовать без параметров, но лучше ознакомиться с ними, а так же с используемыми чанками.
Параметры сниппета TicketComments
thread — имя ветки комментариев.
по умолчанию recource-[[*id]]
fastMode — если включено, в чанк результата будут подставлены только значения из БД. Все необработанные теги MODX, такие как фильтры, вызов сниппетов и другие — будут вырезаны.
по умолчанию Да (Нет)
gravatarIcon — если аватарка пользователя не найдена грузить эту картинку на замену.
по умолчанию mm
gravatarSize — размер загружаемого аватара.
gravatarUrl — адрес для загрузки аватаров.
по умолчанию http://www.gravatar.com/avatar/
tplCommentForm — чанк для формы добавления нового комментария.
по умолчанию tpl.Tickets.comment.form
tplCommentAuth — чанк комментария для показа авторизованному пользователю.
по умолчанию tpl.Tickets.comment.one.auth
tplCommentGuest — чанк комментария для показа гостям.
по умолчанию tpl.Tickets.comment.one.guest
tplCommentDeleted — чанк удаленного комментария.
по умолчанию tpl.Tickets.comment.one.deleted
tplComments — обертка для всех комментариев страницы.
по умолчанию tpl.Tickets.comment.wrapper
tplLoginToComment — чанк с требованием авторизоваться.
по умолчанию tpl.Tickets.comment.login
tplCommentEmailOwner — чанк для уведомления владельца тикета о новом комментарии.
tplCommentEmailReplay — чанк для уведомления пользователя о том, что на его комментарий появился ответ.
по умолчанию tpl.Tickets.comment.email.replay
autoPublish — автоматически публиковать все новые комментарии, без премодерации.
по умолчанию Да (Нет)
formBefore — расположить форму комментирования перед комментариями.
по умолчанию Нет (Да)
depth — Целое число, для указания максимальной глубины ветки комментариев.
по умолчанию 0
5. Подстраиваем под себя чанки
Я редактировал только 2 чанка — «tpl.Tickets.comment.one.auth» и «tpl.Tickets.comment.one.guest», которые отвечают за показ комментариев авторизованному пользователю и не авторизованному.
Некоторое время я потратил на то, чтобы понять как отображать аватар пользователя, выполнившего вход через социальную сеть. По умолчанию компонент искал аватарку пользователя с сайта «www.gravatar.com» и, не находя её там, подставлял серенького человечка. Решение оказалось простым — в вышеприведенных чанках достаточно изменить плейсхолдер «[[+avatar]]» на «[[+photo]]»
После этого всё встало на свои места и осталось только радоваться работе компонента Tickets.
Про другие варианты создания комментариев в MODX Revolution можете почитать здесь: Комментарии в MODX Revolution. Quip и его альтернативы.
С недавнего времени в компоненте появилась возможность комментирования без авторизации. Для этого в последней версии компонента следует указать параметр «allowGuest» равным 1.
[[!TicketComments? &allowGuest=`1`]]
MODX Revo — Настройка прав пользователей для Tickets.
MODX RevoАвтор Алексей На чтение 1 мин. Опубликовано
Последнее изменение поста: 24 октября 2018 в 10:35
Для того чтобы компонент Tickets правильно функционировал и его можно было использовать по полной, необходимо что бы все авторизованные пользователи находились в общей группе со специальными правами.
Создание группы пользователя
Шестеренка -> Контроль доступа -> Новая группа пользователей
- Название — Member
- Политика бэкэнда — (нет политики)
И сохраняем.
Настройка прав доступа
После сохранения данная группа появиться слева, нажимаем по ней ПКМ и выбираем редактировать.
На вкладке Права доступа — Доступ к контекстам, нажмите Добавить контекст
- Контекст — Web
- Минимальная роль — Member — 9999
- Политика доступа — TicketUserPolicy
Все, теперь можно к примеру разрешать комментирование только авторизованным пользователям, для этого вы можете воспользоваться любым компонентом авторизации, например HybridAuth.
Tickets / Пользователи / Дополнения MODX / modstore.pro
Версия 1.11.2-plДата выпуска 19.09.2019
Просмотры 29 384
Внимание, этот компонент требует версию PHP
Внимание, этот компонент требует версию MODX не ниже 2.3 !
Основные возможности MODX Tickets
- Создание особых разделов для тикетов в админке, со своим интерфейсом.
- Создание тикетов в админке, тоже со своими панелями и табами.
- Создание страниц с фронтенда.
- Редактирование страниц с фронтенда, с проверкой прав.
- Чумовые ajax-комментарии.
- Редактирование\удаление комментариев с админки.
- Права доступа на добавление страниц в раздел и создание комментариев.
- Собственное кэширование тикетов.
- Принудительная фильтрация тикетов при выводе на экран Jevix.
- Автоматическая установка и настройка Jevix при инсталляции пакета. 2 набора параметров, раздельно для тикетов и комментариев.
- Удобный редактор MarkItUp для тикетов и комментариев.
- Почтовые уведомления о комментариях автору тикета, и тем, кому ответили на его комментарий.
- Вывод последних комментариев и тикетов, с разбивкой по разделам и возможностью кэширования.
- Все нужные чанки оформления, прописанные параметры у сниппетов, 2 языка — русский и английский.
&allowGuest | 0 | Включить возможность комментирования для неавторизованных пользователей? |
&allowGuestEdit | 1 | Разрешать неавторизованным пользователям редактировать свои комментарии? |
&allowGuestEmails | 0 | Отправлять гостям почтовые уведомления об ответах? |
&autoPublish | 1 | Автоматически публиковать все новые комментарии, без премодерации. |
&autoPublishGuest | 1 | Автоматически публиковать все новые комментарии неавторизованных пользователей, без премодерации. |
&depth | 0 | Целое число, для указания максимальной глубины ветки комментариев. |
&enableCaptcha | 1 | Включить защиту от спама для неавторизованных пользователей? |
&fastMode | 1 | Если включено — в чанк результата будут подставлены только значения из БД. Все необработанные теги MODX, такие как фильтры, вызов сниппетов и другие — будут вырезаны. |
&formBefore | 0 | Расположить форму комментирования перед комментариями. По умолчанию — нет. |
&toPlaceholder | Не выводить результат работы сниппета, а поместить в плейсхолдер toPlaceholder | |
&separatePlaceholder | 0 | При параметре 1 вывести форму и комментарии в плейсхолдеры toPlaceholder_form, toPlaceholder_thread. |
&gravatarIcon | mm | Если аватарка пользователя не найдена, грузить эту картинку на замену. |
&gravatarSize | 24 | Размер загружаемого аватара |
&gravatarUrl | http://www.gravatar.com/avatar/ | Адрес для загрузки аватаров |
&maxCaptcha | 10 | Максимальное число для генерации кода защиты от спама. |
&minCaptcha | 1 | Минимальное число для генерации кода защиты от спама. |
&thread | Имя ветки комментариев. По умолчанию, «resource-[[*id]]». | |
&tplCommentAuth | tpl.Tickets.comment.one.auth | Чанк комментария для показа авторизованному пользователю. |
&tplCommentDeleted | tpl.Tickets.comment.one.deleted | Чанк удалённого комментария. |
&tplCommentEmailBcc | tpl.Tickets.comment.email.bcc | Чанк для уведомления админов сайта о новом комментарии. |
&tplCommentEmailOwner | tpl.Tickets.comment.email.owner | Чанк для уведомления владельца тикета о новом комментарии. |
&tplCommentEmailReply | tpl.Tickets.comment.email.reply | Чанк для уведомления пользователя о том, что на его комментарий появился ответ. |
&tplCommentEmailSubscription | tpl.Tickets.comment.email.subscription | Чанк для уведомления подписанного пользователя, что в теме появился новый комментарий. |
&tplCommentForm | tpl.Tickets.comment.form | Чанк для формы добавления нового комментария. |
&tplCommentFormGuest | tpl.Tickets.comment.form.guest | Чанк для формы добавления нового комментария гостям. |
&tplCommentGuest | tpl.Tickets.comment.one.guest | Чанк комментария для показа гостям. |
&tplComments | tpl.Tickets.comment.wrapper | Чанк обертка для всех комментариев страницы. |
&tplLoginToComment | tpl.Tickets.comment.login | Чанк с требованием авторизоваться. |
Создание блога на MODX Revo при помощи Tickets
Автор Алексей На чтение 5 мин. Опубликовано
Последнее изменение поста: 22 октября 2018 в 20:38
Для того чтобы создать полноценный блог на MODX нам как минимум понадобятся следующие пакеты: PdoTools, Tickets, DateAgo и hybridauth (последнее не обязательно, но желательно чтобы комментировать могли только авторизованные пользователи), установите их если они еще не установлены, так же рекомендую установить основные пакеты.
Создание ресурсов блога
Перед тем как создавать ресурсы, нам нужно подготовить 2 шаблона, 1й для категорий, 2й для записей, про работу с шаблонами писал здесь, углубляться в верстку не буду.
Буду считать что 2 шаблона вы подготовили.
Создание раздела блога и постов
Открываем вкладку «Ресурсы» (находится в левой панели), щелкаем по «Website» правой кнопкой мыши (или папке с любой вложенностью) и выбираем Создать -> Раздел с тикетами и заполняем поля: как минимум Заголовок (например блог) и Шаблон (для категории) и переходим в Настройки.
Во вкладке Основные, убираем галку Использовать HTML-редактор.
На вкладке Дочерние тикеты: указываем шаблон для тикетов, в Формирование URI указываем %alias и сохраняем, так же рекомендую отключить jelyx и разрешить выполнение тегов (если с фронт энда пользователи ни могут не чего писать).
Снова идем в настройки раздела — основные и вставляем вот такую базовую конструкцию (HTML редактор должен быть отключен)
[[!pdoPage? &element=`getTickets`]] [[!+page.nav]]
и сохраняем.
Создание нескольких статей в блоге
Открываем созданный ранее раздел — «Блог» и выполняем следующее действия:
На вкладке «Раздел», нажимаем на кнопку «Создать тикет» чтобы создать стать;
Заполняете все основные поля и опубликуйте
Точно таким же образом создайте еще пару статей
Далее если вы сделали шаблоны правильно, то перейдя на на страницу блога увидите
Выводиться все содержимое и это не есть хорошо, давайте это исправим, для этого сделаем копию чанка tpl.Tickets.list.row и назовем ее tpl.Tickets.list.row.custom, откроем его допишем к значению [[+introtext]] модификатор эллипсис :
[[+introtext:ellipsis=`330`]]
Он будет обрезать текст, так же к примеру здесь используется шрифт глипсон которого у меня нет, поэтому я перепишу его под фонт авесоме, в итоге у меня получилось:
<div> <h4><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h4> <div> [[+introtext:ellipsis=`330`]]<br/> <a href="[[~[[+id]]]]">[[%ticket_read_more]]</a> </div> <div data-id="[[+id]]"> <span> <i></i> [[+date_ago]] </span> <span> <i></i> [[+fullname]] </span> <span><i></i> <a href="[[~[[+section.id]]]]">[[+section.pagetitle]]</a></span> <span> <span>[[+stared]][[+unstared]] <span >[[+stars]]</span></span> <i></i> [[+views]] <i></i> [[+comments]] [[+new_comments]] </span> <span> <span title="[[%ticket_like]]"><i></i></span> [[+can_vote]][[+cant_vote]] <span title="[[%ticket_dislike]]"><i></i> </span> </div> </div> <!--tickets_can_vote <span title="[[%ticket_refrain]]"><i></i></span>--> <!--tickets_cant_vote <span title="[[%ticket_rating_total]] [[+rating_total]]: ↑[[+rating_plus]] [[%ticket_rating_and]] ↓[[+rating_minus]]">[[+rating]]</span>--> <!--tickets_new_comments <span>+[[+new_comments]]</span>--> <!--tickets_active active--> <!--tickets_inactive inactive--> <!--tickets_voted_plus voted--> <!--tickets_voted_minus voted--> <!--tickets_rating_positive positive--> <!--tickets_rating_negative negative--> <!--tickets_can_star active--> <!--tickets_stared <i></i>--> <!--tickets_unstared <i></i>-->
Теперь укажем в выводе новый чанк
[[!pdoPage? &element=`getTickets`&tpl=`tpl.Tickets.list.row.custom`]] [[!+page.nav]]
После сохранения получим.
Уже норм, а если перейти на статью
Пока не очень красиво все (если вы используете стандартный bootstrap3 шаблон, будут иконки по умолчанию), но в следующих уроках мы это исправим. И начнем пожалуй с вывода мета информации о статье внутри нее.
Tickets. Комментарии и публикации из фронт энда
Отредактировано: 24 Декабря 2018
Tickets — компонент включающий в себя функционал комментариев, возможность голосовать за страницу и комментарии, возможность добавления страниц из фронт-энда и некоторые другие функции.
Для того, чтобы пользователи могли оставлять записи или комментарии, они должны обладать соответствующими правами. При установке, Tickets создает следующие политики доступа:
- TicketSectionPolicy — разрешение для создания новых тикетов в разделе;
- TicketUserPolicy — разрешение на управление возможностями Tickets, добавление, удаление, чтение и т.п.;
- TicketVipPolicy — тоже самое что TicketUserPolicy, но с воможностью просматривать приватные Тикеты.
Сам компонент состоит из нескольких сниппетов, каждый из которых отвечает за определенные действия.
Публикация из фронт-энда
[[!TicketForm?
&allowedFields=`parent,pagetitle,content,published,image`
&requiredFields=`parent,pagetitle,content`
&tplFormCreate=`shareForm`
&redirectUnpublished=`31`
]]
Ресурсы Tickets находятся в той же таблице SQL что и остальные ресурсы — prefix_site_content. Несмотря на то, что в админке нет возможности сделать из тикета обычный ресурс, это можно сделать с помощью SQL запросов.
Показ пользователю опубликованных им же ресурсов
[[!getTickets?
&user=`[[!+modx.user.id]]`
&showUnpublished=`1`
&parents=`21`
&includeTVs=`tags,image,slider,year,view,like`
&tpl=`getArticle`
]]
Вставка файлов в Tickets — плейсхолдер [[+files]]
Можно добавлять файлы при помощи
Файлы загружаются сразу при добавлении и сохраняются в таблицу TicketFile.
Параметры сниппета TicketForm для испоьзования файлов:
- allowFiles — Разрешить загрузку файлов? Если да — то подключится загрузчик и нужные скрипты.
- source — Источник медиа-файлов, в который будут сохранены изображения. По умолчанию берется системны настройка tickets.source_default, в которую прописывается источник Tickets Files.
- tplFiles — Чанк-обертка всего блока работы с файлами. Загружчик, список файлов и прогрессбар.
- tplFile — Чанк оформление файла, который не является изображением.
- tplImage — Чанк офомрления картинок.
Выводом файлов занимается снипет TicketMeta, но также можно использовать pdoResources, добавив к вызову параметры &class=`TicketFile` &sortby=`createdon`
&sortdir=`ASC`. Если не указать сортировку, сниппет попытается сортировать по колонке publishedon, которая у TicketFile отсутствует.
Голосование и прочее meta
[[!TicketMeta]]
TicketMeta позволяет голосовать, сохранять ресурсы в избранное,
Избранное сохраняется в таблицу TicketStar, где пишется имя класса (Ticket или TicketComment), id объекта, id его автора и дата.
Добавление\удаление избранного работает через процессоры, которые требуют прав: ticket_star и comment_star.
Параметры сниппета TicketMeta для вывода файлов:
- getFiles — Выводить список загруженных файлов?
- tplFile — Чанк оформления сслыки на файл.
- unusedFiles — Выводить только файлы, неиспользованные в контенте документа.
Обертка для вывода файлов прописана в чанке tpl.Tickets.meta, в быстром плейсхолдере has_files.
Комментарии
Построение дерева комментариев
[[!TicketComments]]
Для вывода списка комментариев
[[getComments]]
Параметры сниппета getComments
- parents — выбор родительского раздела комментариев;
- resources — выбор родительского ресурса комментариев;
- threads — выбор ветки;
- comments — id комментариев.
Избранное
Для вывода избранных тикетов можно использовать:
[[!pdoPage?
&element=`getTickets`
&sortby=`{"star_createdon":"DESC"}`
&groupby=`star_id HAVING star_id IS NOT NULL AND star_user = [[!+modx.user.id]]`
]]
Для вывода избранных тикетов и комментариев можно использовать:
[[getStars]]
- class — указывается Ticket или TicketComment.
Выберет id избранного и передаст в getTickets или getComments. Если не указан параметр &user, то будет показано избранное текущего пользователя.
Документации
getTickets
getTickets
03 мая 2019, 07:00
Выводит список созданных тикетов. *Сниппет вызывается не кэшированным.
Параметры
Название | По умолчанию | Описание |
---|---|---|
&depth | 10 | Глубина поиска ресурсов от каждого родителя. |
&fastMode | 0 | Если включено — в чанк результата будут подставлены только значения из БД. Все необработанные теги MODX, такие как фильтры, вызов сниппетов и другие — будут вырезаны. |
&includeContent | 0 | Выбирать поле «content» у ресурсов. |
&includeTVs | Список ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры [[+action]] и [[+time]] . | |
&limit | 10 | Лимит выборки результатов |
&offset | 0 | Пропуск результатов с начала выборки |
&outputSeparator | Необязательная строка для разделения результатов работы. | |
&parents | Список категорий, через запятую, для поиска результатов. По умолчанию выборка ограничена текущим родителем. Если поставить 0 — выборка не ограничивается. | |
&resources | Список ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с минуса, этот ресурс исключается из выборки. | |
**&showDeleted | 0 | Показывать удалённые ресурсы. |
&showHidden | 1 | Показывать ресурсы, скрытые в меню. |
&showLog | 0 | Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекте «mgr». |
&showUnpublished | 0 | Показывать неопубликованные ресурсы. |
&sortby | createdon | Сортировка выборки. |
&sortdir | DESC | Направление сортировки |
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. | |
&tpl | tpl.Tickets.list.row | Чанк оформления для каждого результата |
&tvPrefix | Префикс для ТВ плейсхолдеров, например «tv.». По умолчанию параметр пуст. | |
&user | Выбрать только элементы, созданные этим пользователем. | |
&where | Строка, закодированная в JSON, с дополнительными условиями выборки. |
*Список может быть расширен общими параметрами pdoTools так как Tickets работает на этой библиотеке.
Примеры
Стандартный вызов.
[[!pdoPage?
&element=`getTickets`
]]
[[!+page.nav]]
getTicketsSections
getTicketsSections
03 мая 2019, 07:00
Выводит список секций с тикетами. *Сниппет вызывается не кэшированным.
Параметры
Название | По умолчанию | Описание |
---|---|---|
&depth | 0 | Глубина поиска ресурсов от каждого родителя. |
&fastMode | 0 | Если включено — в чанк результата будут подставлены только значения из БД. Все необработанные теги MODX, такие как фильтры, вызов сниппетов и другие — будут вырезаны. |
&includeContent | 0 | Выбирать поле «content» у ресурсов. |
&includeTVs | Список ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры [[+action]] и [[+time]]. | |
&limit | 10 | Лимит выборки результатов |
&offset | 0 | Пропуск результатов с начала выборки |
&outputSeparator | Необязательная строка для разделения результатов работы. | |
&parents | Список категорий, через запятую, для поиска результатов. По умолчанию выборка ограничена текущим родителем. Если поставить 0 — выборка не ограничивается. | |
&resources | Список ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с минуса, этот ресурс исключается из выборки. | |
&showDeleted | 0 | Показывать удалённые ресурсы. |
&showHidden | 0 | Показывать ресурсы, скрытые в меню. |
&showLog | 0 | Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекте «mgr». |
&showUnpublished | 0 | Показывать неопубликованные ресурсы. |
&sortby | views | Сортировка выборки. |
&sortdir | DESC | Направление сортировки |
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. | |
&tpl | tpl.Tickets.sections.row | Чанк оформления для каждого результата |
&tvPrefix | Префикс для ТВ плейсхолдеров, например «tv.». По умолчанию параметр пуст. | |
&where | Строка, закодированная в JSON, с дополнительными условиями выборки. |
*Список может быть расширен общими параметрами pdoTools так как Tickets работает на этой библиотеке.
Примеры
Простой вызов.
[[!getTicketsSections?]]
TicketComments
TicketComments
24 августа 2019, 07:00
Выводит комментарии и форму для ко мментирования ресурса. *Может использоваться с любым документом MODX *Сниппет вызывается не кэшированным.
Параметры вызова сниппета
Название | По умолчанию | Описание |
---|---|---|
&allowGuest | 0 | Включить возможность комментирования для неавторизованных пользователей? |
&allowGuestEdit | 1 | Разрешать неавторизованным пользователям редактировать свои комментарии? |
&allowGuestEmails | 0 | Отправлять гостям почтовые уведомления об ответах? |
&autoPublish | 1 | Автоматически публиковать все новые комментарии, без премодерации. |
&autoPublishGuest | 1 | Автоматически публиковать все новые комментарии неавторизованных пользователей, без премодерации. |
&depth | 0 | Целое число, для указания максимальной глубины ветки комментариев. |
&enableCaptcha | 1 | Включить защиту от спама для неавторизованных пользователей? |
&fastMode | 1 | Если включено — в чанк результата будут подставлены только значения из БД. Все необработанные теги MODX, такие как фильтры, вызов сниппетов и другие — будут вырезаны. |
&formBefore | 0 | Расположить форму комментирования перед комментариями. По умолчанию — нет. |
&toPlaceholder | Не выводить результат работы сниппета, а поместить в плейсхолдер toPlaceholder | |
&separatePlaceholder | 0 | При параметре 1 вывести форму и комментарии в плейсхолдеры toPlaceholder_form, toPlaceholder_thread. |
&gravatarIcon | mm | Если аватарка пользователя не найдена, грузить эту картинку на замену. |
&gravatarSize | 24 | Размер загружаемого аватара |
&gravatarUrl | http://www.gravatar.com/avatar/ | Адрес для загрузки аватаров |
&maxCaptcha | 10 | Максимальное число для генерации кода защиты от спама. |
&minCaptcha | 1 | Минимальное число для генерации кода защиты от спама. |
&thread | Имя ветки комментариев. По умолчанию, «resource-[[*id]]». | |
&tplCommentAuth | tpl.Tickets.comment.one.auth | Чанк комментария для показа авторизованному пользователю. |
&tplCommentDeleted | tpl.Tickets.comment.one.deleted | Чанк удалённого комментария. |
&tplCommentEmailBcc | tpl.Tickets.comment.email.bcc | Чанк для уведомления админов сайта о новом комментарии. |
&tplCommentEmailOwner | tpl.Tickets.comment.email.owner | Чанк для уведомления владельца тикета о новом комментарии. |
&tplCommentEmailReply | tpl.Tickets.comment.email.reply | Чанк для уведомления пользователя о том, что на его комментарий появился ответ. |
&tplCommentEmailSubscription | tpl.Tickets.comment.email.subscription | Чанк для уведомления подписанного пользователя, что в теме появился новый комментарий. |
&tplCommentForm | tpl.Tickets.comment.form | Чанк для формы добавления нового комментария. |
&tplCommentFormGuest | tpl.Tickets.comment.form.guest | Чанк для формы добавления нового комментария гостям. |
&tplCommentGuest | tpl.Tickets.comment.one.guest | Чанк комментария для показа гостям. |
&tplComments | tpl.Tickets.comment.wrapper | Чанк обертка для всех комментариев страницы. |
&tplLoginToComment | tpl.Tickets.comment.login | Чанк с требованием авторизоваться. |
Примеры
- Стандартный вызов сниппета
[[!TicketComments?]]
- Вызов сниппета с комментариями для не авторизированных
[[!TicketComments? &allowGuest=`1`]]
TicketForm
TicketForm
24 августа 2019, 07:00
Выводит форму для создания тикета пользователем из фронтэнда. *Сниппет вызывается не кэшированным.
Параметры вызова сниппета
Название | По умолчанию | Описание |
---|---|---|
&allowedFields | parent,pagetitle,content,published | Поля тикета, которые разрешено заполнять пользователю. Можно указывать имена ТВ параметров. |
&context | Список контекстов для поиска секций, через запятую. | |
&parents | По умолчанию выводятся все доступные разделы тикетов, но вы можете ограничить их, указав конкретных родителей через запятую. Указав через знак минус «-» можно исключить родителя | |
&resources | Можно точечно через запятую указать конкретные разделы, доступные в списке или исключить их через знак минус «-» в комбинации с параметром parents | |
&permissions | section_add_children | Проверка прав на публикацию в раздел. По умолачанию проверяется разрешение «section_add_children». |
&tid | Этот параметр дает возможность вызывать через сниппет редактирование конкретного тикета без использования url-параметра $_REQUEST[‘tid’] . | |
&redirectUnpublished | 0 | Вы можете указать, на какой документ отправлять пользователя при создании неопубликованного тикета. |
&redirectDeleted | 0 | Вы можете указать, на какой документ отправлять пользователя при удалении тикета. |
&redirectUnDeleted | 0 | Вы можете указать, на какой документ отправлять пользователя при восстановлении тикета. |
&requiredFields | parent,pagetitle,content | Обязательные поля тикета, которые пользователь должен заполнить для отправки формы. |
&sortby | pagetitle | Поле для сортировки списка разделов. |
&sortdir | ASC | Направление сортировки списка разделов. |
&tplFormCreate | tpl.Tickets.form.create | Чанк для создания нового тикета |
&tplFormUpdate | tpl.Tickets.form.update | Чанк для обновления существующего тикета |
&tplPreview | tpl.Tickets.form.preview | Чанк для предпросмотра тикета перед публикацией |
&tplSectionRow | @INLINE <option value="[[+id]]" [[+selected]]>[[+pagetitle]]</option> | Чанк для оформления раздела вопросов в форме |
&tplTicketEmailBcc | tpl.Tickets.ticket.email.bcc | Чанк для уведомления админов сайта о новом тикете. |
Способы вызова
[[!TicketForm?]]
TicketLatest
TicketLatest
03 мая 2019, 07:00
Выводит ленту последних созданных и\или прокомментированных тикетов.
*Сниппет вызывается не кэшированным.
Параметры
Название | По умолчанию | Описание |
---|---|---|
&action | Comments | Режим работы сниппета. Доступно Comments или Tickets |
&cacheKey | Имя кэша сниппета. Если пустое — кэширование результатов будет отключено. | |
&cacheTime | 1800 | Время кэширования. |
&depth | 10 | Глубина поиска ресурсов от каждого родителя. |
&fastMode | 0 | Если включено — в чанк результата будут подставлены только значения из БД. Все необработанные теги MODX, такие как фильтры, вызов сниппетов и другие — будут вырезаны. |
&includeContent | 0 | Выбирать поле контент у ресурсов. |
&includeTVs | Список ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры [[+action]] и [[+time]] . | |
&limit | 10 | Лимит выборки результатов |
&offset | 0 | Пропуск результатов с начала выборки |
&outputSeparator | Необязательная строка для разделения результатов работы. | |
&parents | Список категорий, через запятую, для поиска результатов. По умолчанию выборка ограничена текущим родителем. Если поставить 0 — выборка не ограничивается. | |
&resources | Список ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с минуса, этот ресурс исключается из выборки. | |
&showDeleted | 0 | Показывать удалённые ресурсы. |
&showHidden | 1 | Показывать ресурсы, скрытые в меню. |
&showLog | 0 | Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекте «mgr». |
&showUnpublished | 0 | Показывать неопубликованные ресурсы. |
&sortby | createdon | Сортировка выборки. |
&sortdir | DESC | Направление сортировки. |
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. | |
&tpl | tpl.Tickets.comment.latest | Чанк оформления для каждого результата |
&tvPrefix | Префикс для ТВ плейсхолдеров, например «tv.». По умолчанию параметр пуст. | |
&user | Выбрать только элементы, созданные этим пользователем. | |
&where | Строка, закодированная в JSON, с дополнительными условиями выборки. |
*Список может быть расширен общими параметрами pdoTools так как Tickets работает на этой библиотеке.
Примеры
- Вывод последних тикетов
[[!TicketLatest? &limit=`5` &fastMode=`1` &action=`tickets` &tpl=`tpl.Tickets.ticket.latest`]]
- Вывод последних комментариев
[[!TicketLatest? &limit=`5` &fastMode=`1` &action=`comments` &tpl=`tpl.Tickets.comment.latest`]]
TicketMeta
TicketMeta
03 мая 2019, 07:00
Выводит информацию о текущем тикете, так же позволяет голосовать за тикет на его собственной странице. С версии 1.4.0 Сниппет может использоваться с любыми ресурсами MODX
Параметры вызова сниппета
Название | По умолчанию | Описание |
---|---|---|
&getSection | 1 | Сделать дополнительный запрос в БД для получения родительской секции? |
&getUser | 1 | Сделать дополнительный запрос в БД для получения профиля автора? |
&tpl | tpl.Tickets.meta | Чанк оформления информации о тикете. |
Примеры вызова
- Стандартный вызов сниппета
[[!TicketMeta?]]
- Что бы посмотреть все доступные стандартные плейсхолдеры
[[!TicketMeta? &tpl=``]]
Настраиваем вывод Tickets | Зона MODX
По-умолчанию, в Tickets разрешены не все HTML теги. Из-за чего тикеты и комментарии могут выводится не так как хотелось бы. Чтобы это исправить, давайте разберёмся, как это работает.
Для фильтрации контента Tickets использует Jevix.
Это замечательная система фильтрации и типографирования, разработанная в Тематических Медиа для собственных проектов (в частности Хабрахабр), которая позволяет решить вопрос с фильтраций контента. Она поможет образумить криворукого менеджера или злого скрипт-кидди, распихивающего везде XSS.
При установке Tikets автоматически загружается и Jevix. Найти его можно в сниппетах в дереве элементов. Именно этот сниппет и используется Tickets для обработки тикетов и комментариев. И вот тут главная тонкость. У сниппета Jevix есть 3 набора параметров — по-умолчанию, Ticket и Comment. Именно тут обычно и возникают вопросы по настройке.
Можно указать Tickets не использовать Jevix. Для этого на странице редактирования тикета нужно отметить чекбокс «Отключить Jevix». Но я не советю этого делать, если тикеты добавляют пользователи.
Чтобы изменить отображение тикетов, нужно редактировать набор Ticket. Для комментариев — Comment. В параметре cfgAllowTags
указаны все разрешённые теги. Изначально в нём нет тега div. Поэтому, если вы введёте в тикете что-то типа <div>Мой блок с информацией</div>
, то на странице вы получите только текст «Мой блок с информацией». Тег div будет вырезан.
Чтобы этого избежать, нужно в параметр cfgAllowTags
добавить тег div. Теперь текст выведется в блоке, но без нужного оформления. Это потому, что класс у блока не появился. И если вы попробуете добавить другие аттрибуты блоку, например, id или title, то обнаружите, что и они не появляются. Это легко исправить. Для этого нужно разрешить аттрибуты у разрешённых тегов.
Используем параметр cfgAllowTagParams
. Это строка в JSON формате. Добавляем в него параметры id и class для тега div
"div":["id","class"]
Обновляем страницу с тикетом и видим, что блок с нашей информацией отображается как нужно. Аналогично делаем правки и для комментариев в наборе параметров «Comment» (если нужно конечно).
Кроме того, в параметре cfgAllowTagParams
можно не только указать аттрибуты элемента, но и значения этих аттрибутов. Например, для класс блока div мы разрешаем только значения «container»,«article»,«aside»:
"div":{"class":["container","article","aside"]}
А можно вместо названий указать модификаторы:
- #int — можно указывать только цифры.
- #text — любые символы.
- #link — проверка на соответствие url.
- #image — путь до файла.
В заключение
Jevix не только фильтрует контент и вырезает запрещённые теги, но и выполняет функции типографа. Поэтому его можно использовать отдельно от Tickets для обработки любого контента.
[[Jevix? &input=`[[*content]]` ]]
В данном случае Jevix использует параметры по-умолчанию. Но их можно переопределить при вызове сниппета.
[[Jevix? &input=`[[*user_tv]]` &cfgAllowTags=`b,a,img` &cfgSetAutoLinkMode=`1` ]]0 6099