События
Доступны следующие события
msOnBeforeAddToCart
product
- объект msProductcount
- кол-во продуктаoptions
- массив опцийcart
- экземпляр класса корзина
msOnAddToCart
- добавление продукта корзиныkey
- ключ продуктаcart
- экземпляр класса корзина
msOnBeforeChangeInCart
msOnChangeInCart
- изменение продукта корзиныkey
- ключ продуктаcount
- кол-во продуктаcart
- экземпляр класса корзина
msOnBeforeRemoveFromCart
msOnRemoveFromCart
- удаление продукта корзиныkey
- ключ продуктаcart
- экземпляр класса корзина
msOnBeforeEmptyCart
msOnEmptyCart
- очистка корзиныcart
- экземпляр класса корзина
msOnGetStatusCart
- статус корзиныstatus
- статусcart
- экземпляр класса корзина
msOnBeforeAddToOrder
msOnAddToOrder
- добавление поля заказаkey
- ключ поляvalue
- значение поляorder
- экземпляр класса заказ
msOnBeforeValidateOrderValue
msOnValidateOrderValue
- валидация поля заказаkey
- ключ поляvalue
- значение поляorder
- экземпляр класса заказ
msOnBeforeRemoveFromOrder
msOnRemoveFromOrder
- удаление поля заказаkey
- ключ поляorder
- экземпляр класса заказ
msOnBeforeEmptyOrder
msOnEmptyOrder
- очистка заказаorder
- экземпляр класса заказ
msOnBeforeGetOrderCost
order
- экземпляр класса заказcart
- экземпляр класса корзинаwith_cart
- флаг с учетом корзиныonly_cost
- флаг только стоимость
msOnGetOrderCost
- получение стоимости заказаorder
- экземпляр класса заказcart
- экземпляр класса корзинаwith_cart
- флаг с учетом корзиныonly_cost
- флаг только стоимостьcost
- стоимостьdelivery_cost
- стоимость доставки
msOnSubmitOrder
- оформление заказаdata
- данные заказаorder
- экземпляр класса заказ
msOnBeforeChangeOrderStatus
msOnChangeOrderStatus
- смена статуса заказаorder
- объект msOrderstatus
- идентификатор статуса
msOnBeforeGetOrderCustomer
msOnGetOrderCustomer
- получение пользователя заказаorder
- экземпляр класса заказcustomer
- объект modUser
msOnBeforeCreateOrder
msOnCreateOrder
- создание заказаorder
- экземпляр класса заказmsOrder
- объект msOrder
msOnBeforeUpdateOrder
msOnUpdateOrder
- обновление заказаmsOrder
- объект msOrder
msOnBeforeSaveOrder
msOnSaveOrder
- сохранение заказаmode
- режим сохранения new или updobject
- объект msOrdermsOrder
- объект msOrdercacheFlag
- флаг кеширования
msOnBeforeRemoveOrder
msOnRemoveOrder
- удаление заказаid
- id записиobject
- объект msOrdermsOrder
- объект msOrderancestors
- массив where, переданный в метод
msOnBeforeCreateOrderProduct
msOnCreateOrderProduct
- создание продукта заказаmsOrderProduct
- объект msOrderProduct
msOnBeforeUpdateOrderProduct
msOnUpdateOrderProduct
- обновление продукта заказаmsOrderProduct
- объект msOrderProduct
msOnBeforeRemoveOrderProduct
msOnRemoveOrderProduct
- удаление продукта заказа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']