Не срабатывают события minishop2 при создании нового обработчика на событие
Пытаюсь создать обработчик события msOnCreateOrder через плагин, в «Системные события» плагина отмечаю нужное событие, но при нажатии кнопки «Заказать», будто не вызывается событие вообще, ничего не происходит. Если же убрать галочку в «Системные события» плагина и нажать «заказать» — всё оформляется и заказ проходит. Как повесить обработчик свой на события заказа?
Комментарии: 10
Возможно, где-то внутри вашего плагина происходит php-ошибка, останавливающая процесс оформления заказа.
Также не лишним будет открыть консоль браузера и посмотреть, не появляется ли в ней ошибка при нажатии на кнопку «заказать».
Также не лишним будет открыть консоль браузера и посмотреть, не появляется ли в ней ошибка при нажатии на кнопку «заказать».
Да, ошибка происходит, в консоли ругается: 500 (Internal Server Error) с указанием на:
if (empty($_REQUEST['action']) && empty($_REQUEST['ms2_action'])) {
die('Access denied');
}
из файла .../minishop2/action.php
Почему ругается?
if (empty($_REQUEST['action']) && empty($_REQUEST['ms2_action'])) {
die('Access denied');
}
из файла .../minishop2/action.php
Почему ругается?
Хороший вопрос.)
Приложите содержимое вашего плагина msOnCreateOrder. Если он выдает ошибку даже при пустом содержимом, стоит подумать о переустановке дополнения minishop2 и/или обновлении версии MODX-a
Приложите содержимое вашего плагина msOnCreateOrder. Если он выдает ошибку даже при пустом содержимом, стоит подумать о переустановке дополнения minishop2 и/или обновлении версии MODX-a
В плагин пишу пару строк всего, просто для теста:
<?php
$alias = $resource->get('alias');
$parent = $resource->get('parent');
if ($parent == 93) {
$resource->set('alias', 'testtt');
$resource->save();
}
Галочку на событие msOnCreateOrder ставлю, но при клике на кнопку перестает оформляться заказ. Т.е. не срабатывает даже стандартное событие
<?php
$alias = $resource->get('alias');
$parent = $resource->get('parent');
if ($parent == 93) {
$resource->set('alias', 'testtt');
$resource->save();
}
Галочку на событие msOnCreateOrder ставлю, но при клике на кнопку перестает оформляться заказ. Т.е. не срабатывает даже стандартное событие
А откуда в событии, принимающее переменные msOrder и order, у вас появился объект resource?
(к слову, в редакторе сообщений есть тег code, который красиво оформляет синтаксис кода)
(к слову, в редакторе сообщений есть тег code, который красиво оформляет синтаксис кода)
Это обработчик мой, не стандартный. Я ведь могу повесить на событие создания заказа свой обработчик, верно?
Мм… вы имеете ввиду, что вызываете invokeEvent со своими переменными? Или расширяете класс msOrderHandler, заменив в нем функцию submit?
Если не секрет, какой объект resource вы получаете? И не легче ли получить его внутри плагина стандартными способами, как-то так:
Если не секрет, какой объект resource вы получаете? И не легче ли получить его внутри плагина стандартными способами, как-то так:
$resource = $modx->getObject('modResource', array(
//перечисление требуемых условий, например
//'id' => 1
));
Это просто для примера) Такой код работает в другом плагине на событие сохранения ресурса (с определенным id родителя). Получается, всё рабочее, но вешаю на событие создания заказа и всё, не работает. Ещё может подскажите, почему-то сниппет msGetOrder в связке с msCart и msOder вызывается 3 раза. В самом конце сниппета msGetOrder в ветке «else {» дописываю свой код, но срабатывает это всё 3 раза. Вот последние строчки сниппета:
if (!empty($toPlaceholder)) {
$modx->setPlaceholder($toPlaceholder, $output);
} else {
$addr = $order->getOne('Address')->toArray();
$phone = $addr['phone'];
$address = "$addr[country], $addr[region], $addr[city], $addr[street], $addr[building], $addr[room]";
$modx->runSnippet('CRMka', array('products' => $products, 'phone' => $phone, 'address' => $address));
return $output;
}
if (!empty($toPlaceholder)) {
$modx->setPlaceholder($toPlaceholder, $output);
} else {
$addr = $order->getOne('Address')->toArray();
$phone = $addr['phone'];
$address = "$addr[country], $addr[region], $addr[city], $addr[street], $addr[building], $addr[room]";
$modx->runSnippet('CRMka', array('products' => $products, 'phone' => $phone, 'address' => $address));
return $output;
}
Все и работает потому, что в событии сохранения ресурса массив $resource есть, а в заказе — нет.
По поводу msGetOrder — честно говоря, без понятия. Насколько я вижу, сниппет msGetOrder, из коробки вызывается только при отправлении письма менеджеру или пользователю.
Что же до вашего участка кода… Не совсем улавливаю, для чего вы изменяете коробочный сниппет для вашей задачи. Скорее всего, её можно решить изящнее, например с помощью того же fenom-a.
По поводу msGetOrder — честно говоря, без понятия. Насколько я вижу, сниппет msGetOrder, из коробки вызывается только при отправлении письма менеджеру или пользователю.
Что же до вашего участка кода… Не совсем улавливаю, для чего вы изменяете коробочный сниппет для вашей задачи. Скорее всего, её можно решить изящнее, например с помощью того же fenom-a.
Проблема решена, нужно использовать в своём обработчике переменную $msOrder, которая передается в событие, например:
$addr = $msOrder->getOne('Address')->toArray();
$phone = $addr['phone'];
$address = "$addr[country], $addr[region], $addr[city], $addr[street], $addr[building], $addr[room]";
$addr = $msOrder->getOne('Address')->toArray();
$phone = $addr['phone'];
$address = "$addr[country], $addr[region], $addr[city], $addr[street], $addr[building], $addr[room]";
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.