Skip to content
  1. Extras
  2. UserEvents
  3. Development
  4. Services
  5. Order

Order ​

Checkout is handled by UserEventsOrderHandler, which implements UserEventsOrderInterface. You can use your own order class and set it in the system setting order_handler_class.

Required methods of UserEventsOrderInterface:

  • initialize — initialize the class in the context. Can load scripts and styles.
  • add — add one field to the order.
  • remove — remove one field from the order.
  • validate — validate a field on add and return the filtered value.
  • get — return order contents.
  • set — replace order contents with the given array.
  • submit — process checkout; required fields must already be present.
  • clean — clear the order completely.
  • getcost — get cost.
  • getDaysState — get calendar day states.
  • getTimesState — get time-of-day states.
  • getDeliveryCost — get delivery cost.
  • getPaymentCost — get payment cost.
  • getDeliveries — get delivery options.
  • getPayments — get payment options.

System events ​

UserEventsOrderInterface fires events when working with the order. Template plugin:

php
<?php

switch ($modx->event->name) {
    // Add fields to order
  case 'UserEventsOnBeforeAddToOrder'; break; // receives $key (field name), $value (field value)
  case 'UserEventsOnAddToOrder'; break; // receives $key, $value

  // Remove fields from order
  case 'UserEventsOnBeforeRemoveFromOrder'; break; // receives $key
  case 'UserEventsOnRemoveFromOrder'; break; // receives $key

  // Submit order
  case 'UserEventsOnSubmitOrder'; break; // optional $data array to override fields

  // Create order
  case 'UserEventsOnBeforeCreateOrder'; break; // receives $order with related objects
  case 'UserEventsOnCreateOrder'; break; // same

  // Clear order
  case 'UserEventsOnBeforeEmptyOrder'; break; // receives $order only
  case 'UserEventsOnEmptyOrder'; break; // receives $order only

  // Order status change (payment, cancel, etc.)
  case 'msOnBeforeChangeOrderStatus': break; // receives $order and status id in $status
  case 'msOnChangeOrderStatus': break; // receives $order and status id in $status
}
?>

All events also receive the $order object.