[Tickets] Версия 1.1.0 beta2 - Тикеты с ТВ

Новая бета-версия Tickets превносит долгожданное обновление процедуры создания новых тикетов.

Полностью переписан сниппет TicketForm, добавлена работа с ТВ и указание разрешенных\обязательных для заполнения полей.
Отправка формы теперь работает через ajax — как и все остальные операции в Tickets, без перезагрузок страницы.

Обязательно нужно просмотреть и обновить вручную чанки tpl.Tickets.form.create и tpl.Tickets.form.update.
Теперь немного подробнее.

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

Как обычно, вызываем на странице [[!TicketForm]], он выводит форму, указанную в параметре tplFormCreate.

Добавилось два новых параметра:
  • &allowedFields — список полей, разрешенных для заполнения пользователем, через запятую.
  • &requiredFields — список обязательных полей, без их заполнения форму отправить нельзя.
Внимание! Поля pagetitle, parent и content являются необходимыми для создания тикета, поэтому их нельзя отключить или сделать необязательными.
Поэтому, когда вы указываете
[[!TicketForm?
	&allowedFields=`longtitle`
]]
это значит, что для заполнения разрешены pagetitle, parent, content и longtitle. То же самое и с requiredFields.

В эти параметры можно указывать имена ТВ, как они есть, без всяких префиксов.
[[!TicketForm?
	&allowedFields=`mytv,special_tv,tvname2`
	&requiredFields=`special_tv`
]]
Тикеты создаются через стандартный процессор MODX, поэтому создание и обновление ТВ параметров максимально приближено к таковому в админке, за двумя исключениями:
  1. Внешний вид инпута для ТВ придётся рисовать самостоятельно. Если в админке у вас селектбокс с вариантами — нужно писать свой сниппет, который выберет и выведет данные в нужном виде.
  2. Вырезаются все @BINDING, чтобы вам не подсунули какую-нить гадость, типа выполнения произвольного кода. Подробности в блоге Евгения.
Лично я ТВ практически не использую, поэтому мог проглядеть какие-то проблемы при работе с ними через Tickets. Если что — пишите, буду исправлять.

Расширение комментариев

Еще одно важное изменение: у комментариев появилось новое JSON поле properties, куда можно сохранять массивы. Это для тех людей, кому стандартных полей маловато.

Как этим пользоваться?
Например, вы хотите добавить в комментарии поле gender — пол комментатора. Добавляете его в форму комментирования, и ловите плагином:
if ($modx->event->name == 'OnBeforeCommentSave') {

	$properties = array(
		'gender' => $modx->stripTags($_POST['gender'])
	);	

	$modx->event->params['TicketComment']->set('properties', $properties);
}
В чанке комментария такие данные выводятся плейсхолдерами [[+properties.ключмассива]]. То есть, у нас выходит [[+properties.gender]].

Надеюсь, принцип ясен.

Другие изменения

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

Функции json_encode() и json_decode() заменены на modX::toJSON() и modX::fromJSON(). Это для тех бедных людей, кто использует тикеты на хостинге без json в php.

Сообщения об ошибках (красные всплывашки в правом верхнем углу) больше не прилипают и пропадают через 5 секунд.

Заключение

В дальнейшем планирую:
1. Создание тикета не только в категории, но и в любом месте сайта — благодаря аккуратному кэшированию и интеграции с Jevix, это очень удобный тип ресурса для текстовых страниц.
2. Настройка isfolder, hidemenu и прочих неизменяемых ныне параметров.
3. Улучшение страниц в менеджере — но тут не ясно, когда, большой объём.

Пакет, как обычно, у нас в репозитории. Тестируем, пишем отзывы.

Следующая заметка
[mSearch2] Версия 0.6.2 - переключение чанков
Предыдущая заметка
[Tickets] Версия 1.1.0 beta - Управление подписками


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

  1. Виталий Князь 27 июля 2013, 16:38 # 0
    Василий, спасибо за долгожданное обновление, но как в форме создания тикета добавить необходимое поле для ввода?

    [[!TicketForm?
    &allowedFields=`period`
    &requiredFields=`period`]]
    
    period — тв-параметр, на странице не отображается, предполагаю что необходимо в шаблоне tpl.Tickets.form.create добавить необходимые поля, но как указать их, примеры укажите?)
    1. Виталий Князь 27 июля 2013, 16:49 # 0
      Все ок, в чанк tpl.Tickets.form.create необходимо добавить input с параметром name и значением название ТВ-параметра.
      В дальнейшем планирую:
      2. Настройка isfolder, hidemenu и прочих неизменяемых ныне параметров.
      Спасибо.
      github.com/bezumkin/Tickets/issues/41
    2. Виталий Батушев 28 июля 2013, 09:22 # 0
      Очень хорошо. Прямо порадовал. Но вот я сразу столкнулся с маленькой бякой.
      Обязательными полями у тебя идут pagetitle, parent и content, однако отсутствует published, который тем не менее присутствует в tpl.Tickets.form.create и tpl.Tickets.form.update. Соответственно, это поле не работает — при создании тикета он не публикуется, при обновлении снимается с публикации с любым положением чекбокса.
      Понятно, что это решается простым добавлением published в allowedFields, но, думаю, маловысокоопытных пользователей это может смутить и даже ввергнуть в депрессию! :)
      1. Василий Наумкин 28 июля 2013, 09:41 # 0
        Насколько я вижу, это прописано в параметре сниппета.

        Видимо, ты успел закачать версию, в которой еще не было этой правки =)
        1. Виталий Батушев 28 июля 2013, 11:58 # 0
          Не, я успел какую надо скачать. Просто я добавил в allowedFields свое поле, соответственно, allowedFields по умолчанию перезаписался, а в сниппете прописаны только три обязательно присутствующих поля. Почему ты в сниппете убрал из этого списка published — непонятно!
          А ведь так поступить, как я, может любой и окажется в ступоре — только что все работало и на тебе.
          1. Василий Наумкин 28 июля 2013, 12:01 # 0
            Далеко не все будут позволять своим пользователям управлять публикацией тикета.

            Тем более, этот процесс я тоже планирую переделать. К финальной версии 1.1.0 разрулим, в общем.
            1. Виталий Батушев 28 июля 2013, 12:08 # 0
              Что ж будем ждать. Картинки (или, может, шире — файлы) прикладывать к тикетам (не к комментариям) только с помощью стороннего колдовства?
              1. Василий Наумкин 28 июля 2013, 12:09 # 0
                Специальное колдовство давно написано и успешно используется.
                1. Виталий Батушев 28 июля 2013, 12:12 # 0
                  А ведь жаль! Боюсь спрашивать — неужели так останется навсегда?!
                  1. Василий Наумкин 28 июля 2013, 12:14 # 0
                    Да, конечно.

                    Tickets — для создания страниц. Uploadify — для загрузки файлов на сайт и я не собираюсь смешивать одно с другим.
                    Если очень хочется, можно вызывать Uploadify сразу под формой с новым тикетом.
      2. Александр Наумов 08 октября 2013, 14:29 # 0
        Ни как не могу подцепить TV поле.
        Как пример создал текстовое поле TV keywords, вызываю:
        [[!TicketForm?
        	&allowedFields=`keywords`
        	&requiredFields=`keywords`
        ]]
        
        Но дополнительное поле для ввода в фронтэнде не появляется.
        Перечитал пост много раз, перепробовал разные варианты — безрезультатно.
        Подскажите, пожалуйста, что еще нужно сделать?
        1. Василий Наумкин 08 октября 2013, 17:03 # 0
          Добавить html код с инпутом в форму?
          1. Александр Наумов 08 октября 2013, 18:33 # 0
            Василий, спасибо!!!
            Что-то не додумался.
        2. Мордынский Николай 22 октября 2013, 11:32 # 0
          Пользователи упорно не хотят заполнять краткое содержание (или использовать тег
          <cut>
          )
          Приходится каждый тикет править.
          Дело в том что посетители разовые и каждому объяснять про то как это нужно заполнять без толку.
          1. Василий Наумкин 22 октября 2013, 11:42 # 0
            Ты можешь добавлять что-то сам, плагином. Или выводить не introtext, а content и обрезать.

            Проблема в том, что вывести это красиво и аккуратно, особенно если внутри есть теги типа pre или code очень трудно. Поэтому я и ввел тег cut, чтобы люди сами указывали, как выводить их тикеты.
            1. Мордынский Николай 22 октября 2013, 11:46 # 0
              где то наталкивался на плагин для автозаполнения introtext
          2. Vitea Kirichenko 23 октября 2013, 19:47 # 0
            Почему то не удаётся скачать Tickets через Package Management.
            может кто то сталкивался подскажет что делать.
            1. Володя 10 февраля 2014, 19:22 # 0
              Василий подскажи а &requiredFields для ТВ должно работать?
              У меня для тв не пашет. Ни при создании тикета, ни при обновлении…
              1. Василий Наумкин 10 февраля 2014, 19:30 # 0
                А ты добавил его в &allowedFields? Или требуешь заполнить неразрешенное поле?
                1. Василий Наумкин 10 февраля 2014, 19:43 # 0
                  Ты прав, была ошибка + нужно было вносить требуемые поля в разрешенные.

                  Поправил и то, и другое — можно обновляться.

                  1. Володя 10 февраля 2014, 19:48 # 0
                    разрешены они были) Сейчас все ок! шустро однако…
                2. Володя 11 февраля 2014, 10:05 # 0
                  Василий, доброе утро!
                  Еще вопрос по работе с тв. вызов формы так
                  [[!TicketForm? 
                  &requiredFields=`parent,pagetitle,content,tv1,tv2`
                  &allowedFields=`parent,pagetitle,content,published,tv1,tv2`
                  &tplFormUpdate=`tpl.Tickets.form.update.my`]]
                  В tplFormUpdate я вывожу селектбокс который набивается значениями из tv3. это значение я соответственно присваиваю tv2. Сохраняю, обновляю форму — смотрю ТВ. tv2 принимает значение из селектбокса, но tv3 скидывается (тип множественный выбор).

                  так вопрос — почему меняется tv3? спасибо…
                  joxi.ru/jL35Uv3JTJCAeaMrxAE
                  1. Пашок 03 марта 2014, 09:47 # 0
                    Это однозначно баг…
                  2. yani 05 мая 2014, 13:40 # 0
                    Добрый день, а у меня возник вопрос такой:
                    Как лучше всего после создания тикета вызывать свой сниппет?
                    Например, я хочу отправлять СМС о создании нового тикета, сохранить некоторые поля в свою таблицу.
                    1. Василий Наумкин 05 мая 2014, 14:57 # 0
                      Плагин на событие OnDocFormSave.
                      1. yani 05 мая 2014, 14:57 # 0
                        Да, спасибо. уже попробовала его) очень удобно. я просто думала он только в Админке с формы отрабатывает
                    Добавление новых комментариев отключено.