
События
Доступны следующие события
msOnBeforeAddToCartproduct- объект msProductcount- кол-во продуктаoptions- массив опцийcart- экземпляр класса корзина
msOnAddToCart- добавление продукта корзиныkey- ключ продуктаcart- экземпляр класса корзина
msOnBeforeChangeInCartmsOnChangeInCart- изменение продукта корзиныkey- ключ продуктаcount- кол-во продуктаcart- экземпляр класса корзина
msOnBeforeRemoveFromCartmsOnRemoveFromCart- удаление продукта корзиныkey- ключ продуктаcart- экземпляр класса корзина
msOnBeforeEmptyCartmsOnEmptyCart- очистка корзиныcart- экземпляр класса корзина
msOnGetStatusCart- статус корзиныstatus- статусcart- экземпляр класса корзина
msOnBeforeAddToOrdermsOnAddToOrder- добавление поля заказаkey- ключ поляvalue- значение поляorder- экземпляр класса заказ
msOnBeforeValidateOrderValuemsOnValidateOrderValue- валидация поля заказаkey- ключ поляvalue- значение поляorder- экземпляр класса заказ
msOnBeforeRemoveFromOrdermsOnRemoveFromOrder- удаление поля заказаkey- ключ поляorder- экземпляр класса заказ
msOnBeforeEmptyOrdermsOnEmptyOrder- очистка заказаorder- экземпляр класса заказ
msOnBeforeGetOrderCostorder- экземпляр класса заказcart- экземпляр класса корзинаwith_cart- флаг с учетом корзиныonly_cost- флаг только стоимость
msOnGetOrderCost- получение стоимости заказаorder- экземпляр класса заказcart- экземпляр класса корзинаwith_cart- флаг с учетом корзиныonly_cost- флаг только стоимостьcost- стоимостьdelivery_cost- стоимость доставки
msOnSubmitOrder- оформление заказаdata- данные заказаorder- экземпляр класса заказ
msOnBeforeChangeOrderStatusmsOnChangeOrderStatus- смена статуса заказаorder- объект msOrderstatus- идентификатор статуса
msOnBeforeGetOrderCustomermsOnGetOrderCustomer- получение пользователя заказаorder- экземпляр класса заказcustomer- объект modUser
msOnBeforeCreateOrdermsOnCreateOrder- создание заказаorder- экземпляр класса заказmsOrder- объект msOrder
msOnBeforeUpdateOrdermsOnUpdateOrder- обновление заказаmsOrder- объект msOrder
msOnBeforeSaveOrdermsOnSaveOrder- сохранение заказаmode- режим сохранения new или updobject- объект msOrdermsOrder- объект msOrdercacheFlag- флаг кеширования
msOnBeforeRemoveOrdermsOnRemoveOrder- удаление заказаid- id записиobject- объект msOrdermsOrder- объект msOrderancestors- массив where, переданный в метод
msOnBeforeCreateOrderProductmsOnCreateOrderProduct- создание продукта заказаmsOrderProduct- объект msOrderProduct
msOnBeforeUpdateOrderProductmsOnUpdateOrderProduct- обновление продукта заказаmsOrderProduct- объект msOrderProduct
msOnBeforeRemoveOrderProductmsOnRemoveOrderProduct- удаление продукта заказаmsOrderProduct- объект 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']