MODX Tickets настройки, документация

MODX Tickets настройки, документация MODX Revo

Tickets — довольно интересное и бесплатное дополнение для MODX на котором можно сделать раздел с вопросами-ответами, форму комментариев, блог и много другое.

Основные возможности MODX Tickets

  • Создание особых разделов для тикетов в админке, со своим интерфейсом.
  • Создание тикетов в админке, тоже со своими панелями и табами.
  • Создание страниц с фронтенда.
  • Редактирование страниц с фронтенда, с проверкой прав.
  • Ajax-комментарии.
  • Редактирование / удаление комментариев с админки.
  • Права доступа на добавление страниц в раздел и создание комментариев.
  • Собственное кэширование тикетов.
  • Принудительная фильтрация тикетов при выводе на экран Jevix.
  • Автоматическая установка и настройка Jevix при инсталляции пакета. 2 набора параметров, раздельно для тикетов и комментариев.
  • Довольно удобный редактор MarkItUp для тикетов и комментариев.
  • Почтовые уведомления о комментариях автору тикета, и тем, кому ответили на его комментарий.
  • Вывод последних комментариев и тикетов, с разбивкой по разделам и возможностью кэширования.
  • Все нужные чанки оформления, прописанные параметры у сниппетов, 2 языка — русский и английский.

Установить Tickets можно из репозитория modstore.

Документация по сниппетам

getTickets

Выводит список созданных тикетов. *Сниппет вызывается не кэшированным.

Параметры

Название По умолчанию Описание
&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

Выводит список секций с тикетами. *Сниппет вызывается не кэшированным.

Параметры

Название По умолчанию Описание
&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

Выводит комментарии и форму для комментирования ресурса.

Может использоваться с любым документом 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

Выводит форму для создания тикета пользователем из фронтэнда. *Сниппет вызывается не кэшированным.

Параметры вызова сниппета

Название По умолчанию Описание
&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 Чанк для уведомления админов сайта о новом тикете.
&validate Валидация полей формы по правилам FormIt (используется при наличии установленного компонента FormIt)

Способы вызова

[[!TicketForm?]]

Примеры использования валидатора FormIt

Возможно использование параметра validate по аналогии как он применяется в компоненте FormIt. Компонент FormIt должен быть установлен. Примеры описаны ниже.

Интеграция с FormIt

При наличии установленного компонента FormIt возможно использовать валидацию входных данных по тем же правилам. Компонент FormIt не находится в зависимостях компонента Tickets. При необходимости использования этого функционала Вы должны установить FormIt самостоятельно.

Правила использования

Валидация доступна для сниппетов TicketForm (создание/редактирование тикета), TicketComments (написание комментария). Валидация будет использоваться при указании полей в параметре сниппета validate. Возможно указание собственных валидаторов через параметр customValidators и собственных текстов для ошибки. Все существующие правила валидации FormIt можно найти на официальной странице документации компонента.

Для вывода сообщения об ошибке в одном div-е с проверяемый полем должен находится элемент **** для вывода ошибки

    <div class="form-group">
        <label for="ticket-pagetitle">[[%ticket_pagetitle]]</label>
        <input type="text" class="form-control" placeholder="[[%ticket_pagetitle]]" name="pagetitle" value=""
               maxlength="50" id="ticket-pagetitle"/>
        <span class="error"></span>
    </div>

Либо элемент может находиться в произвольной месте HTML-разметки с уникальным id вида имя_поля-error

    <span class="error" id="content-error"></span>
Примеры использования
  • Использование пользовательского валидатора для цензурирования

Создаётся сниппет с именем mycensore

<?php
    $success = !preg_match_all('~(путин|трамп|розенбаум)~ui',$value,$match);
    if (!$success) {
        $validator->addError($key,'В тексте заявки обнаружены непотребные слова');
    }
    return (bool)$success;

Сниппет TicketForm вызывается с параметрами. В чанке tpl.myTicket для формы добавлены например собственные поля date, email, username, которые также валидируются стандартными правилами из FormIt.

{'!TicketForm' | snippet: [
    'customValidators'=>'mycensore',
    'validate'=>'date:required:isDate=^%m/%d/%Y^,
        email:email:required,
        username:required:islowercase,
        pagetitle:required:contains=^Hello^,
        content:minLength=^50^:mycensore',
    'content.vTextMinLength' => 'Содержимое заявки должно быть не короче 50 знаков',
    'tplFormCreate'=>'tpl.myTicket'
]}
  • Цензурирование пользовательских комментариев
{'!TicketComments' | snippet: [
    'allowGuest' => 1,
    'autoPublishGuest' => 0,
    'customValidators'=>'mycensore',
    'validate'=>'text:minLength=^20^:mycensore',
    'text.vTextMinLength' => 'Комментарий должен быть не короче 20 знаков',
]}

TicketLatest

Выводит ленту последних созданных и\или прокомментированных тикетов.

*Сниппет вызывается не кэшированным.

Параметры

Название По умолчанию Описание
&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

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

Параметры вызова сниппета

Название По умолчанию Описание
&getSection 1 Сделать дополнительный запрос в БД для получения родительской секции?
&getUser 1 Сделать дополнительный запрос в БД для получения профиля автора?
&tpl tpl.Tickets.meta Чанк оформления информации о тикете.

Примеры вызова

  • Стандартный вызов сниппета
[[!TicketMeta?]]
  • Что бы посмотреть все доступные стандартные плейсхолдеры
[[!TicketMeta? &tpl=``]]

subscribeAuthor

Выводит форму подписки на автора. Подписка доступна только для авторизованных пользователей.

Параметры

Название По умолчанию Описание
&createdby 0 Обязательный параметр, ID автора (user), на которого будет осуществляться подписка через форму
&tpl tpl.Tickets.author.subscribe Чанк с формой подписки
&TicketsInit 0 Параметр использовать со значением «1» для подключения формы подписки и инциализации frontend-скриптов Tickets на произвольных страницах сайта (например, карточка автора, личный кабинет и т.п.).

Примеры

  • Вызов сниппета для каждого элемента в списке тикетов, например в чанке tpl.Tickets.list.row
[[!subscribeAuthor? &createdby=`[[!+createdby]]`]]
  • Вызов сниппета в карточке автора (в которой ID юзера передан в переменную +author.id )
[[!subscribeAuthor? &createdby=`[[!+author.id]]` &TicketsInit=`1`]]

Документация по интерфейсу

Создание раздела с Тикетами

Компонент Tickets поставляется без демо-данных и без шаблонов. Поэтому вам нужно предварительно их создать. Также секция тикетов и сам тикет — это расширенный стандартный «modDocument», поэтому имеет все те же TV-поля, плейсхолдеры и логику работы.

Для начала работы с компонентом Tickets необходимо создать раздел с тикетами. В корне дерева документов или папке с любой вложенностью с помощью контекстного меню необходимо выбрать Создать -> Раздел с тикетами

Создание раздела с тикетами

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

Настройки секции тикетов

Основные настройки раздела

В поле содержимое прописываем стандартный вывод тикетов, предварительно отключив html-редактор.

[[!pdoPage?
    &element=`getTickets`
]]
[[!+page.nav]]

Внимание, у вас должен быть установлен компонент PdoTools.

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

Шаблон дочерних документов нужно предварительно создать (можно пока пустой — позже откорректируем) и указываем его. В формировании URL я обычно ставлю просто %alias. Также часто отключаю Jevix и включаю выполнение тегов MODX (если создаем все не на fenom).

Управление комментариями

Управление комментариями

После создания секции с тикетами у вас появится возможность создавать сами тикеты. Для этого просто нужно нажать на Создать тикет

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

Создание тикета

Тикет это расширенный modDocument ресурса modx При создании тикета окно экрана имеет визуально 4 категории настроек.

  • Основные настройки информации (Заголовок, Расширенный заголовок, Описание, Аннотация (введение), Содержимое);
  • Настройки Meta информации (Опубликован, Дата публикации, Дата отмены публикации, Шаблон, Автор, Родительский ресурс, Псевдоним);
  • Системные настройки (Доступен для поиска, Кэшируемый, Опубликован Использовать HTML-редактор, Контейнер, Заморозить URI, Отключить Jevix, Выполнять теги MODX, Закрытый тикет, Не показывать в меню, Показывать в дереве);
  • Вкладка с управлением комментариями от текущего тикета;

Источник: официальная документация tickets.

Настройка прав пользователей для Tickets

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

Создание группы пользователя

Шестеренка -> Контроль доступа -> Новая группа пользователей

  • Название — Member
  • Политика бэкэнда — (нет политики)

И сохраняем.

Создание группы member

Настройка прав доступа

После сохранения данная группа появиться слева, нажимаем по ней ПКМ и выбираем редактировать.

Редактировать группу member

На вкладке Права доступа — Доступ к контекстам, нажмите Добавить контекст

  • Контекст — Web
  • Минимальная роль — Member — 9999
  • Политика доступа — TicketUserPolicy

Добавляем контекст в группу member

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

MODX Tickets запрет заполнения introtext

По умолчанию компонент Tickets дублирует поле content в introtext. Сегодня небольшой лайфак, от том как запретить Tickets заполнять поле introtext. Для этого необходимо написать не большой плагин, пусть он будет называться no-introtext, со следующим содержимым:

<?php
if ($modx->event->name == "OnDocFormSave") {
	if ($resource->class_key != 'Ticket') return;
	$introtext = $resource->get('introtext');
	$content = $resource->getContent();
	$generateIntrotext = $resource->getIntroText($resource->get('content'), false);
	if (empty($resource->getProperty('disable_jevix'))) {
		$generateIntrotext = $resource->Jevix($generateIntrotext);
	}
	if ($introtext == $generateIntrotext || $introtext == $content) {
	    $resource->set('introtext', '');
	    $resource->save();
	}
}

И вешаем плагину событие OnDocFormSave

Это решение подходит для тех кто в настройках секции отключает Jevix для дочерних тикетов.

Если вы используете Jevix, тогда код плагина будет таким:

<?php
if ($modx->event->name == "OnDocFormSave") {
	if ($resource->class_key != 'Ticket') return;
	$introtext = $resource->get('introtext');
	$generateIntrotext = $resource->getIntroText($resource->get('content'), false);
	if (empty($resource->getProperty('disable_jevix'))) {
		$generateIntrotext = $resource->Jevix($generateIntrotext);
	}
	if ($introtext == $generateIntrotext) {
	    $resource->set('introtext', '');
	    $resource->save();
	}
}

В следующем уроке разберем как сделать MODX блог при помощи Tickets.

Поделиться с друзьями
Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

Оцените автора
( 2 оценки, среднее 5 из 5 )
Web-Revenue.ru
Добавить комментарий

  1. Денис

    Здравствуйте, вывел форму комментариев к каждому товару в чанке msProductContent, все вроде нормально, но если пройти по разным товарам (не оставляя отзыв) то в разделе
    Тикеты >> Ветви комментариев>> тикет
    появляются записи посещенныс страниц товаров — вот такие:
    ( resource-693 | 24.12.23 16:38 | 0 | Капот Haval F7 1 | OEM-номер: 8402117XKQ00A )
    помоему я что то сделал не так, подскажите пожалуйста как поправить

    Ответить
    1. Алексей автор

      Здравствуйте. Скорее всего просто записывает просмотры

      Ответить
      1. Денис

        Благодарю вас за ответ, то есть это нормально и можно не париться, а базу не будет раздувать, если каждый клиент просматривает от 1 до 10 товаров?

        Ответить
        1. Алексей автор

          Скорее всего будет — но я такой проблемы у себя не помню) На текущий момент у меня почти все сайты на ванильном JS и из-за этого tickets я давненько не использую

          Ответить
  2. Аноним

    Почему то в modx 3 при вызове сниппета выдает 500 ошибку, сниппет с частичными ошибками устанавливается, кто нибудь проверял работоспособность на 3 modx ?

    Ответить
    1. Голягин Алексей

      На сколько я знаю тикетс не адаптирован под modx 3 (сам не тестил конкретно его), как и многие другие компоненты, например minishop. Fenom (PdoTools) как то не полноценно в 3 modx работает. Лично мое мнение рано еще сайты на MODX 3 делать)

      Ответить
  3. SHER

    При вызове снипета TicketsComments страница выводить ошибку 500 в чем причина

    Ответить
    1. Голягин Алексей

      Как минимум вызов закройте «]]» для начала.

      Ответить
  4. Евгений Карпов

    test comment

    Ответить
  5. Илья

    Как правильно запретить использовать в комментарии теги форматирования текста, и загрузку картинки и кода. Просто убрать из htlm верстки это не вариант…

    Ответить
    1. Алексей автор

      Отключите системную настройку: tickets.enable_editor — нет — будет обычное окно без редактора, тегов и т.д.

      Ответить