tolanych

tolanych

Был в сети 03 марта 2024, 21:30
Заказы не принимаю
Проверил на 2.7.1, работает.
Во время теста заметил, что упустил еще момент в этом плагине, не отсылались ответы гостям, в $scriptProperties для этого еще надо добавить 'allowGuestEmails' => 1, мб это был как раз ваш случай
Что я упустил?
Привет, похоже это я упустил, добавляя функционал комментирования в админку. В ближайшем обновлении Tickets поправлю. Здесь и сейчас по быстрому решить это можешь с помощью плагина на событие OnCommentSave

switch ($modx->event->name) {
    case 'OnCommentSave':
        if ($modx->context->key == 'mgr' && $mode == 'new') {
            // тут описать функционал отправки письма, сам комментарий в переменной $object;
        }
}
На самом деле хранение в сессии это костыль.
Правильный подход к веб-разработке не выводить POST, а после POST-запроса выполнить редирект на страницу с выводом обработанных данных из БД/другого хранилища
Привет, уже обсуждалось в этой ветке:
modx.pro/components/17235#comment-105731

Предлагались следующие пути решения:
  • использовать utf8 без mb4
  • либо обновить версию сервера mySQL и подкрутить настройки sysvar_innodb_large_prefix, чтобы влазить в лимит длины ключа
  • либо перед установкой создать таблицу вручную с меньшей длиной поля name
Учтет, что уже инциализрован, но в каждом сниппете нужно индивидуально смотреть. В теории всё хорошо, на практике есть ньюансы. Например после вызова сниппета GetTicket вызову сниппет TicketForm и он еще внутри себя подключает web/files.js и TicketsConfig.source, поэтому если есть потребность отрубить что-то на корню, лучше скопируй сниппеты, прочитай исходники и подправь под свою задачу.

По феншую в твоем случае лучше вообще доработать сам тикетс и добавить в качестве настройки возможность задавать кастомный TicketsConfig
Всю магию делал в файле items.grid.js

в рендерере для ссылки добавил атрибут myattr, в котором помещается текст, который нужно кидать в searchbox и класс myClick, по которому элемент буду отлавливать
_renderUserCell: function(val, cell, row, rowIndex, colIndex, store, view) {
	return  '<a href="javascript:void(0);" class="myClick" myattr="'+row.get('pagetitle')+'">' + row.get('pagetitle') + '</a><br /><small>(' + val + ')</small>';
},
В getTopBar для field-search добавил id
...
xtype: 'mycomponent-field-search',
id: 'my-search-block',
width: 250,
...
(это стандартный поиск, тебе соответственно id добавлять в своё поле «Автор»)

в методе onClick от modExtra есть стандартная проверка на if (elem.nodeName == 'BUTTON') {
после неё добавил
if (elem.nodeName == 'A' && elem.className == 'myClick') {
	search = Ext.getCmp('my-search-block'); //ищу блок поиска по id
	search.setValue(elem.getAttribute('myattr')); //в него ставлю поисковой текст
	search._triggerSearch(); //имитируем нажатие кнопки
}
Не очень понял, что нужно и какие цели преследуются.
Чтобы не регистрировались 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 сделать пустыми
Попробуй перед очисткой корзины в файле /core/components/tickets/model/tickets/ticket.class.php в методе remove
со строчки 667 закомментировать этот блок

if ($total = $this->xpdo->getObject('TicketTotal', array('id' => $this->parent, 'class' => 'TicketsSection'))) {
    $total->set('children', $total->get('children') - 1);
    $total->save();
}
utf8mb4 не плох, и отказываться от него не обязательно. Есть вариант — обновить версию mySQL, где лимит индекса увеличен, подкрутить конфиг (https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_large_prefix) и дальше невозбранно пользоваться utf8mb4. Просто это уже направление к сисдамину/хостеру или кто там настраивает сервер. А вариант со сменой на обычный utf8 — это то, что и рядовому кодеру подвластно.
Предлагаю нагуглить причину и решение по тексту ошибки — «Specified key was too long; max key length is 767 bytes» :)

По тому, что нагуглил я, есть предположение, что либо сервер древний с жесткими лимитами, либо кодировка БД стоит utf8mb4. Если ни то, ни другое, нужно дополнительное обследование пациента (чистая установка modx, tickets и т.д.)