События корзины

10.0/10 оценка (3 голосов)

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

notification cartЗайдите на страницу События и уведомления. Вы увидите различные позиции, каждая из которых отвечает за определенное действие. Давайте рассмотрим череду событий корзины на примере.

Пользователь заходит на сайт и делает заказ какого-либо товара. С того момента, как человек кликнет на кнопку Создать заказ и до момента, когда на экране он увидит надпись Успешно создан, на заказ будут действовать различные действия. Какие это могут быть действия? Сначала система проверяет заказ на валидность. А именно:

  1. Что такой товар действительно существует на сайте.
  2. При заполнении формы все данные были введены правильно (телефон, E-mail и т.д.).
  3. Что товар есть на складе.
  4. Если у вас установлено, что стоимость должна быть больше нуля, то необходимо, чтобы заказ соответствовал данному условию.

На самом деле пунктов может быть огромное количество, но мы возьмем лишь эти для примера.

После того, как система проверит, что заказ валидный, он переходит в событие Перед сохранением заказа. Здесь уже сработают другие элементы, которые у вас будут установлены в этом событии.

Например, в этом событии может быть установлен элемент для форматирования номера телефона. Он может ввести его в любом виде, допустим 8-123-456-78-90 или 123-456-7890. А вы хотите, чтобы номер для администратора выводился определенным образом, например, +7 (123) 456 7890. Тогда можно добавить в позицию order_beforesave элемент, который будет следить за форматом введенного телефона при сохранении.

Таким образом, мы можем модифицировать заказ до его попадания в базу данных.

Если все прошло успешно, то заказ попадет в событие Создан новый заказ. После этого вы уже сможете увидеть его в панели управления.

Когда администратор меняет общий статус, то после сохранения будет вызвано событие При изменении общего статуса заказа. Не имеет значения каким образом статус был изменен: в ручную, автоматически или каким-либо другим способом. Элементы в этой позиции сработают в любом случае.

После успешной оплаты заказа, он попадает в событие Успешной оплаты.

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

Далее в статье мы кратко рассмотрим другие события корзины.

События при смене статусовПерейдите на страницу События смены статусов. В предыдущей статье мы создали несколько различных статусов для каждой группы событий: заказ (order), оплата (payment) и доставка (shipping). На картинке справа вы видите, как примерно будет выглядеть страница. Давайте посмотрим, как будет производится оплата товара.

Когда пользователь делает заказ, но не оплачивает его, то заказ приобретает статус Заказ попадает в события order__order-new и payment__payment-new. Имена статусов задаются в настройках на странице Статусы заказа и сервисов. Через определенное время покупатель оплачивает его. Если операция прошла успешно, то срабатывает событие payment__payment-success (Успешно оплачено). Если что-то пошло не так и заказ был отменен, то он попадает в payment__payment-cancel (Отменен).

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

События корзины и как они работают

Событий в корзине очень много — порядка двух десятков, не считая статусов. Зачастую одно событие может порождать вызов другого. Таким образом, за раз может проходить целая череда взаимосвязанных вызовов, которая формируется по мере выполнения программы. Чтобы лучше понять принцип работы, разберем несколько примеров.

Схема создания и изменения заказаРассмотрим первый простой пример — процесс создания нового заказа. После того, как корзина полностью проверит всю информацию и валидность, заказ будет готов к сохранению в базу данных. Первым делом будет вызвано событие Перед сохранением заказа, далее Создан новый заказ и в конце После сохранения заказа. Таким образом, мы можем создать специальный элемент хук (hook), который будет изменять информацию до сохранения в базу данных или оповещать об этом сторонние сервисы. После того, как запись была сохранена, удобно добавить какую-нибудь нотификацию, например, оповестить администратора.

Отдельно хотелось бы отметить, что любое сохранение или изменение заказа всегда вызывает эти события, с единственной разницей, что если заказ уже был создан, то вторым шагом будет вызвано событие Заказ изменен.

Схема изменения статусов заказаДругой пример — изменяем один или несколько статусов заказа. Напомним, что существует 3 группы статусов: общий, оплата и доставка. В данной ситуации нас не интересует каким образом был изменен статус (администратором или платежным роботом). При этом вполне возможна ситуация, что были изменены сразу все три группы.

Допустим, администратор изменил общий статус, тогда все действия, которые находятся в событии При изменении общего статуса заказа будут выполнены. Далее выполняется событие определенного статуса, т.е. то, которое настраивается на странице Событие смены статусов. Далее новое состояние нужно сохранить в базу данных, поэтому повторится схема из первого примера. Более подробно вы можете посмотреть на картинке.

Схема оплаты заказаПоследний пример — оплата существующего заказа с сайта. Как вы видите, пример более сложный, чем предыдущие.

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

Стоит заметить, что далеко не все роботы платежных систем умеют оповещать о неудачной или отмененной оплате. На самом деле это большая редкость. Поэтому, если все настроено верно, то обычно вход робота устанавливает статус Успешной оплаты.

Если, в результате предыдущих действий, статус заказа был изменен, то будет вызвана вся цепочка событий, описанная во втором примере.

Вместо заключения

Мы разобрали основные события и сценарии их работы. Как видите, обдуманная расстановка элементов хуков и нотификаций позволяет гибко управлять внутренними процессами корзины и оповещать в нужный момент. Подобный подход позволяет создавать индивидуальные решения для своего сайта, без необходимости изменения кода компонента (хаков).

Корзина

У меня остались вопросы, где я могу их задать?

Вы можете обратиться на наш специальный форум техподдержки JBZoo. Если у вас нет активного аккаунта со знаком «плюс» в тарифном плане, то вы можете задать свой вопрос в одном из этих разделов или на любой из наших контактов. Форум специально предназначен для JBZoo, приоритет и скорость ответа там выше.