[Tickets] Версия 1.4.0-beta - Настройки секции

Новая большая бета Tickets с серьёзными изменениями. Сначала планировалось только исправить старые ошибки, но в итоге вышла глубинная переделка логики создания и обновления тикетов.

Главная новость: у секций тикетов появились собственные настройки, которые влияют на дочерние документы:
Теперь вы можете указать шаблон, схему формирования uri и некоторые значения по умолчанию.

Соответственно, изменились и системные настройки:
  • Настройки умолчаний переехали из системных в секцию:
    tickets.disable_jevix_default — отключить Jevix
    tickets.process_tags_default — включить обработку тегов MODX
    tickets.ticket_show_in_tree_default — показывать тикет в дереве ресурсов
  • Удалена настройка tickets.ticket_hidemenu_force, теперь вы можете указать значение по умолчанию в настройках секции, но оно не будет переопределять значение потомка. То есть, у созданного тикета будет заранее проставлена (или нет) галочка, но вы можете её изменить.
  • Удалена tickets.ticket_isfolder_force — теперь в ней нет надобности, так как вы сами указываете формирование URI, а значит, можете указать и косую в окончании адреса.
  • Удалены tickets.ticket_id_as_alias и tickets.section_id_as_alias. Первая настройка была нужна для формирования URI, которым вы теперь управляете вручную, а вторая существовала просто за компанию. Вряд ли у кто-то будет обзывать секции по id, а если сильно хочется — это можно сделать плагином.
Когда я пишу, что настройки удалены — это значит, что они не будут созданы по умолчанию на новых установках. На старых сайтах ничего не должно сломаться при обновлении, компонент даже использует старые настройки для умолчанию в секциях.

Формирование URI тикета

Эта новая мега настройка позволяет вам задать правила для uri дочерних тикетов. Работает она просто: в поле uri прописывается полный адрес, и ставится флажок uri_override, чтобы его использовать.

Вам доступны следующие переменные в схеме:
  • %id — идентификатор тикета
  • %alias — псевдоним, который был указан или сгенерирован из pagetitle
  • %ext — расширение типа документа, указанное в настройках MODX. По умолчанию — .html.
  • %y — год даты публикации тикета
  • %m — месяц
  • %d — день
Для формирования uri дата сначала берется из pub_date, если там пусто — то из publishedon, а потом уже из createdon — если документ не публикуется.
В принципе, вы можете теперь указывать адреса как у Articles — %y/%m/%d/%alias/, но я не советую этого делать. Почему?

Очень просто: тикеты могут переносится из одной секции в другую и менять URI. Если вы хотите, чтобы при этой смене ваши посетители не получали 404, а редиректились на новый адрес автоматически, нужно использовать такие схемы:
  • %id/ — tickets/15/ — формат uri на моём сайте.
  • %id-%alias%ext — tickets/15-myticket.html — по умолчанию для новых установок.
  • %y-%m-%d-%alias-%id — tickets/14-03-17-myticket-15 — для извращенцев =)
В общем, не должно быть типа вложенных директорий (то есть косых /) и должен быть указан %id. При этом у всех секций должна быть одинаковая схема URI, тогда при переносе документа, плагин Tickets возьмет схему от старой секции, вычленит из неё id тикета, сгененериует новый адрес и отправит пользователя на него.

Кстати говоря, вот случаи, когда URI тикета будет автоматичеки перегениерирован:
  • Изменение поля parent, то есть — перенос тикета в другую секцию
  • Изменение alias тикета. Если в схеме нет %alias, то изменения адреса не будет. Изменение названия тикета на фронтенде не меняет существующий uri.
  • Снятие с публикации тикета отключает uri и uri_override. А публикация генерирует uri заново.
  • При пустом uri и активированном uri_override, uri будет также сгенерирован заново.
Эти случаи прописаны прямо в метод Ticket::save(), поэтому будет работать даже при сортировке тикетов в админке.
Перетянули документ в другого родителя — адрес изменился. Указана правильная схема с %id — юзер будет отправлен на новый адрес.

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

Переписаны процессоры создания и обновления Тикетов, чтобы слушаться новых настроек.

У объектов Ticket и TicketsSection можно использовать метод getProperties, для получения настроек чекции и тикета. Если это новый объект и у него еще нет сохранённых настроек — вернутся «по умолчанию», которые и будут сохранены.

[#74] Исправлена работа панели тикета в новых версиях MODX и Firefox. Убраны кнопки «Опубликовать» и «Снять с публикации» — вместо них стандартный чекбокс. Это сделано для того, чтобы при изменении статуса документа автоматически менялся и uri. Если тикет снимается с публикации, то uri сразу прячется и наоборот.

[#72] Исправлена ошибка с затиранием ТВшек. Теперь при обновлении тикета с фронтенда получаются все его ТВ и добавляются в запрос.

[#64] Отключение у тикета обработки полей сниппетом Jevix влияет и на introtext.

Небольшие исправления в сниппетах: где есть вывод количества комментариев, они считаются с учетом закрытых веток, а в TicketMeta выводятся все плейсхолдеры тикета.

Заключение

Изменений очень много и они весьма серьёзные. Поэтому версия beta и работоспособность не гарантируется совсем. Переписан весь процесс создани тикета, генерации адреса и назначения его свойств, так что обновление может привнести каки-то уязвимости или проблемы.

В общем, нужно протестировать, и желательно не на рабочих сайтах — у нас есть test.modx.pro. В репозитории сейчас лежит последняя стабильная 1.3.0 и новая 1.4.0. Сначала ставится 1.3, а потом вы можете обновиться — по желанию.

Жду ваших отзывов и замечаний.

Следующая заметка
[Tickets] Версия 1.4.0-beta4 - Загрузка файлов
Предыдущая заметка
[msDiscount] 1.0.2-pl Сниппет «Успей купить»


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

  1. Чикин Артур 17 марта 2014, 10:54 # +1
    %y-%m-%d-%alias-%id — tickets/14-03-17-myticket-15 — для извращенцев =)
    Я бы так не сказал, читал документацию по сниппетам Yandex так там сказано что дату создания документа он определяет из url страницы.
    1. Василий Наумкин 17 марта 2014, 10:58 # +1
      Это не делает такой адрес красивым.

      На вкус и цвет — возможность теперь есть.
      1. Чикин Артур 17 марта 2014, 11:07 # 0
        Я к тому что не все извращенцы по своей воле:)
    2. winZrar 17 марта 2014, 20:43 # 0
      Установил на тестовый сайт и вот такая фигня:

      В uri тикета прописывается pagetitle категории а не alias. В чём может быть проблема?
      1. Чикин Артур 17 марта 2014, 20:46 # 0
        В этом пути ты можешь прописать все что душе угодно. Не могу понять в чем проблема?!
        1. winZrar 17 марта 2014, 21:03 # 0
          Я прекрасно понимаю что могу прописать что угодно. Просто установил tickets 1.4.0-beta, врубил чпу, создал раздел тикетов, в нем тикет. Получил картину описанную выше. Получается что uri генерируется не верный вместо
          категория/article.html
          должно быть
          category/article.html
          Вот доступ к сайту:
          Панель управления	http://s5364.test.modx.pro/manager/
          Логин: s5364
          Пароль: SZWw739qRUlk
          Попробуй создай в категории новый тикет, у него в uri вместо alias-a категории будет pagetitle.
          Я интересуюсь как по умолчанию генерировать верный адрес
          category/article.html
          1. Чикин Артур 17 марта 2014, 21:17 # 0
            А у меня все нормально отработало.

            Хотя нет. При публикации тикета тут же встала проблема.
            1. Василий Наумкин 17 марта 2014, 21:31 # +1
              Заморозил uri категории — стало хорошо.

              Если разморозить, то опять «категория». Буду разбираться, спасибо!
        2. Саша Друмс 18 марта 2014, 00:01 # 0
          Заметил на версии Tickets 1.3.0. (после обновления на 1.4.0 проблема не исчезла), что в самом тикете не работает «Дата публикации» ([[*pub_date]]). Т.е. если поставить дату публикации, то по наступлении нужного времени галочка на Опубликовано не ставится и, следовательно, тикет остается не опубликованным. Пробовал как с изначально поставленной галочкой Опубликовано, так и без нее.

          В обычных ресурсах все работает. В разделах тикетов тоже все ок.
          1. Василий Наумкин 18 марта 2014, 08:39 # 0
            Никогда не проверял и не разбирался, как это работает.

            Если нужно — github.com/bezumkin/Tickets/issues/new
            1. Саша Друмс 18 марта 2014, 10:47 # 0
              Добавил.
              Просто наличие такой функции сбивает с толку: вроде как можно поставить дату публикации, но она не работает.

              Посмотрел как работает в обычном ресурсе: если поставлен чекбокс, что ресурс опубликован и назначена дата публикации, то после сохранения чекбокс опубликовано убирается, и в нужное время (в момент публикации) автоматически добавляется. В тикете чекбокс опубликовано не убирается после добавления даты публикации, а если чекбокс изначально не стоял, то он и не появится в нужное время.

              В общем не знаю, смог ли донести суть, тут нужно просто попробовать воспроизвести проблему.
              1. Саша Друмс 21 марта 2014, 23:34 # 0
                Заметил, что ты сделал фикс этой проблемы, вот только не учел один момент: в момент наступления времени публикации должен чиститься кеш сайта, иначе ресурс будет не опубликован до того момента, пока не будет очищен кеш каким-либо образом.
                1. Василий Наумкин 22 марта 2014, 07:05 # 0
                  Как я могу это учесть?

                  Тут вопросы к MODX, а не ко мне.
                  1. Саша Друмс 22 марта 2014, 11:54 # 0
                    Я это к тому, что в обычных ресурсах на сайте кеш очищается во время публикации по расписанию.
                    Смысл ставить публикацию на тикет в 10:00 если он может опубликоваться только через неделю, если никто не очистит кеш.

                    Ты уж извини, я в этом не разбираюсь, просто пишу баг репорты. Этой функцией, как я понимаю, вообще мало кто пользуется, так что можно оставить и так, как есть сейчас.
            2. Виталий Князь 18 марта 2014, 00:22 # +1
              Василий, ты бог в MODX! :D
              1. Василий Наумкин 18 марта 2014, 08:39 # 0
                Да перестань.
              2. Давид Мовсесян 18 марта 2014, 11:49 # 0
                отловил баг, создаю секцию тикетов, сохраняю и больше не могу зайти в нее, белый лист

                [2014-03-18 10:13:48] (ERROR @ /manager/index.php) Error 23000 executing statement:
                INSERT INTO `modx_register_messages` (`topic`, `id`, `created`, `valid`, `accesses`, `expires`, `payload`, `kill`) VALUES (1, 'a8baa56554f96369ab93e4f3bb068c22', '2014-03-18 10:13:48', '2014-03-18 10:13:48', 0, 1395123588, 'if (time() > 1395123588) return null;\nreturn 1;\n', 0)
                Array
                (
                [0] => 23000
                [1] => 1062
                [2] => Duplicate entry '1-a8baa56554f96369ab93e4f3bb068c22' for key 'PRIMARY'
                )

                [2014-03-18 10:13:48] (ERROR @ /manager/index.php) Could not send message to queue 1, topic /resource/. Message payload is Array
                (
                [a8baa56554f96369ab93e4f3bb068c22] => 1
                )
                1. Дмитрий Куликов 18 марта 2014, 15:19 # 0
                  Как я понял для данного обновления необходима версия php 5.5.1. У меня на php 5.4.4 компонент не работает, так как вызывается функция boolval(), которая тогда ещё не поддерживалась.
                  1. Василий Наумкин 18 марта 2014, 15:48 # +1
                    Исправлено, обновись на beta1.
                    1. Давид Мовсесян 18 марта 2014, 19:57 # +1
                      Нечеловеческое спасибо Вам!
                      1. Дмитрий Куликов 20 марта 2014, 10:15 # 0
                        Большое спасибо! Пока полёт нормальный
                    2. Дарья Брандина 19 марта 2014, 18:22 # 0
                      Василий, извините за настойчивость, я уже написала, но не там, где нужно…
                      В Tickets 1.4.0 beta1 внутри разделов у меня не отображаются тикеты на сайте.
                      При создании нового раздела в нем автоматически подставляется вызов сниппета getTickets
                      [[!pdoPage? &element=`getTickets`]] [[!+page.nav]]
                      Если сделать этот же вызов из шаблона раздела, то тикеты отображаются, а если со страницы-раздела (как по умолчанию должно быть) — то нет. Это только у меня глюк или нет? Искать у себя проблему или ждать обновления? :)
                      1. Василий Наумкин 19 марта 2014, 19:01 # 0
                        У меня такой проблемы нет и больше никто не писал.

                        Так что, скорее-всего, дело не в обновлении. Попробуй вызвать другой сниппет в контенте секции — он будет работать?
                        1. Чикин Артур 19 марта 2014, 19:48 # 0
                          Может в шаблоне нету [[*content]] или ошибка в этом слове?
                          1. Дарья Брандина 19 марта 2014, 20:48 # +1
                            Как это ни глупо, да. Спасибо, я на этот не скоро бы внимание обратила)
                        2. Дарья Брандина 22 марта 2014, 13:01 # 0
                          Василий, добрый день! У меня вопрос на счет html-разметки в чанках Tickets. Привязана ли работа скриптов к css-классам? Т.е. если я заменю классы на свои, чтобы подключить свои стили (к примеру, class=«form-actions» внутри формы изменю на свой class=«group-control»), может ли это повлиять на работу сниппетов? Если да, то во многих ли местах это встречается (если во многих, то я тогда вообще не стану изменять классы, а просто допишу стили к вашим), — или может быть есть строго определенные два-три места, где структуру html и классы изменять нельзя, а в остальных местах можно менять это свободно?
                          1. Дарья Брандина 22 марта 2014, 13:26 # 0
                            Это важно понять, чтобы потом вас не дергать по поводу того, что у меня что-то «сломалось».
                            1. Василий Наумкин 22 марта 2014, 13:49 # 0
                              Сниппеты никак не завязаны на html, с ним работает только родной javascript.

                              Можно отключить родной default.css, добавить свои классы и написать любой внешний вид для комментариев.
                              1. Дарья Брандина 22 марта 2014, 14:03 # 0
                                Поняла.
                                И если можно, еще такой вопрос. При обновлении версии Tickets предлагается выбрать, какие чанки перезаписать. Вот меня всегда после такой процедуры мучает вопрос, что именно и в каких именно чанках поменялось… Я обычно копирую чанки, переименовываю их, и уже в переименованных делаю какие-то свои изменения/дополнения. Так вот когда я обновляюсь, возникает желание сравнить свои переименованные чанки с оригиналами на предмет наличия каких-то существенных изменений (допустим, какой-то плейсхолдер теперь по другому назвывается и старый работать больше не будет).

                                Иными словами, как понять, есть ли существенные изменения и где именно? Обязательно ли перезаписывать каждый раз при обновлении чанки?
                                1. Чикин Артур 22 марта 2014, 17:32 # 0
                                  Тут только читать анонс обновления нужно. И вдумчиво обновлять. Можно так же попросить Василия что бы он в ченджлоге крупными буквами писал что обновились чанки.
                                  1. Дарья Брандина 22 марта 2014, 17:44 # 0
                                    Да, это было бы неплохо.
                                  2. Василий Наумкин 22 марта 2014, 19:35 # 0
                                    В репозитории github все прекрасно видно. github.com/bezumkin/Tickets/commits/master
                              2. Den 24 марта 2014, 21:09 # 0
                                А как отключить
                                Формирование URI тикета
                                1. Василий Наумкин 24 марта 2014, 21:20 # 0
                                  Просто очисти поле.
                                  1. Den 24 марта 2014, 21:38 # 0
                                    очистка или убирание чек бокса не помогает. После сохранения Заморозить URI снова выбрано.
                                2. Антон Соловьёв 22 апреля 2014, 08:28 # 0
                                  Я выбираю «Да» в «Показывать в дереве» в Настройках раздела с тиккетами и жму «сохранить», но тиккеты не показываются в дереве. Что я делаю не так?
                                  1. Василий Наумкин 22 апреля 2014, 09:30 # 0
                                    Эти настройки работают для новых тикетов, а не для уже созданных.

                                    Там вроде так и написано.
                                  2. Антон Соловьёв 22 апреля 2014, 10:44 # 0
                                    Все-таки стоило бы дополнить как-то так:
                                    По умолчанию тикеты не показываются в дереве документов, чтобы снизить нагрузку на админку, но вы можете включить это для новых документов. Вновь созданные документы будут оторажаться в дереве, а те, что уже созданы так и останутся невидимыми в дереве
                                    Тогда точно непоняток не будет.

                                    Значит нельзя быстро переключать видимость документа во древе? Жаль, оно очень удобно например в Collections. Когда документов один-два, дерево намного удобней.
                                    А обычный документ же можно присоединить к тиккету? Собственно, нам сейчас нужнее не дерево, а именно возможность добавлять пару статеек к документу. Я так перетащил в дереве документ, вроде нормально присоединяется. Попробовал добавить через migx — вроде нормально подключаются на первый взгляд. Тиккеты, это ж тоже ресурсы, проблем же не должно быть?
                                    1. Антон Соловьёв 22 апреля 2014, 11:04 # 0
                                      Собственно, нам сейчас нужнее не дерево, а именно возможность добавлять пару статеек к документу.
                                      Я имел ввиду возможность добавить пару документов к тиккету. Без комментариев и всего такого, просто пару-тройку стандартных документов Модх. Они будут у некоторых тиккетов.
                                      1. Василий Наумкин 22 апреля 2014, 12:11 # 0
                                        Тогда точно непоняток не будет
                                        Ну конечно, а так то вообще непонятно, одни сплошные вопросы.


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

                                        Жаль, оно очень удобно например в Collections.
                                        Ну так и используй Collections, какие проблемы?

                                        Изначально тикеты рассчитаны не иметь потомков. Что будет, если к ним прицепить документы, и где это аукнется — не знаю.
                                        1. Антон Соловьёв 22 апреля 2014, 12:33 # 0
                                          Не, ну доки на родном то языке народ еще читает. И я в том числе. Ладно, спасибо за консультацию.
                                      2. Vasiliy Vronsky 22 апреля 2014, 16:16 # 0
                                        Добрый день!
                                        Возникла следующая задача? Необходимо реализовать функционал анонимных вопросов, на которые отвечают специалисты (авторизованные пользователи). Возможно ли реализовать этот функционал при помощи этого плагина? Если да, то в каком направлении копать? Заранее благодарю!
                                        1. Володя 03 мая 2014, 18:02 # 0
                                          Василий привет. Подскажи как сформировать URI тикета по своему правилу, при создании тикета через процессоры?
                                          Пробовал по всякому — все равно id тикета вперед подставляет…
                                          Спасибо!
                                          Добавление новых комментариев отключено.