
События
Доступны следующие события
События корзины
msOnBeforeAddToCart- перед добавлением продукта в корзинуproduct- объект msProductcount- кол-во продуктаoptions- массив опцийcart- экземпляр класса корзина
msOnAddToCart- после добавления продукта в корзинуkey- ключ продуктаcart- экземпляр класса корзина
msOnBeforeChangeInCart- перед изменением продукта в корзинеkey- ключ продуктаcount- кол-во продуктаcart- экземпляр класса корзина
msOnChangeInCart- после изменения продукта корзиныkey- ключ продуктаcount- кол-во продуктаcart- экземпляр класса корзина
msOnBeforeRemoveFromCart- перед удалением продукта из корзиныkey- ключ продуктаcart- экземпляр класса корзина
msOnRemoveFromCart- после удаления продукта из корзиныkey- ключ продуктаcart- экземпляр класса корзина
msOnBeforeEmptyCart- перед очисткой корзиныcart- экземпляр класса корзина
msOnEmptyCart- после очистки корзиныcart- экземпляр класса корзина
msOnGetStatusCart- получение статуса корзиныstatus- статусcart- экземпляр класса корзина
События заказа
msOnBeforeAddToOrder- перед добавлением поля заказаkey- ключ поляvalue- значение поляorder- экземпляр класса msOrderHandler
msOnAddToOrder- после добавления поля заказаkey- ключ поляvalue- значение поляorder- экземпляр класса msOrderHandler
msOnBeforeValidateOrderValue- перед валидацией поля заказаkey- ключ поляvalue- значение поляorder- экземпляр класса msOrderHandler
msOnValidateOrderValue- после валидации поля заказаkey- ключ поляvalue- значение поляorder- экземпляр класса msOrderHandler
msOnBeforeRemoveFromOrder- перед удалением поля заказаkey- ключ поляorder- экземпляр класса msOrderHandler
msOnRemoveFromOrder- после удаления поля заказаkey- ключ поляorder- экземпляр класса msOrderHandler
msOnBeforeEmptyOrder- перед очисткой заказаorder- экземпляр класса msOrderHandler
msOnEmptyOrder- после очистки заказаorder- экземпляр класса msOrderHandler
msOnBeforeGetOrderCost- перед получением стоимости заказаorder- экземпляр класса msOrderHandlercart- экземпляр класса корзинаwith_cart- флаг с учетом корзиныonly_cost- флаг только стоимость
msOnGetOrderCost- после получения стоимости заказаorder- экземпляр класса msOrderHandlercart- экземпляр класса корзинаwith_cart- флаг с учетом корзиныonly_cost- флаг только стоимостьcost- стоимостьdelivery_cost- стоимость доставки
msOnSubmitOrder- оформление заказаdata- данные заказаorder- экземпляр класса msOrderHandler
msOnBeforeChangeOrderStatus- перед сменой статуса заказаorder- объект msOrderstatus- новый идентификатор статусаold_status- текущий идентификатор статуса
msOnChangeOrderStatus- после смены статуса заказаorder- объект msOrderstatus- новый идентификатор статусаold_status- предыдущий идентификатор статуса
msOnBeforeGetOrderCustomer- перед получением пользователя заказаorder- экземпляр класса msOrderHandlercustomer-null(пользователь ещё не определён)
msOnGetOrderCustomer- после получения пользователя заказаorder- экземпляр класса msOrderHandlercustomer- объект modUser (илиnull)
msOnBeforeCreateOrder- перед созданием заказаmsOrder- объект msOrderorder- экземпляр класса msOrderHandler
msOnCreateOrder- после создания заказаmsOrder- объект msOrderorder- экземпляр класса msOrderHandler
msOnBeforeMgrCreateOrder- перед созданием заказа из панели управленияobject- объект msOrder
msOnMgrCreateOrder- после создания заказа из панели управленияobject- объект msOrder
msOnBeforeUpdateOrder- перед обновлением заказа из панели управленияobject- объект msOrder
msOnUpdateOrder- после обновления заказа из панели управленияobject- объект msOrder
msOnBeforeSaveOrder- перед сохранением заказа (модель)msOnSaveOrder- после сохранения заказа (модель)mode- режим сохранения new или updobject- объект msOrdermsOrder- объект msOrdercacheFlag- флаг кеширования
msOnBeforeRemoveOrder- перед удалением заказа (модель)msOnRemoveOrder- после удаления заказа (модель)id- id записиobject- объект msOrdermsOrder- объект msOrderancestors- массив where, переданный в метод
События продуктов заказа
msOnBeforeCreateOrderProduct- перед созданием продукта заказаobject- объект msOrderProduct
msOnCreateOrderProduct- после создания продукта заказаobject- объект msOrderProduct
msOnBeforeUpdateOrderProduct- перед обновлением продукта заказаobject- объект msOrderProduct
msOnUpdateOrderProduct- после обновления продукта заказаobject- объект msOrderProduct
msOnBeforeRemoveOrderProduct- перед удалением продукта заказаobject- объект msOrderProduct
msOnRemoveOrderProduct- после удаления продукта заказаobject- объект msOrderProduct
События товаров
msOnGetProductFields- манипуляции с товаром на выводproduct- объект msProductDatadata- массив данных
msOnGetProductPrice- получение цены продуктаproduct- объект msProductDatadata- данные продуктаprice- цена продукта
msOnGetProductWeight- получение веса продуктаproduct- объект msProductDatadata- данные продуктаweight- вес продукта
События менеджера
msOnManagerCustomCssJs- загрузка скриптов minishop2controller- экземпляр класса контроллерpage- идентификатор страницы
msOnBeforeVendorCreate- перед созданием нового производителяmode- для данного события = newdata- данные вендораobject- объект msVendor
msOnAfterVendorCreate- после создания нового производителяmode- для данного события = newid- id созданного вендораdata- данные вендораobject- объект msVendor
msOnBeforeVendorUpdate- перед обновлением производителяmode- для данного события = upddata- данные вендораid- id вендораobject- объект msVendor
msOnAfterVendorUpdate- после обновления производителяmode- для данного события = updid- id вендораobject- объект msVendor
msOnBeforeVendorDelete- перед удалением производителяid- id вендораobject- объект msVendor
msOnAfterVendorDelete- после удаления производителяid- id вендораobject- объект msVendor
Работа с событиями
По большей части события и передаваемые в них данные позволяют вмешаться в процесс, без необходимости править исходный PHP класс и на лету изменить данные. Некоторые события предусматривают возможность остановки процесса и возврата ошибки. Все зависит от того, как вызывается событие, и что происходит с результатом работы этого события, если такой результат есть.
Рассмотрим несколько примеров.
Вы можете предотвратить добавление товара в корзину, создав плагин на событие msOnBeforeAddToCart Достаточно просто вернуть любой текст в метод $modx->event->_output
<?php
if ($modx->event->name = 'msOnBeforeAddToCart') {
$modx->event->output('Error');
}Еще пример. Вы можете "на лету" модифицировать переменные $count и $options добавив нужные значения в $modx->event->returnedValues
<?php
if ($modx->event->name = 'msOnBeforeAddToCart') {
$values = & $modx->event->returnedValues;
$values['count'] = $count + 10;
$values['options'] = array('size' => '99');
}Общее правило для плагинов. Все входящие данные попадают сюда $modx->event->returnedValues
Взаимодействовать можно с числами, строками и массивами данных. Если хотите что то на лету поменять, просто меняйте это в $modx->event->returnedValues
Для удобства можно создать переменную-ссылку $values = & $modx->event->returnedValues; Обратите внимание. Ссылка со знаком & означает, что все что вы напишите в $values сразу же, без дополнительного сохранения появится $modx->event->returnedValues и будет возвращена в класс, вызывающий событие.
Как получить список всех входящих переменных
Это правило работает везде, с любым событием MODX. Достаточно распечатать в лог такой код
<?php
$modx->log(1, print_r(array_keys($scriptProperties), 1));Как вызвать нужно событие в собственном PHP классе
Вызываем нужное событие, передаем в него требуемые параметры. Обратите внимание! Событие плагина не регламентирует того, какие в него передавать параметры. Никто не мешает вам в уже известное, зарегистрированное событие, передать абсолютно произвольный параметр, или наоборот передать меньше параметров чем это указано в документации.
<?php
$params = array(
'count' => 2,
);
$eventName = 'msOnAddToCart';
$modx->invokeEvent($eventName, $params);В самом плагине модифицируем входящий $count У нас есть два равнозначных подхода. У обоих суть изменить глобальный массив $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;
}Далее возвращаемся в код, вызвавший событие. Проверять нужно не $response, а доступный сразу глобально $modx->event->returnedValues
<?php
// Здесь count = 2
$params = array(
'count' => 2,
);
$eventName = 'msOnAddToCart';
$modx->invokeEvent($eventName, $params);
// а вот здесь count уже изменился из плагина
$count = $modx->event->returnedValues['count']