
Events
Available events
msOnBeforeAddToCartproduct- msProduct objectcount- product quantityoptions- options arraycart- cart class instance
msOnAddToCart- adding product to cartkey- product keycart- cart class instance
msOnBeforeChangeInCartmsOnChangeInCart- changing product in cartkey- product keycount- product quantitycart- cart class instance
msOnBeforeRemoveFromCartmsOnRemoveFromCart- removing product from cartkey- product keycart- cart class instance
msOnBeforeEmptyCartmsOnEmptyCart- clearing cartcart- cart class instance
msOnGetStatusCart- cart statusstatus- statuscart- cart class instance
msOnBeforeAddToOrdermsOnAddToOrder- adding order fieldkey- field keyvalue- field valueorder- order class instance
msOnBeforeValidateOrderValuemsOnValidateOrderValue- order field validationkey- field keyvalue- field valueorder- order class instance
msOnBeforeRemoveFromOrdermsOnRemoveFromOrder- removing order fieldkey- field keyorder- order class instance
msOnBeforeEmptyOrdermsOnEmptyOrder- clearing orderorder- order class instance
msOnBeforeGetOrderCostorder- order class instancecart- cart class instancewith_cart- include cart flagonly_cost- cost only flag
msOnGetOrderCost- getting order costorder- order class instancecart- cart class instancewith_cart- include cart flagonly_cost- cost only flagcost- costdelivery_cost- delivery cost
msOnSubmitOrder- order submissiondata- order dataorder- order class instance
msOnBeforeChangeOrderStatusmsOnChangeOrderStatus- order status changeorder- msOrder objectstatus- status id
msOnBeforeGetOrderCustomermsOnGetOrderCustomer- getting order customerorder- order class instancecustomer- modUser object
msOnBeforeCreateOrdermsOnCreateOrder- creating orderorder- order class instancemsOrder- msOrder object
msOnBeforeUpdateOrdermsOnUpdateOrder- updating ordermsOrder- msOrder object
msOnBeforeSaveOrdermsOnSaveOrder- saving ordermode- save mode new or updobject- msOrder objectmsOrder- msOrder objectcacheFlag- cache flag
msOnBeforeRemoveOrdermsOnRemoveOrder- removing orderid- record idobject- msOrder objectmsOrder- msOrder objectancestors- where array passed to the method
msOnBeforeCreateOrderProductmsOnCreateOrderProduct- creating order productmsOrderProduct- msOrderProduct object
msOnBeforeUpdateOrderProductmsOnUpdateOrderProduct- updating order productmsOrderProduct- msOrderProduct object
msOnBeforeRemoveOrderProductmsOnRemoveOrderProduct- removing order productmsOrderProduct- msOrderProduct object
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
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']