Tickets 1.9.4
Приветствую всех следящих за судьбой компонента. В преддверии нового года поздравляю всех с наступающим годом Пятачка и желаю не свинячить в исходниках ;)
Глобальных нововведений нет, а список исправлений прикладываю ниже:
Глобальных нововведений нет, а список исправлений прикладываю ниже:
- Не всегда сохранялись properties раздела тикетов (вкладки дочерние тикеты, рейтинги), исправлено. (источник)
- Добавлено сохранение состояния галочки «очистить кеш» при обновлении раздела тикетов. (источник)
- Мб и не совсем баг, но неочевидное UX поведение — ранее при загрузке файлов на фронте через TicketForm до прикрепления к тикету (parent = 0) они показывались в файлах и могли прикрепиться к другому тикету этого юзера в режиме редактирования. Изменена логика — теперь загруженные файлы при создании тикета не будут показываться и сохраняться для других тикетов в режиме редактирования. (источник @snyadanak)
Поблагодарить автора
Отправить деньги
Комментарии: 18
Красавчик, tolanych.
Дал вторую жизнь компоненту, респект!
С наступающим!
Дал вторую жизнь компоненту, респект!
С наступающим!
Ошибка при установке
Could not create table `***_tickets_threads` SQL: CREATE TABLE `nhk_tickets_threads` (`id` INTEGER unsigned NOT NULL AUTO_INCREMENT, `resource` INT(10) unsigned NOT NULL DEFAULT '0', `name` VARCHAR(255) NOT NULL DEFAULT '', `subscribers` TEXT NOT NULL, `createdon` DATETIME NULL, `createdby` INTEGER(10) unsigned NOT NULL DEFAULT '0', `closed` TINYINT(1) unsigned NOT NULL DEFAULT '0', `deleted` TINYINT(1) unsigned NOT NULL DEFAULT '0', `deletedon` DATETIME NULL, `deletedby` INTEGER(10) unsigned NOT NULL DEFAULT '0', `comment_last` INT(10) unsigned NOT NULL DEFAULT '0', `comment_time` DATETIME NULL, `comments` INT(10) unsigned NULL DEFAULT '0', `properties` TEXT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`), INDEX `resource` (`resource`), INDEX `comment_last` (`comment_last`), INDEX `comments` (`comments`), INDEX `closed` (`closed`)) ENGINE=InnoDB ERROR: Array ( [0] => 42000 [1] => 1071 [2] => Specified key was too long; max key length is 767 bytes )
Could not create table `***_tickets_threads` SQL: CREATE TABLE `nhk_tickets_threads` (`id` INTEGER unsigned NOT NULL AUTO_INCREMENT, `resource` INT(10) unsigned NOT NULL DEFAULT '0', `name` VARCHAR(255) NOT NULL DEFAULT '', `subscribers` TEXT NOT NULL, `createdon` DATETIME NULL, `createdby` INTEGER(10) unsigned NOT NULL DEFAULT '0', `closed` TINYINT(1) unsigned NOT NULL DEFAULT '0', `deleted` TINYINT(1) unsigned NOT NULL DEFAULT '0', `deletedon` DATETIME NULL, `deletedby` INTEGER(10) unsigned NOT NULL DEFAULT '0', `comment_last` INT(10) unsigned NOT NULL DEFAULT '0', `comment_time` DATETIME NULL, `comments` INT(10) unsigned NULL DEFAULT '0', `properties` TEXT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`), INDEX `resource` (`resource`), INDEX `comment_last` (`comment_last`), INDEX `comments` (`comments`), INDEX `closed` (`closed`)) ENGINE=InnoDB ERROR: Array ( [0] => 42000 [1] => 1071 [2] => Specified key was too long; max key length is 767 bytes )
Предлагаю нагуглить причину и решение по тексту ошибки — «Specified key was too long; max key length is 767 bytes» :)
По тому, что нагуглил я, есть предположение, что либо сервер древний с жесткими лимитами, либо кодировка БД стоит utf8mb4. Если ни то, ни другое, нужно дополнительное обследование пациента (чистая установка modx, tickets и т.д.)
По тому, что нагуглил я, есть предположение, что либо сервер древний с жесткими лимитами, либо кодировка БД стоит utf8mb4. Если ни то, ни другое, нужно дополнительное обследование пациента (чистая установка modx, tickets и т.д.)
Что плохого в utf8mb4? Это дефолт сейчас для modx, да и вообще везде. Если тикетс с ней не работает, то это печаль.
utf8mb4 не плох, и отказываться от него не обязательно. Есть вариант — обновить версию mySQL, где лимит индекса увеличен, подкрутить конфиг (https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_large_prefix) и дальше невозбранно пользоваться utf8mb4. Просто это уже направление к сисдамину/хостеру или кто там настраивает сервер. А вариант со сменой на обычный utf8 — это то, что и рядовому кодеру подвластно.
Думаю, что правильнее тикетс «подкрутить», чтобы все работало везде, чем менять людям хостинги, у кого не свой сервер.
utf8mb4. Так что делать то?
Обновить на сервере mySQL до 5.7 и выше и включить опцию innodb_large_prefix.
Либо сменить кодировку БД на обычный utf8.
Либо сменить кодировку БД на обычный utf8.
Создай вручную таблицу, длина поля name максимум 64 в этом случае
CREATE TABLE `modx_tickets_threads` (`id` INTEGER unsigned NOT NULL AUTO_INCREMENT, `resource` INT(10) unsigned NOT NULL DEFAULT '0', `name` VARCHAR(64) NOT NULL DEFAULT '', `subscribers` TEXT NOT NULL, `createdon` DATETIME NULL, `createdby` INTEGER(10) unsigned NOT NULL DEFAULT '0', `closed` TINYINT(1) unsigned NOT NULL DEFAULT '0', `deleted` TINYINT(1) unsigned NOT NULL DEFAULT '0', `deletedon` DATETIME NULL, `deletedby` INTEGER(10) unsigned NOT NULL DEFAULT '0', `comment_last` INT(10) unsigned NOT NULL DEFAULT '0', `comment_time` DATETIME NULL, `comments` INT(10) unsigned NULL DEFAULT '0', `properties` TEXT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`), INDEX `resource` (`resource`), INDEX `comment_last` (`comment_last`), INDEX `comments` (`comments`), INDEX `closed` (`closed`)) ENGINE=InnoDB
Не 191?
Небольшой баг. Список тикетов в админке при первой загрузке (хоть в компоненте, хоть в документе TicketSection) вызывается с сортировкой по id.
class TicketGetListProcessor extends modObjectGetListProcessor
{
public $classKey = 'Ticket';
public $defaultSortField = 'id';
public $defaultSortDirection = 'DESC';
При работе с пагинацией (вперёд, назад, обновить), сортировка по createdon.
привет! есть способ заставить тикетс НЕ регистрировать свои JS? вообще, даже конфиги
Не очень понял, что нужно и какие цели преследуются.
Чтобы не регистрировались js — не вызывай сниппет, а просто рисуй форму, которая нужна.
Либо пример как достичь такого эффекта с вызовом сниппета getTicket:
начальные строки его заменить на:
Чтобы не регистрировались js — не вызывай сниппет, а просто рисуй форму, которая нужна.
Либо пример как достичь такого эффекта с вызовом сниппета getTicket:
начальные строки его заменить на:
$Tickets = $modx->getService('tickets', 'Tickets', $modx->getOption('tickets.core_path', null,
$modx->getOption('core_path') . 'components/tickets/') . 'model/tickets/', $scriptProperties);
$Tickets->initialized['web'] = true;
$Tickets->initialize($modx->context->key, $scriptProperties);
и системные настройки tickets.frontend_css, tickets.frontend_js сделать пустыми
спасибо! про настройки знаю, но без них все равно регистрируется TicketsConfig. А цель в том, чтобы его самому формировать.
так что пример кода с $Tickets->initialized['web'] = true — самое то, что нужно:)
вопрос: если такое единожды сделать где-нибудь в шапке, каждый сниппет Tickets будет заново инициализировать? или учтет, что он уже инициализован
так что пример кода с $Tickets->initialized['web'] = true — самое то, что нужно:)
вопрос: если такое единожды сделать где-нибудь в шапке, каждый сниппет Tickets будет заново инициализировать? или учтет, что он уже инициализован
Учтет, что уже инциализрован, но в каждом сниппете нужно индивидуально смотреть. В теории всё хорошо, на практике есть ньюансы. Например после вызова сниппета GetTicket вызову сниппет TicketForm и он еще внутри себя подключает web/files.js и TicketsConfig.source, поэтому если есть потребность отрубить что-то на корню, лучше скопируй сниппеты, прочитай исходники и подправь под свою задачу.
По феншую в твоем случае лучше вообще доработать сам тикетс и добавить в качестве настройки возможность задавать кастомный TicketsConfig
По феншую в твоем случае лучше вообще доработать сам тикетс и добавить в качестве настройки возможность задавать кастомный TicketsConfig
так и делал, надоели танцы с обновлениями, пытаюсь не лезть в ядро
Стандартное оформление сейчас на Bootstrap 3 или изменили на 4?
Было бы неплохо ещё на страницу тикета добавить кнопки управления как в товарах минишопа: «Предыдущий» и «Следующий» стрелками.
Сейчас, учитывая что тикеты по умолчанию спрятаны из дерева, приходится возвращаться в секцию, потом искать соседний тикет по памяти и переходить в него.
Сейчас, учитывая что тикеты по умолчанию спрятаны из дерева, приходится возвращаться в секцию, потом искать соседний тикет по памяти и переходить в него.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.