
Events
Available events
Cart events
msOnBeforeAddToCart- before adding product to cartproduct- msProduct objectcount- product quantityoptions- options arraycart- cart class instance
msOnAddToCart- after adding product to cartkey- product keycart- cart class instance
msOnBeforeChangeInCart- before changing product in cartkey- product keycount- product quantitycart- cart class instance
msOnChangeInCart- after changing product in cartkey- product keycount- product quantitycart- cart class instance
msOnBeforeRemoveFromCart- before removing product from cartkey- product keycart- cart class instance
msOnRemoveFromCart- after removing product from cartkey- product keycart- cart class instance
msOnBeforeEmptyCart- before clearing cartcart- cart class instance
msOnEmptyCart- after clearing cartcart- cart class instance
msOnGetStatusCart- getting cart statusstatus- statuscart- cart class instance
Order events
msOnBeforeAddToOrder- before adding order fieldkey- field keyvalue- field valueorder- msOrderHandler class instance
msOnAddToOrder- after adding order fieldkey- field keyvalue- field valueorder- msOrderHandler class instance
msOnBeforeValidateOrderValue- before order field validationkey- field keyvalue- field valueorder- msOrderHandler class instance
msOnValidateOrderValue- after order field validationkey- field keyvalue- field valueorder- msOrderHandler class instance
msOnBeforeRemoveFromOrder- before removing order fieldkey- field keyorder- msOrderHandler class instance
msOnRemoveFromOrder- after removing order fieldkey- field keyorder- msOrderHandler class instance
msOnBeforeEmptyOrder- before clearing orderorder- msOrderHandler class instance
msOnEmptyOrder- after clearing orderorder- msOrderHandler class instance
msOnBeforeGetOrderCost- before getting order costorder- msOrderHandler class instancecart- cart class instancewith_cart- include cart flagonly_cost- cost only flag
msOnGetOrderCost- after getting order costorder- msOrderHandler class instancecart- cart class instancewith_cart- include cart flagonly_cost- cost only flagcost- costdelivery_cost- delivery cost
msOnSubmitOrder- order submissiondata- order dataorder- msOrderHandler class instance
msOnBeforeChangeOrderStatus- before order status changeorder- msOrder objectstatus- new status idold_status- current status id
msOnChangeOrderStatus- after order status changeorder- msOrder objectstatus- new status idold_status- previous status id
msOnBeforeGetOrderCustomer- before getting order customerorder- msOrderHandler class instancecustomer-null(customer not yet determined)
msOnGetOrderCustomer- after getting order customerorder- msOrderHandler class instancecustomer- modUser object (ornull)
msOnBeforeCreateOrder- before creating ordermsOrder- msOrder objectorder- msOrderHandler class instance
msOnCreateOrder- after creating ordermsOrder- msOrder objectorder- msOrderHandler class instance
msOnBeforeMgrCreateOrder- before creating order from the manager panelobject- msOrder object
msOnMgrCreateOrder- after creating order from the manager panelobject- msOrder object
msOnBeforeUpdateOrder- before updating order from the manager panelobject- msOrder object
msOnUpdateOrder- after updating order from the manager panelobject- msOrder object
msOnBeforeSaveOrder- before saving order (model)msOnSaveOrder- after saving order (model)mode- save mode new or updobject- msOrder objectmsOrder- msOrder objectcacheFlag- cache flag
msOnBeforeRemoveOrder- before removing order (model)msOnRemoveOrder- after removing order (model)id- record idobject- msOrder objectmsOrder- msOrder objectancestors- where array passed to the method
Order product events
msOnBeforeCreateOrderProduct- before creating order productobject- msOrderProduct object
msOnCreateOrderProduct- after creating order productobject- msOrderProduct object
msOnBeforeUpdateOrderProduct- before updating order productobject- msOrderProduct object
msOnUpdateOrderProduct- after updating order productobject- msOrderProduct object
msOnBeforeRemoveOrderProduct- before removing order productobject- msOrderProduct object
msOnRemoveOrderProduct- after removing order productobject- msOrderProduct object
Product events
msOnGetProductFields- product output manipulationproduct- msProductData objectdata- data array
msOnGetProductPrice- getting product priceproduct- msProductData objectdata- product dataprice- product price
msOnGetProductWeight- getting product weightproduct- msProductData objectdata- product dataweight- product weight
Manager events
msOnManagerCustomCssJs- loading minishop2 scriptscontroller- controller class instancepage- page id
msOnBeforeVendorCreate- before creating new vendormode- for this event = newdata- vendor dataobject- msVendor object
msOnAfterVendorCreate- after creating new vendormode- for this event = newid- created vendor iddata- vendor dataobject- msVendor object
msOnBeforeVendorUpdate- before updating vendormode- for this event = upddata- vendor dataid- vendor idobject- msVendor object
msOnAfterVendorUpdate- after updating vendormode- for this event = updid- vendor idobject- msVendor object
msOnBeforeVendorDelete- before deleting vendorid- vendor idobject- msVendor object
msOnAfterVendorDelete- after deleting vendorid- vendor idobject- msVendor object
Working with events
For the most part, events and the data passed to them let you hook into the process without editing the original PHP class and change data on the fly. Some events allow stopping the process and returning an error. It all depends on how the event is invoked and what happens with the result of that event, if any.
Consider a few examples.
You can prevent adding a product to the cart by creating a plugin on the msOnBeforeAddToCart event Simply return any text in the $modx->event->_output method
<?php
if ($modx->event->name = 'msOnBeforeAddToCart') {
$modx->event->output('Error');
}Another example. You can modify the $count and $options variables on the fly by adding the needed values to $modx->event->returnedValues
<?php
if ($modx->event->name = 'msOnBeforeAddToCart') {
$values = & $modx->event->returnedValues;
$values['count'] = $count + 10;
$values['options'] = array('size' => '99');
}General rule for plugins. All incoming data goes into $modx->event->returnedValues
You can work with numbers, strings and data arrays. If you want to change something on the fly, just change it in $modx->event->returnedValues
For convenience you can create a reference variable $values = & $modx->event->returnedValues; Note. The reference with the & sign means that whatever you write to $values will immediately appear in $modx->event->returnedValues without extra saving and will be returned to the class that invoked the event.
How to get a list of all incoming variables
This rule works everywhere, with any MODX event. Just log this code
<?php
$modx->log(1, print_r(array_keys($scriptProperties), 1));How to invoke the needed event in your own PHP class
Invoke the needed event and pass the required parameters to it. Note! The plugin event does not dictate which parameters to pass. Nothing stops you from passing an arbitrary parameter to a known, registered event, or passing fewer parameters than documented.
<?php
$params = array(
'count' => 2,
);
$eventName = 'msOnAddToCart';
$modx->invokeEvent($eventName, $params);In the plugin we modify the incoming $count We have two equivalent approaches. Both aim to change the global array $modx->event->returnedValues
<?php
switch ($modx->event->name) {
case "msOnAddToCart":
$sp = &$scriptProperties;
$sp['count'] = 100;
$modx->event->returnedValues = $sp;
break;
}<?php
if ($modx->event->name = 'msOnAddToCart') {
$values = & $modx->event->returnedValues;
$values['count'] = $count + 10;
}Then we return to the code that invoked the event. You need to check not $response, but the globally available $modx->event->returnedValues
<?php
// Here count = 2
$params = array(
'count' => 2,
);
$eventName = 'msOnAddToCart';
$modx->invokeEvent($eventName, $params);
// and here count has already been changed by the plugin
$count = $modx->event->returnedValues['count']