Как взаимодействовать из плагина со страницей?

Есть плагин, на событие от minishop2 — msOnGetOrderCost
Как правильно из него взаимодействовать со страницей?
Все что нахожу в документации по плагинам, это —
$modx->event->output('Вас ожидает подарок на следующей странице');
однако во всем примерах такой код вызывается как реакция на негативное событие. Ну тоесть не дать добавить товар или что-то еще. То есть всегда когда действие нужно остановить и для этих случае это срабатывает — я вижу красное уведомление jGrowl от минишоп и все ок.

Но мне нужно уведомить пользователя что сумма его заказа позволяет получить подарок.
case 'msOnGetOrderCost':
          
             if($cost>=$giftSum){
                 $modx->event->output('Вас ожидает подарок на следующей странице');
             }
        break;
и про срабатывании я вижу уведомление на красном фоне и остановку всей остальной логики — то есть все цены после этого в корзине становятся равны нулю. (имеется ввиду те, которые должны были обновится)
Меня бы устроила возможность взаимодействовать со страницей на JS, например выполнить некий скрипт, но опять же через
$modx->event->output('Вас ожидает подарок на следующей странице');
нельзя передать код, только чистый текст, даже без html и при этом все равно все цены после вызова перестают обновлятся и становятся нулями.

Я знаю что у минишопа можно создавать свои функции обратного вызова
miniShop2.Callbacks.add('Order.getcost.response.success', 'orders_add_ok', function(response) {
    miniShop2.Message.success('Всё хорошо!');
    console.log(response);
});
и вроде бы это должно было решить мою задачу, однако не пойму, как передать свой response сюда из плагина, чтобы вывелось мое сообщение, да и вообще чтобы показывать сообшение исключительно при совпадении условия, а не всегда. Для этого лично для моей задачи нужно подмешать в response еще и сумму, начиная с которой дается подарок, чтобы потом на JS сравнить с итоговой суммой и только тогда показать уведомление.

Спасибо.
Александр Мельник
16 апреля 2020, 13:12
modx.pro
690
0

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

Максим
17 апреля 2020, 14:46
+1
Судя по исходнику, Вы никак не сможете выводит нужное сообщение через плагин:
$response = $this->ms2->invokeEvent('msOnGetOrderCost', array(
            'order' => $this,
            'cart' => $this->ms2->cart,
            'with_cart' => $with_cart,
            'only_cost' => $only_cost,
            'cost' => $cost,
        ));
        if (!$response['success']) {
            return $this->error($response['message']);
        }
        $cost = $response['data']['cost'];

        return $only_cost
            ? $cost
            : $this->success('', array('cost' => $cost));
Но Вы можете в JS на Order.getcost.response.success вызвать свой процессор. Ну и там уже делать все, что вам нужно.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
2