[Tickets] Версия 1.14.0-pl — первый релиз с апреля 2022

Вышла Tickets 1.14.0-pl. Предыдущий релиз был в апреле 2022 (1.13.1). За четыре года накопились PR, баги на PHP 8, недоделки по комментариям и uninstall. Этот пакет закрывает долг по ветке 2.x и даёт нормальную базу, с которой уже можно идти в адаптацию под MODX 3.

Релиз на GitHub: Tickets 1.14.0

Что добавили


— Несколько веток комментариев на одной странице (обёртка `.comments-thread`).
— Плоский список комментариев: `&tree=0` с пагинацией `limit` / `offset`.
— Редактирование описания загруженных изображений тикета (`ticket/file/desc`).
— JS-события `tickets_before_ticket_*` и `tickets_before_comment_*` (preview / save).
— Вложенность Zurb Foundation Media Object для reply и дочерних комментариев.
— Кастомный `createdon` при создании комментария (импорт: `sudo` или сессия `mgr`).
— Параметры TicketComments в окне свойств сниппета (`sortby`, `limit`, `tree` и др.).
— Системная настройка `tickets.auto_introtext` — можно отключить автозаполнение introtext.
— BCC-уведомления администраторам по умолчанию; badge неопубликованных комментариев в mgr.
— Ссылка счётчика комментариев на `#first_unread` / `#comments`.
— Немецкий лексикон (`lexicon/de`); лексикон `tplTicketEmailSubscription` (#142).

Что изменили



— Поиск в mgr: числовой запрос и форматированные телефоны ищут в `text` / `raw` (query + digits).
— `TicketQueue`: email из очереди приоритетнее профиля; проверка active / blocked с null-safe Profile.
— Обновление тикета: `syncsite_default`; `clearCache` секции только при включённом `syncsite`.
— `[[+total]]` в `tplComments`: счётчик из `TicketThread.comments` / DB, не из pdoFetch `totalVar`.
— tpanel: классы вместо id (`.comments-tpanel`), чтобы не дублировать id на нескольких ветках.
— Украинский лексикон доведён до паритета с RU; правки EN (в т.ч. `tickets_prop_threads`).
— Пустой `fullname` → fallback на `username` при save / preview комментария.

Что починили



— Рекурсия / первый доступ `TicketTotal` (`Maximum function nesting level`, stub save).
— #187 — подсчёт комментариев тикета по `TicketThread.resource`, не только `resource-{id}`.
— PHP 8: безопасные пути mgr save (properties / aliasMap / template).
— Дублирование тикета: пересборка alias и uri (#174).
— Uninstall: очистка CRC → modDocument, таблиц, меню / категории (#172).
— XSS: `:htmlent` для `description` в чанке изображения.
— PHP 8.2+: `strftime` в mgr comment get заменён на `date` / `strtr`; у `TicketFile` явный `?modMediaSource` и нормальный порядок аргументов `makeThumbnail`.

Дальше



1.14.0 — не про MODX 3 «из коробки». Это стабилизация 2.x: PHP 8.2+, комментарии, uninstall, лексиконы. Без этого шага адаптация к MODX 3 была бы на сыром фундаменте. Следующий большой кусок работы — как раз порт под третью версию.

Обновляйтесь через репозиторий / пакет с GitHub, смотрите полный changelog в релизе. Баги и предложения — в issues.

Если Tickets вам полезен и хотите поддержать работу над компонентом (и дальше — под MODX 3):

— СберБанк: messenger.online.sberbank.ru/sl/kPLh3bewMs93eW9Hl
— Тинькофф: www.tinkoff.ru/sl/2V9U9RrcJZP
Иван Бочкарев
Иван Бочкарев
13 июля 2026, 14:04
modx.pro
1 121

Комментарии: 15

Александр
15 июля 2026, 18:43
При установке на чистый MODx 3.2.2 ошибка
Warning: Undefined array key «modUser» in /var/www/html/core/vendor/xpdo/xpdo/src/xPDO/xPDOMap.php on line 48
После установки из админки вылетел, а после входа в админку на чистом листе только этот warning.
    Иван Бочкарев
    15 июля 2026, 19:19
    А где то заявлялась поддержка MODX 3?

    Дополнение нужно адаптировать под MODX 3 или делать отдельную версию — это трудозатратно и я буду это делать в рамках краудфандинга.
      Александр
      15 июля 2026, 19:21
      Ой, и правда что, прошу прощения)
    Wassi Wassinen
    09 сентября 2026, 13:46
    Иван, спасибо за доработки.

    Если есть возможность — обратите внимание на сниппет ticketLatest. Очень полезный ра ресурсах с большим количеством тикетов и комментариев.
    Но есть нюанс. Когда выводишь комментарии с помощью этого сниппета (в режиме 'action' => 'comments' с отображением контента комментария 'includeContent' => 1) — он тянет огромное кол-во полей самих тикетов, авторов, в том числе Ticket.content. Хотя, для отображение последних комментариев это всё не нужно.
    Это сильно нагружает запрос и он «раздувается» до 4 секунд на 87к ресурсов (Это тикеты с большим кол-вом текста).

    Если у вас есть возможность — оптимизируете этот момент. Чтобы в режиме 'action' => 'comments' сниппет не тянул лишнего.
      Иван Бочкарев
      09 сентября 2026, 13:51
      Принято — возьму в работу github.com/modx-pro/Tickets/issues/214

      @Wassi Wassinen можете попробовать у себя на сайте изменения из github.com/modx-pro/Tickets/pull/215/changes
        Wassi Wassinen
        09 сентября 2026, 14:15
        Иван, спасибо за оперативный ответ. Как реализуете — с меня благодарность. :)

        Ещё вопрос — можно вернуть подложку под текст статьи? Читать на сером фоне затруднительно.

        Wassi Wassinen
        09 сентября 2026, 14:16
        @Wassi Wassinen можете попробовать у себя на сайте изменения из github.com/modx-pro/Tickets/pull/215/changes
        Иван, прошу прощения, не очень понимаю как это сделать. Нужно скачать файл с гита и заменить файл на сайте?
          Иван Бочкарев
          09 сентября 2026, 14:37
          Заменить содержимое файла core/components/tickets/elements/snippets/snippet.ticket_latest.php на github.com/modx-pro/Tickets/blob/6228947e260417c8ea0edffe742a28490425ca51/core/components/tickets/elements/snippets/snippet.ticket_latest.php
            Wassi Wassinen
            09 сентября 2026, 15:37
            Заменил — запрос строится столько же по времени. Кол-во запросов не изменилось.
            Иван Бочкарев
            09 сентября 2026, 15:52
            Точно, найдите ticketLatest в списке снипетов в админке и там поменяйте код тоже
              Wassi Wassinen
              09 сентября 2026, 16:12
              Иван, вы молодец. Стало лучше :)
              Вместо 4-х секунд — 1,7 секунды.

              Я так понимаю, полностью исправить ситуацию с большой выборкой можно только если переделывать логику Тикетс и хранить дату последнего комментария, например, в modx_tickets_threads. last_comment_createdon DATETIME или что-то вроде этого.

              Получается, что сейчас он всё равно должен (если я правильно понял логику):

              1. Найти допустимые тикеты.
              2. Для каждого найти thread.
              3. Для каждого thread найти comment_last.
              4. Отсеять удалённые комментарии.
              5. Сгруппировать строки по Ticket.id.
              6. Отсортировать группы по дате комментария.
              7. Только затем взять нужное число комментариев для вывода.
              А может я неправильно всё это дело понял.
              Донат закину. :)
      Wassi Wassinen
      09 сентября 2026, 17:10
      Иван, ещё после обновления автоматически не заполняются поля introtext с выставленным ограничением в 500 символов. Без ограничения — заполняются.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        15