Невозможно полностью использовать хуки checkout_* На рассмотрении

2

Например в хуке checkout_after_confirm заменяем сделанный расчет, для примера просто прописали (если выбрана определенная доставка):

$params['process_result']['data']['result']['confirm']['total'] = 333; $params['process_result']['data']['result']['confirm']['discount'] = 444;

Но в результате если работать с оформлением заказа, переключать доставки и оплату, то цена не меняется, причем json возвращает правильные данные:

но пользователь видит старые, связано это с тем что html генерируется (зачем то!?) до выполнения хука и получается скрипту абсолютно все равно, что мы там понасчитали, он отобразит стандартный html и нет никакой возможности вызвать перегенерацию шаблонов

Просим исправить или объяснить как правильно использовать данные хуки

6 комментариев

  • +1

    Хуки `checkout_after_<step>` выполняются после рендера HTML соответствующего шага. Менять там переменные, конечно, уже поздно.

    Есть хук `checkout_render_confirm`. Он вызывается перед тем, как отрендерить шаблон шага `confirm`. В хук передаётся `$params['vars']` - это как раз переменные для шаблона.

    Но вообще это так себе идея. Ну покажете вы визуально другую стоимость. Но на создаваемый заказ-то это никак не повлияет. Во все способы доставки и оплаты (которые до шага confirm) другие числа уйдут. По-хорошему надо где-то сильно раньше последнего шага цены подменять. 

    Расскажите поподробнее, что за функционал вам нужно реализовать. Я постараюсь предложить удачное место, чтобы вклиниться.

  • +1
    Александр Тарасенко Александр Тарасенко 6 ноября 2019 17:13 #

    Функционал "финальная скидка", то есть скидка должна добавляться уже после всего расчета. И самое интересное, что если вызвать waOrder.form.reload() (синтаксис по пдословно не помню) то покажутся правильные числа, с чем это связано загадка, сейчас так и реализовали из минусов - двойные запросы при изменении данных

    Но на создаваемый заказ-то это никак не повлияет.

    Для этого можно использовать хук order_action.create


    • +1

      Попробуйте в $params['data']['order'] вписать вашу финальную скидку. Это shopOrder. Что-то вроде

      $order = $params['data']['order'];
      $order['discount'] = 11.11;

      Если сделать это в хуке checkout_before_confirm, то должно быть хорошо. Оно по идее даже в итоговый заказ попадёт.

      Но вообще вы делаете что-то странное. Меня смущает, что в плагины доставки и оплаты уйдут странные числа - предполагаю неправильный расчёт стоимости доставки, например. Ещё меня смущает, что скидка не привязана к item'ам. Будут проблемы с выписыванием чеков. Но хозяин барин, конечно ¯\_(ツ)_/¯

      • +1
        Александр Тарасенко Александр Тарасенко 8 ноября 2019 09:24 #

        Не получится, так как в checkout_before_confirm - не передаются данные о стоимости заказа, они появляется только в хуке checkout_after_confirm

        Ещё меня смущает, что скидка не привязана к item'ам.

        Так в том то и дело что нужно чтобы скидка была общей (распространялась и на стоимость доставки в том числе) текущий механизм скидок действует только на товары в заказе. На самом деле никакой сложности нет, в хуке order_action.create - приходят все данные и там мы просто увеличиваем discount как нам нужно и соотвественно во всех письмах в плагины оплаты передаются правильные (нужные нам) данные - загвоздка оставалась только в отображение данной скидки на этапе оформления заказа 


        Ну и это не наша прихоть, это задача от одного из работающих магазинов довольно крупного причем



        • +1

          Код шага confirm берёт все свои числа из того, что доступно в хуке before_confirm. Ничего нового там особо не появляется. В качестве примера посмотрите

          lib/classes/checkout2/shopCheckoutConfirmStep.class.php

          там прям сверху видно, откуда все эти суммы берутся.

          • +1
            Александр Тарасенко Александр Тарасенко 8 ноября 2019 10:58 #

            Хорошо просмотрим еще раз, может что упустили, но все таки было бы неплохо добавить возможность перегенерировать шаблоны

            Добавить комментарий

            Чтобы добавить комментарий, зарегистрируйтесь или войдите