Skip to content
  1. Компоненты
  2. PayAndSee
  3. Разработка
  4. Службы
  5. Заказ

Заказ ​

Процессом оформления заказа занимается специальный класс PasOrderHandler, который реализует интерфейс PasOrderInterface. Конечно, вы можете подключить собственный класс для заказа и указать его в системной настройке order_handler_class

Заказ

Итак, обязательные методы интерфейса msOrderInterface:

  • initialize - Инициализирует класс в контекст. Может загружать скрипты и стили.
  • add - Добавляет одно поле в заказ.
  • remove - Удаляет одно поле из заказа.
  • validate - Проводит проверку поля при добавлении и возвращает фильтрованное значение.
  • get - Возвращает содержимое заказа, целиком.
  • set - Перезаписывает содержимое заказа полученным массивом.
  • submit - Оформление заказа, в нём уже должна быть доставка и обязательные поля.
  • clean - Полная очистка заказа.
  • getcost - Получение стоимости.
  • getDeliveryCost - Получение стоимости доставки.
  • getPaymentCost - Получение стоимости оплаты.
  • getDeliveries - Получение вариантов доставки.
  • getPayments - Получение вариантов оплаты.

Системные события ​

Класс PasOrderInterface генерирует определённые события при работе с заказом. Для удобства, вот они в виде заготовки-плагина:

php
<?php

switch ($modx->event->name) {
  // Добавление полей в заказ
  case 'PasOnBeforeAddToOrder'; break; // получает $key с именем поля, $value - значение поля
  case 'PasOnAddToOrder'; break; // получает $key с именем поля, $value - значение поля

  // Удаление полей из заказа
  case 'PasOnBeforeRemoveFromOrder'; break; // получает $key с именем поля
  case 'PasOnRemoveFromOrder'; break; // получает $key с именем поля

  // Отправка заказа
  case 'PasOnSubmitOrder'; break; // необязательный массив $data с переназначаемыми полями

  // Создание заказа
  case 'PasOnBeforeCreateOrder'; break; // получает готовый объект $order со всеми прицепленными объектами
  case 'PasOnCreateOrder'; break; // то же самое

  // Очистка заказа
  case 'PasOnBeforeEmptyOrder'; break; // получает только объект $order
  case 'PasOnEmptyOrder'; break; // получает только объект $order

  // Смена статуса заказа (оплата, отмена и т.д.)
  case 'msOnBeforeChangeOrderStatus': break; // получает объект $order и id статуса в $status
  case 'msOnChangeOrderStatus': break; // получает объект $order и id статуса в $status
}

Все события также получают объект $order с заказом.