Magento 2 — событие отправляется, когда пользователь нажимает «Перейти к оформлению заказа»

Как называется событие, которое отправляется, когда покупатель нажимает «Перейти к оформлению заказа» после добавления товара в корзину? Я хочу зарегистрировать, что пользователь начал процесс оформления заказа для аналитики. В частности, мне нужно зафиксировать содержимое корзины и другую информацию, такую ​​как общая цена и т. д.

Я перепробовал большинство событий из этого списка, связанных либо в «оформить заказ», либо в «корзину». Ни один из них не отправляется, когда пользователь нажимает кнопку «Оформить заказ». Ближайшее, что я мог получить, было

controller_action_predispatch_checkout_cart_index

который отправляется, когда пользователь нажимает «Просмотр и редактирование корзины».

Я смотрю на пару способов решить эту проблему

  1. Получите имя события, которое отправляется, когда пользователь нажимает «Перейти к оформлению заказа». Наблюдайте за этим событием и «прицепите» к нему мой код.
  2. Или есть способ увидеть все события, которые отправляются в режиме реального времени? Я думаю, что смогу найти какое-то другое событие, которое отправляется примерно в то же время, что и проверка, а затем наблюдать за этим.

person satnam    schedule 22.01.2016    source источник


Ответы (6)


Используйте 1_.

person Poorvi Dubey    schedule 04.02.2017

Вы можете использовать checkout_cart_save_before это событие, которое вы можете найти в vendor/magento/module-checkout/Model/Cart.php.

Найдите следующий фрагмент кода:

$this->_eventManager->dispatch('checkout_cart_save_before', ['cart' => $this]);

Надеюсь, это поможет вам

person Rohit Kundale    schedule 16.03.2016

Я думаю, это должно быть

    sales_quote_save_after

Надеюсь, это поможет вам.

person Abhishek Dhanraj Shahdeo    schedule 22.03.2016

Вероятно, это второй способ, который вы ищете. Вы можете регистрировать все события в методе "\Magento\Framework\Event\Manager::dispatch" (файл ./vendor/magento/framework/Event/Manager.php):

public function dispatch($eventName, array $data = [])
{
    $obm = \Magento\Framework\App\ObjectManager::getInstance();
    /** @var  $logger \Psr\Log\LoggerInterface */
    $logger = $obm->get(\Psr\Log\LoggerInterface::class);
    $logger->debug($eventName);
    // original code
    $eventName = mb_strtolower($eventName);
    ...
}

Лог-файлы помещаются в папку "./var/log"

person Alex Gusev    schedule 20.03.2016

Если я хочу регистрировать все события, которые отправляются после определенного взаимодействия, я иду к Magento\Framework\Event\Manager и устанавливаю точку останова в методе dispatch, который выводит $eventName на консоль.

Вы также можете добавить оператор журнала или написать плагин в пользовательском модуле, который записывает имя события в какой-либо файл.

Когда вы нажимаете Go to checkout, отправляется много событий, возможно, checkout_cart_save_before — это то, что вы ищете.

person bpoiss    schedule 22.03.2016
comment
Модифицировать ядро ​​недопустимо в Magento, пожалуйста, не учите так, даже говоря, что это грязный хак - person bxN5; 11.09.2018

используйте layout_render_before_checkout_index_index или controller_action_predispatch_checkout_index_index

person AlexanderPop    schedule 20.01.2020