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

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

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

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

  • Создание особых разделов для тикетов в админке, со своим интерфейсом.
  • Создание тикетов в админке, тоже со своими панелями и табами.
  • Создание страниц с фронтенда.
  • Редактирование страниц с фронтенда, с проверкой прав.
  • Ajax-комментарии.
  • Редактирование / удаление комментариев с админки.
  • Права доступа на добавление страниц в раздел и создание комментариев.
  • Собственное кэширование тикетов.
  • Принудительная фильтрация тикетов при выводе на экран [mask_link href=»https://modstore.pro/packages/content/jevix» target=»_blank»]Jevix[/mask_link].
  • Автоматическая установка и настройка Jevix при инсталляции пакета. 2 набора параметров, раздельно для тикетов и комментариев.
  • Довольно удобный редактор [mask_link href=»http://markitup.jaysalvat.com/home/» target=»_blank»]MarkItUp[/mask_link] для тикетов и комментариев.
  • Почтовые уведомления о комментариях автору тикета, и тем, кому ответили на его комментарий.
  • Вывод последних комментариев и тикетов, с разбивкой по разделам и возможностью кэширования.
  • Все нужные чанки оформления, прописанные параметры у сниппетов, 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, с дополнительными условиями выборки.

*Список может быть расширен общими параметрами [mask_link href=»https://docs.modx.pro/komponentyi/pdotools/obshhie-parametryi» target=»_blank»]pdoTools[/mask_link] так как 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, с дополнительными условиями выборки.

*Список может быть расширен общими параметрами [mask_link href=»https://docs.modx.pro/komponentyi/pdotools/obshhie-parametryi» target=»_blank»]pdoTools[/mask_link] так как 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, с дополнительными условиями выборки.

*Список может быть расширен общими параметрами [mask_link href=»https://docs.modx.pro/komponentyi/pdotools/obshhie-parametryi» target=»_blank»]pdoTools[/mask_link] так как 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
  • Политика бэкэнда — (нет политики)

И сохраняем.

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

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

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

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

Все, теперь можно к примеру разрешать комментирование только авторизованным пользователям, для этого вы можете воспользоваться любым компонентом авторизации, например 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 года!

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

  1. Как сделать премодерацию тикетов администратором? Т.е. тикет не должен публиковаться до его утверждения админом и падать в секцию тикетов с unpublished сотсоянием

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

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Exit mobile version