
Заказ
Процессом оформления заказа занимается специальный класс 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 с заказом.
