Общие сведения
Система событий – инструмент, который позволяет изменять стандартный ход работы системы путем установки обработчиков для различных событий системы. Результат работы обработчиков может учитываться системой и корректировать общий ход выполнения программы
Классы для работы с событиями располагаются в пространстве имен RS::Event.
Для сбора обработчиков происходит поиск в пространстве имен ИМЯ_МОДУЛЯ\Config классов MyHandlers, и в случае, если класс не найден происходит поиск класса Handlers. Найденный класс должен быть потомком класса RS::Event::HandlerAbstract. Далее у найденного класса вызывается метод init(), в котором ожидается, что модуль установит обработчики на события системы.
В классе RS::Event::HandlerAbstract имеется метод RS::Event::HandlerAbstract::bind для упрощенной регистрации обработчиков событий. Рассмотрим пример класса Handlers:
<?php
namespace Article\Config;
{
{
$this
->bind('getroute')
->bind('getpages');
}
public static function getRoute($routes)
{
}
{
}
}
Установка обработчика события
Для назначения обработчика можно использовать метод RS::Event::Manager::bind. Метод принимает 4 параметра:
- string $event - имя события
- mixed $callback_class - класс обработчика события. может принимать значения следующих типов
- объект Closure - анонимную функцию.
- object - объект instance класса
- string - имя класса в виде строки
- string $callback_method - имя метода обработчика. Используется, когда в $callback_class имеет тип object или string. Если не указать, то имя метода будет сформировано из имени события, исключая символы .[точка],-[минус].
- integer $priority - приоритет. Чем он выше, тем раньше будет выполнено обработчик события
В функцию обработки события передается 2 аргумента:
- mixed $params - параметр, который был передан в момент вызова события
- object $event - объект RS::Event::Event - объект, содержащий сведения о выполняемом событии
Ожидается, что функция обработки события может возвращать следующие значения:
- null, в этом случае, следующий обработчик получит в $params - тот же параметр, который получил текущий обработчик.
- значение того же типа, что и $params. Это будет означать, что обработчик что-то мог изменить в переменной. Следующий обработчик получит в $params - результат выполнения текущей функции.
- возврат иного значения вызовет исключение
$params[] = new \RS\Router\Route('article-front-view', '/text-{category}/{id}/', null, 'Просмотр новости');
return $params;
});
$params->getPropertyIterator()->append(array(
'Новая закладка',
'test_field' => new OrmType\Varchar(array(
'description' => 'Тестовое поле',
))
));
});
Любой обработчик события может остановить событие, а соответственно прервать вызов последующих обработчиков. Для некоторых событий это означает, что необходимо отменить действие, перед которым вызвано событие. Для остановки события, необходимо вызвать метод stopPropagation у объекта RS::Event::Event, который передается в функцию-обработчик вторым аргументом.
Например, чтобы прервать сохранение ORM-объекта товара достаточно объявить следующий обработчик.
$product = $params['orm'];
$product->addError('Не хочу обновлять товар!');
$event->stopPropagation();
}
Генерация события
Для генерации собственного события существует метод RS::Event::Manager::fire. Метод принимает 2 аргумента:
- string $event - строковое имя события
- mixed $params - произвольный параметр, поступающий в событие
'param1' => 'value1',
'param2' => 'value2'
));
Результат выполнения события возвращается в виде объекта RS::Event::Result. Чтобы узнать было ли остановлено событие каким-либо из обработчиков, можно воспользоваться следующей конструкцией:
if ($event_result->getEvent()->isStopped()) {
echo "Событие было остановлено"
}
Чтобы получить параметр, переданный в событие с учетом изменений, которые обработчики могли вносить в него, следует воспрользоваться следующей конструкцией:
$result = $event_result->getResult();
Полный список событий в ReadyScript
initialize
Вызывается cразу после инициализации системных классов, перед вызовом события start. Событие создано для инициализации низкоуровневых процессов. Например, для расширения поведения других классов.
| Тип входящего параметра: | нет параметров |
Пример:
namespace ModuleName\Config;
{
function init()
{
$this->bind('initialize');
}
public static function initialize()
{
}
}
start
Вызывается перед вызовом диспетчера маршрутов в файле /index.php
| Тип входящего параметра: | нет параметров |
Пример:
namespace ModuleName\Config;
{
function init()
{
$this->bind('start');
}
public static function start()
{
}
}
stop
Вызывается окончанием выполнения скрипта. Все данные уже отданы в output
| Тип входящего параметра: | нет параметров |
Пример:
namespace ModuleName\Config;
{
function init()
{
$this->bind('stop');
}
public static function stop()
{
}
}
getroute
Вызывается в начале работы скрипта. Событие формирует список всех маршрутов, которые будет обрабатывать система.
Пример:
namespace ModuleName\Config;
{
function init()
{
$this->bind('getroute');
}
public static function getroute($routes)
{
$routes[] = new \RS\Router\Route('modulename-front-page', array(
'/testpage/',
), null, t('Демо страница по адресу /testpage/'));
return $routes;
}
}
applyroute
Выполняется после определения и установки маршрута в качестве текущего.
namespace ModuleName\Config;
{
function init()
{
$this->bind('applyroute');
}
public static function applyRoute($pages)
{
}
}
getpages
Вызывается для формирования списка страниц, которые нужно включить в sitemap
| Тип входящего параметра: | array |
| Описание входящего параметра: | Массив массивов с элементами, присутствующими в sitemap:
-
loc - URL страницы
-
lastmod - дата последнего изменения страницы
-
...
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('getpages');
}
public static function getPages($pages)
{
$api = new \Affiliate\Model\AffiliateApi();
$api->setFilter(array(
'public' => 1,
'clickable' => 1
));
$list = $api->getListAsArray();
foreach($list as $item) {
$url = $router->getUrl('affiliate-front-contacts', array('affiliate' => $item['alias']));
$pages[$url] = array(
'loc' => $url
);
}
return $pages;
}
}
getmenus
Вызывается перед рендерингом меню панели администратора
| Тип входящего параметра: | array |
| Описание входящего параметра: | Массив массивов с элементами, присутствующими в меню панели администратора |
namespace ModuleName\Config;
{
function init()
{
$this->bind('getmenus');
}
public static function getMenus($items)
{
$items[] = array(
'title' => 'Правила для корзины',
'alias' => 'cartrules',
'link' => '%ADMINPATH%/cartrules-ctrl/',
'typelink' => 'link',
'parent' => 'orders',
'sortn' => 3
);
return $items;
}
}
cron
Вызывается ежеминутно, в случае корректной настройки внутреннего планировщика заданий ReadyScript. Событие вызывается вне контекста мультисайта, соответственно внутри события нужно самостоятельно выполнять действия в рамках каждого мультисайта, если этого предполагает логика вашего обработчика.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
last_time - timestamp предыдущего запуска
-
current_time - timestamp текущего запуска
-
minutes - массив, номер минуты текущего запуска + список номеров минут для которых был пропущен запуск
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('cron');
}
public static function cron($params)
{
if (in_array(0, $params['minutes'])) {
foreach($sites as $site) {
if ($config['here_your_param'])
{
}
}
}
}
}
render.beforeoutput
Вызывается сразу после рендеринга HTML страницы в методе RS::Application::Block::renderLayout.
| Тип входящего параметра: | string |
| Описание входящего параметра: | Готовый HTML контент |
namespace ModuleName\Config;
{
function init()
{
$this->bind('render.beforeoutput');
}
public static function renderBeforeOutput($html)
{
return str_replace('Иван', 'Аркадий', $html);
}
}
user.auth
Вызывается после успешной авторизации пользователя
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('user.auth');
}
public static function userAuth($params)
{
$user = $params['user'];
if ($user['name'] == 'Иван') {
}
}
}
user.logout
Вызывается после намеренного выхода пользователя
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('user.logout');
}
public static function userLogout($params)
{
$user = $params['user'];
echo 'Пользователь '.$user['name'].' вышел из системы';
}
}
controller.beforewrap
Вызывается перед добавлением секции BODY к сформированному HTML. Допускается модификация сформированного HTML.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
controller - объект контроллера
-
body - сформированный HTML для вставки в элемент BODY
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('controller.beforewrap');
}
public static function controllerBeforeWrap(array $params)
{
$controller = $params['controller'];
if (!\RS\Router\Manager::obj()->isAdminZone()) {
$controller->app->title->clean()->addSection('Кастомный заголовок');
$controller->app->meta->cleanMeta('keywords')->addKeywords('Кастомные ключевые слова');
$controller->app->meta->cleanMeta('description')->addDescriptions(t('Кастомное описание'));
}
}
}
controller.beforeexec.КОРОТКОЕ-ИМЯ-КОНТРОЛЛЕРА
Вызывается перед выполнением действия контроллера. Если обработчик возвращает массив с ключем output, то действие контроллера не выполняется, а возвращается содержимое, содержащееся в значении output.
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-КОНТРОЛЛЕРА - формируется из имени класса контроллера включая namespace, путем замены обратных слешей на минусы, и исключения секции -controller. Минусы по краям удаляются. Вся строка приводится к нижнему регистру. Например, если имя контроллера: Catalog::Controller::Front::ListProducts, то его сокращенное имя будет: catalog-front-listproducts
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
controller - объект контроллера
-
action - строка, название действия контроллера
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('controller.beforeexec.catalog-front-listproducts');
}
public static function controllerBeforeExecCatalogFrontListProducts(array $params)
{
$controller = $params['controller'];
$action = $params['action'];
if ($action == 'index') {
$params['output'] = 'Здесь наше собственное содержимое, вместо списка товаров';
}
return $params;
}
}
controller.afterexec.КОРОТКОЕ-ИМЯ-КОНТРОЛЛЕРА
Вызывается после выполнения действия контроллера. Вывод еще не отправлен в output
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-КОНТРОЛЛЕРА - аналогично событию controller.beforeexec....
| Тип входящего параметра: | string или object |
| Описание входящего параметра: | Результат выполнения действия(action) контроллера |
namespace ModuleName\Config;
{
function init()
{
$this->bind('controller.afterexec.catalog-front-listproducts');
}
public static function controllerAfterExecCatalogFrontListProducts($params)
{
if ($params instanceof \RS\Controller\Result\ITemplateResult)
{
$vars = $params->getTemplateVars();
if (!$vars['list'] && $params->getTemplate() == 'list_products.tpl') {
$params->setTemplate('%modulename%/my_custom_empty_list_products.tpl');
}
}
}
}
controller.exec.КОРОТКОЕ-ИМЯ-КОНТРОЛЛЕРА.ИМЯ_ДЕЙСТВИЯ
Вызывается классом RS::Controller::Admin::Crud после выполнения метода helperИМЯ_ДЕЙСТВИЯ.
Данное событие используется для изменения внешнего вида разделов административной панели.
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-КОНТРОЛЛЕРА - аналогично событию controller.beforeexec....
ИМЯ_ДЕЙСТВИЯ - имя действия контроллера, без префикса action.
namespace ModuleName\Config;
{
function init()
{
$this->bind('controller.exec.catalog-admin-ctrl.index');
}
public static function controllerExecCatalogAdminCtrlIndex(\RS\Controller\Admin\Helper\CrudCollection $helper)
{
$filter_date = new \RS\Html\Filter\Type\DateRange('custom_date', t('Фильтр по дате'));
$filter_string = new \RS\Html\Filter\Type\Text('custom_string', t('Фильтр по строке'));
$filter_string->setSearchType('%like%');
$filter_integer = new \RS\Html\Filter\Type\Text('custom_integer', t('Фильтр по числу'));
$filter_integer->setShowType();
$filter_list = new \RS\Html\Filter\Type\Select('custom_list', t('Фильтр по списку'), array(
'' => t('Не выбрано'),
'value1' => 'Значение 1',
'value2' => 'Значение 2',
'value3' => 'Значение 3'
));
$line = new \RS\Html\Filter\Line();
$line->addItem($filter_date);
$line->addItem($filter_string);
$line->addItem($filter_integer);
$line->addItem($filter_list);
$helper
->getFilter()
->getContainer()
->addLine($line);
}
}
listproducts.beforegetlist
Вызывается в контроллере listproducts перед запросом на получение списка товаров, когда все фильтры установлены.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
controller - объект контроллера
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('listproducts.beforegetlist');
}
public static function listproductsBeforeGetList(array $params)
{
$controller = $params['controller'];
$api = $controller->api;
$api->setFilter('num', 10, '>');
}
}
module.install.ИМЯ-МОДУЛЯ
Вызывается сразу после установки модуля
Правила формирования имени события:
ИМЯ-МОДУЛЯ - соответствует имени папки, в которой находится модуль
| Тип входящего параметра: | RS::Module::Item |
| Описание входящего параметра: | Объект установленного модуля |
namespace ModuleName\Config;
{
function init()
{
$this->bind('module.install.shop');
}
public static function moduleInstallShop($module_item)
{
}
}
module.beforeuninstall.ИМЯ-МОДУЛЯ
Вызывается перед удалением модуля
Правила формирования имени события:
ИМЯ-МОДУЛЯ - аналогично событию module.install....
| Тип входящего параметра: | RS::Module::Item |
| Описание входящего параметра: | Объект установленного модуля |
namespace ModuleName\Config;
{
function init()
{
$this->bind('module.beforeuninstall.seocontrol');
}
public static function moduleBeforeUninstallSeocontrol($module_item, $event)
{
$event->addError(t('Нельзя удалять данный модуль'))->stopPropagation();
}
}
module.afteruninstall.ИМЯ-МОДУЛЯ
Вызывается после удаления модуля
Правила формирования имени события:
ИМЯ-МОДУЛЯ - аналогично событию module.install....
| Тип входящего параметра: | RS::Module::Item |
| Описание входящего параметра: | Объект установленного модуля |
namespace ModuleName\Config;
{
function init()
{
$this->bind('module.afteruninstall.seocontrol');
}
public static function moduleAfterUninstallSeocontrol($module_item, $event)
{
}
}
module.getrights.ИМЯ-МОДУЛЯ
Вызывается при инициализации объекта прав модуля
Правила формирования имени события:
ИМЯ-МОДУЛЯ - аналогично событию module.install....
| Тип входящего параметра: | (RS::AccessControl::Right|RS::AccessControl::RightGroup)[] |
| Описание входящего параметра: | Массив объектов прав |
namespace ModuleName\Config;
{
function init()
{
$this->bind('module.getrights.seocontrol');
}
public static function moduleGetRightsSeocontrol($rights)
{
$rights[] = new \RS\AccessControl\Right('right_id', t('Наименование права')),
...
return $rights;
}
}
module.getcheckers.ИМЯ-МОДУЛЯ
Вызывается при инициализации объекта прав модуля
Правила формирования имени события:
ИМЯ-МОДУЛЯ - аналогично событию module.install....
namespace ModuleName\Config;
{
function init()
{
$this->bind('module.getcheckers.seocontrol');
}
public static function moduleGetCheckersSeocontrol($checkers)
{
$checkers[] = new \RS\AccessControl\AutoCheckers\AutoCheckerInterface('', '*', '*', array(), 'right_id'),
...
return $checkers;
}
}
orm.init.КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА
Вызывается после вызова метода init у ORM объектов. Данное событие может использоваться для изменения структуры полей ORM объекта
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА - формируется из имени класса контроллера включая namesapce, путем замены обратных слешей на минусы, и исключения секции -model-orm. Минусы по краям удаляются. Вся строка приводится к нижнему регистру. Например, если имя контроллера: Catalog::Model::Orm::Product, то его сокращенное имя будет: catalog-product
| Тип входящего параметра: | RS::ORM::AbstractObject |
| Описание входящего параметра: | Инициализируемый ORM объект |
namespace ModuleName\Config;
{
function init()
{
$this->bind('orm.init.shop-order');
}
public static function ormInitShopOrder(\Shop\Model\Orm\Order $order)
{
$order->getPropertyIterator()->append(array(
'custom_field' => new \RS\Orm\Type\Mixed(array(
'description' => t('Важная информация'),
'infoVisible' => true,
'template' => '%modulename%/form/order/custom_field.tpl'
))
));
}
}
orm.beforewrite.КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА
Вызывается перед записью ORM объекта в базу данных
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА - аналогично событию orm.init....
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
orm - ORM объект
-
flag - флаг операции. Может принимать значения: insert, update, delete
-
on_duplicate_update_keys - поля, которые необходимо обновить в случае если запись уже существует
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('orm.beforewrite.shop-order');
}
public static function ormBeforeWriteShopOrder($params)
{
if ($partner) {
$order = $params['orm'];
$order->addExtraInfoLine(t('Оформлен от партнера'), $partner['title'], array(
'partner_id' => $partner['id']
));
$order['partner_id'] = $partner['id'];
}
}
}
orm.afterwrite.КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА
Вызывается после записи ORM объекта в базу данных. Если у объекта объявлено поле AUTO_INCREMENT PRIMARY KEY, то в нем уже будет ID.
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА - аналогично событию orm.init....
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
orm - ORM объект
-
flag - флаг операции. Может принимать значения: insert, update, delete
-
on_duplicate_update_keys - поля, которые необходимо обновить в случае если запись уже существует
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('orm.afterwrite.shop-order');
}
public static function ormAfterwriteShopOrder($data)
{
if (\RS\Config\Loader::byModule(__CLASS__)->push_enable
&& $data['flag'] == \RS\Orm\AbstractObject::UPDATE_FLAG && $data['orm']['notify_user'])
{
$push = new \MobileSiteApp\Model\Push\OrderChangeToUser();
$push->init($data['orm']);
$push->send();
}
}
}
orm.clone.КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА
Вызывается перед удалением ORM объекта из базы данных
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА - аналогично событию orm.init....
namespace ModuleName\Config;
{
function init()
{
$this->bind('orm.clone.shop-order');
}
public static function ormCloneShopOrder($cloned_order)
{
$cloned_order['user_fio'] = 'Имя по умолчанию';
}
}
orm.delete.КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА
Вызывается перед удалением ORM объекта из базы данных
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА - аналогично событию orm.init....
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
{
function init()
{
$this->bind('orm.delete.catalog-product');
}
public static function ormDeleteCatalogProduct($params)
{
$product = $params['orm'];
$file_api = new \Files\Model\FileApi();
$file_api->setFilter('link_id', $product['id']);
$file_api->setFilter('link_type_class', 'files-catalogproduct');
$files = $file_api->getList();
foreach ($files as $file) {
$file->delete();
}
}
}
orm.afterload.КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА
Вызывается сразу после загрузки объекта из базы данных
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА - аналогично событию orm.init....
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
{
function init()
{
$this->bind('orm.afterload.catalog-product');
}
public static function ormAfterloadCatalogProduct($params)
{
$product = $params['orm'];
}
}
theme.getcontextlist
Вызывается для формирования списка Контекстов, присутствующих в системе. Контекст - определяет отличное отображение темы оформления.
| Тип входящего параметра: | array of string |
| Описание входящего параметра: | Массив контекстов |
namespace ModuleName\Config;
{
function init()
{
$this->bind('theme.getcontextlist');
}
public static function themeGetContextList($contexts)
{
$contexts += array(
'young' => array(
'title' => t('Детская'),
'theme' => 'young'
),
'fashion' => array(
'title' => t('Молодежная'),
'theme' => 'fashion'
),
'perfume' => array(
'title' => t('Воздушная'),
'theme' => 'perfume'
),
'default' => array(
'title' => t('Классическая'),
'theme' => 'default'
)
);
return $contexts;
}
}
alerts.getsmssenders
Вызывается для формирования списка Сервисов, осуществляющих отправку уведомлений по СМС.
| Тип входящего параметра: | array of Alerts::Model::Sms::AbstractSender |
| Описание входящего параметра: | Массив объектов, через которые осуществляется отправка SMS |
namespace SMSImobis\Config;
{
function init()
{
$this->bind('alerts.getsmssenders');
}
public static function alertsGetSMSSenders($list)
{
$list[] = new \SMSImobis\Model\SMS\IMobis\Sender();
return $list;
}
}
export.gettypes
Вызывается для формирования списка сервисов, осуществляющих экспорт товаров.
namespace ModuleName\Config;
{
function init()
{
$this->bind('export.gettypes');
}
public static function exportGetTypes($list)
{
$list[] = new \Export\Model\ExportType\Yandex\Yandex();
$list[] = new \Export\Model\ExportType\MailRu\MailRu();
$list[] = new \Export\Model\ExportType\Google\Google();
return $list;
}
}
install.complete
Вызывается сразу после установки копии ReadyScript
| Тип входящего параметра: | нет параметров |
namespace ModuleName\Config;
{
function init()
{
$this->bind('install.complete');
}
public static function installComplete()
{
}
}
cart.addproduct.before
Вызывается перед добавлением товара в корзину
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
cart - объект Shop::Model::Cart
-
product_id - ID добавляемого товара
-
amount - количество
-
offer - комплектация товара
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('cart.addproduct.before');
}
public static function cartAddProductBefore($params)
{
$product = new \Catalog\Model\Orm\Product($params['product_id']);
$params['amount'] = 10;
return $params;
}
}
cart.addproduct.after
Вызывается после добавления товара в корзину
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
cart - объект Shop::Model::Cart
-
product_id - ID добавляемого товара
-
amount - количество
-
offer - комплектация товара
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('cart.addproduct.after');
}
public static function cartAddProductAfter($params)
{
}
}
cart.update.before
Вызывается перед обновлением товара в корзине. Все входящие параметры можно модифицировать. Если событие будет остановлено, то операция не будет выполняться.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
cart - объект Shop::Model::Cart
-
products - array массив со сведениями для обновления
[
'КЛЮЧ ЭЛЕМЕНТА В КОРЗИНЕ' => [
'amount' => Количество товара
'offer' => Номер комплектации
'multioffers' => [
'ID характеристики' => 'Значение',
'ID характеристики' => 'Значение',
...
]
] ]
-
coupon - номер скидочного купона
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('cart.update.before');
}
public static function cartUpdateBefore($params)
{
$cart = $params['cart'];
$items = $cart->getProductItems();
foreach($params['products'] as $uniq => $data) {
$product = new \Catalog\Model\Orm\Product($items[$uniq]['product']['id']);
if ($product['alias'] == 'test') {
$params['products'][$uniq]['amount'] = 10;
}
}
return $params;
}
cart.update.after
Вызывается после обновлением товара в корзине
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
cart - объект Shop::Model::Cart
-
products - array массив со сведениями для обновления
[
'ключ элемента в корзине' => [
'amount' => Количество товара
'offer' => Номер комплектации
'multioffers' => [
'ID характеристики' => 'Значение',
'ID характеристики' => 'Значение',
...
]
] ]
-
coupon - номер скидочного купона
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('cart.update.after');
}
public static function cartUpdateAfter($params)
{
}
}
cart.removeitem.before
Вызывается перед удалением элемента из корзины. Если событие будет остановлено, то операция не будет выполняться.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('cart.removeitem.before');
}
public static function cartRemoveItemBefore($params, $event)
{
$event->stopPropagation();
}
}
cart.removeitem.after
Вызывается после удаления элемента из корзины
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('cart.removeitem.after');
}
public static function cartRemoveItemAfter($params, $event)
{
}
}
cart.addcoupon.before
Вызывается перед добавлением купона в корзину. Если событие будет остановлено, то операция не будет выполняться.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('cart.addcoupon.before');
}
public static function cartAddCouponBefore($params, $event)
{
}
}
cart.addcoupon.after
Вызывается после добавления купона в корзину
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('cart.addcoupon.after');
}
public static function cartAddCouponAfter($params)
{
}
}
cart.getcartdata
Вызывается перед отдачей результата методом Shop::Model::Cart::getCartData. Данный метод возвращает все вседения о позициях в корзине.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
cart - объект Shop::Model::Cart
-
cart_result - массив со всеми сведениями о корзине
-
format - true, если необходимо вернуть отформатированные числа
-
use_currency - true, если необходимо вернуть числа в текущей валюте
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('cart.getcartdata');
}
public static function cartGetCartData($params)
{
}
}
cart.getorderdata
Вызывается перед отдачей результата методом Shop::Model::Cart::getOrderData. Данный метод возвращает все вседения о позициях в корзине оформленного заказа.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
cart - объект Shop::Model::Cart
-
cart_result - массив со всеми сведениями о корзине
-
format - true, если необходимо вернуть отформатированные числа
-
use_currency - true, если необходимо вернуть числа в текущей валюте
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('cart.getorderdata');
}
public static function cartGetOrderData($params)
{
}
}
delivery.gettypes
Вызывается для формирования списка расчетных классов доставки в системе
namespace ModuleName\Config;
{
function init()
{
$this->bind('delivery.gettypes');
}
public static function deliveryGetTypes($list)
{
$list[] = new \Shop\Model\DeliveryType\FixedPay();
$list[] = new \Shop\Model\DeliveryType\Myself();
$list[] = new \Shop\Model\DeliveryType\Manual();
$list[] = new \Shop\Model\DeliveryType\Ems();
$list[] = new \Shop\Model\DeliveryType\Spsr();
$list[] = new \Shop\Model\DeliveryType\RussianPost();
$list[] = new \Shop\Model\DeliveryType\Universal();
$list[] = new \Shop\Model\DeliveryType\Sheepla();
$list[] = new \Shop\Model\DeliveryType\Cdek();
return $list;
}
}
payment.gettypes
Вызывается для формирования списка объектов оплаты в системе
namespace ModuleName\Config;
{
function init()
{
$this->bind('payment.gettypes');
}
public static function paymentGetTypes($list)
{
$list[] = new \Shop\Model\PaymentType\Cash();
$list[] = new \Shop\Model\PaymentType\Bill();
$list[] = new \Shop\Model\PaymentType\FormPd4();
$list[] = new \Shop\Model\PaymentType\Robokassa();
$list[] = new \Shop\Model\PaymentType\Assist();
$list[] = new \Shop\Model\PaymentType\PayPal();
$list[] = new \Shop\Model\PaymentType\YandexMoney();
$list[] = new \Shop\Model\PaymentType\PersonalAccount();
$list[] = new \Shop\Model\PaymentType\Toucan();
return $list;
}
}
order.change
Вызывается при создании и изменении заказа
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('order.change');
}
public static function orderChange($param)
{
if ($param['order']['courier_id'] && ($param['order']['courier_id'] != $param['order_before']['courier_id'])) {
}
}
}
printform.getlist
Вызывается для формирования списка печатных форм для заказа
namespace ModuleName\Config;
{
function init()
{
$this->bind('printform.getlist');
}
public static function printFormGetList($list)
{
$list[] = new \Shop\Model\PrintForm\OrderForm();
$list[] = new \Shop\Model\PrintForm\CommodityCheck();
$list[] = new \Shop\Model\PrintForm\DeliveryNote();
return $list;
}
}
csv.beforelineexport.КОРОТКОЕ-ИМЯ-СХЕМЫ-ОБМЕНА
Вызывается перед экспортом одной строки данных в CSV
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-СХЕМЫ-ОБМЕНА - формируется из имени класса Схемы обмена, включая namespace, путем замены обратных слешей на минусы и исключения секции -model-csvschema. Минусы по краям удаляются. Вся строка приводится к нижнему регистру. Например, если имя класса схемы: Catalog::Model::CsvSchema::Product, то его сокращенное имя будет: catalog-product
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
schema - объект схемы обмена, наследник RS::Core::AbstractSchema
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('csv.beforelineexport.catalog-product');
}
public static function csvBeforeLineexportCatalogProduct($params)
{
$schema = $params['schema'];
}
}
csv.beforelineimport.КОРОТКОЕ-ИМЯ-СХЕМЫ-ОБМЕНА
Вызывается перед импортом одной строки данных из CSV
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-СХЕМЫ-ОБМЕНА - аналогично csv.beforelineexport
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
schema - объект схемы обмена, наследник RS::Core::AbstractSchema
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('csv.beforelineimport.catalog-product');
}
public static function csvBeforeLineImportCatalogProduct($params)
{
$schema = $params['schema'];
}
}
csv.afterlineimport.КОРОТКОЕ-ИМЯ-СХЕМЫ-ОБМЕНА
Вызывается после импорта одной строки данных из CSV
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-СХЕМЫ-ОБМЕНА - аналогично csv.beforelineexport
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
schema - объект схемы обмена, наследник RS::Core::AbstractSchema
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('csv.afterlineimport.catalog-product');
}
public static function csvAfterLineImportCatalogProduct($params)
{
$schema = $params['schema'];
}
}
csv.beforeimport.КОРОТКОЕ-ИМЯ-СХЕМЫ-ОБМЕНА
Вызывается перед импортом данных из CSV. Если импорт происходит пошагово, то вызывается перед импортом каждой порции данных.
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-СХЕМЫ-ОБМЕНА - аналогично csv.beforelineexport
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
schema - объект схемы обмена, наследник RS::Core::AbstractSchema
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('csv.beforeimport.catalog-product');
}
public static function csvBeforeImportCatalogProduct($params)
{
$schema = $params['schema'];
}
}
csv.afterimport.КОРОТКОЕ-ИМЯ-СХЕМЫ-ОБМЕНА
Вызывается после импорта данных из CSV. Если импорт происходит пошагово, то вызывается после импорта каждой порции данных.
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-СХЕМЫ-ОБМЕНА - аналогично csv.beforelineexport
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
schema - объект схемы обмена, наследник RS::Core::AbstractSchema
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('csv.afterimport.catalog-product');
}
public static function csvAfterImportCatalogProduct($params)
{
$schema = $params['schema'];
}
}
csv.scheme.afterconstruct.КОРОТКОЕ-ИМЯ-СХЕМЫ-ОБМЕНА
Вызывается в конце __construct() схемы обмена
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-СХЕМЫ-ОБМЕНА - аналогично csv.beforelineexport
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
schema - объект схемы обмена, наследник RS::Core::AbstractSchema
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('csv.scheme.afterconstruct.catalog-product');
}
public static function csvSchemeAfterconstructCatalogProduct($params)
{
$schema = $params['schema'];
}
}
mailer.beforesend
Вызывается перед отправкой любого письма в системе (за исключением писем, отправляемых подсистемой уведомлений). Возможна отмена отправки письма, в случае остановки события.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('mailer.beforesend');
}
public static function mailerBeforeSend($params, $event)
{
$event
->addError(t('Отправка писем запрещена'))
->stopPropagation();
}
}
mailer.alerts.beforesend
Вызывается перед отправкой любого письма, отправляемого подсистемой уведомлений
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('mailer.alerts.beforesend');
}
public static function mailerAlertsBeforesend($params)
{
switch ($params['notice']->getSelfType()) {
case 'shop-orderchange':
$partner = new \Partnership\Model\Orm\Partner($params['notice']->order->partner_id);
break;
default:
}
if (!empty($partner['id'])) {
$api = new \Partnership\Model\Api();
if (!empty($partner['notice_from'])) {
$params['mailer']->FromName = $api->getPartnerNoticeParsed($partner['notice_from'], false);
$params['mailer']->From = $api->getPartnerNoticeParsed($partner['notice_from'], true);
}
if (!empty($partner['notice_reply'])) {
$params['mailer']->clearReplyTos();
$params['mailer']->addReplyTo($api->getPartnerNoticeParsed($partner['notice_reply'], true), $api->getPartnerNoticeParsed($partner['notice_reply'], false));
}
}
}
}
exchange.task.afterimport.products
Вызывается после импорта товаров из 1С
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
filename - Имя импортируемого файла
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('exchange.task.afterimport.products');
}
public static function exchangeTaskAfterimportProducts($params)
{
}
}
exchange.task.afterimport.groups
Вызывается после импорта категорий из 1С
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
filename - Имя импортируемого файла
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('exchange.task.afterimport.groups');
}
public static function exchangeTaskAfterimportGroups($params)
{
}
}
exchange.orderexport.before
Вызывается после импорта категорий из 1С
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
order - Объект заказа Shop:Model:Orm:Order
-
xml - Объект SimpleXMLElement
-
order_items_request - товары в заказе
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('exchange.orderexport.before');
}
public static function exchangeOrderExportBefore($params)
{
}
}
exchange.gate.afterimport.all
Вызывается после импорта всех объектов из 1С
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
filename - Имя импортируемого файла
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('exchange.gate.afterimport.all');
}
public static function exchangeGateAfterimportAll($params)
{
}
}
search.getengines
Вызывается для формирования списка поисковых сервисов
| Тип входящего параметра: | array of Search::Model::AbstractEngine |
| Описание входящего параметра: | Массив объектов, предоставляющих сервис поиска |
namespace Search\Config;
{
{
$this->
bind(
'search.getengines');
}
{
$list[] = new \Search\Model\Engine\Mysql();
return $list;
}
}
menu.gettypes
Вызывается для формирования списка возможных типов пунктов меню
namespace Menu\Config;
{
{
$this->
bind(
'menu.gettypes');
}
{
$menu_types[] = new \Menu\Model\MenuType\Article();
$menu_types[] = new \Menu\Model\MenuType\Link();
$menu_types[] = new \Menu\Model\MenuType\Page();
$menu_types[] = new \Menu\Model\MenuType\Separator();
return $menu_types;
}
}
product.getwarehouses
Вызывается в методе Catalog::Model::Orm::Product::getWarehouseStickInfo, в момент формирования сведений о складах с товаром
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace Affiliate\Config;
{
{
$this->
bind(
'product.getwarehouses', null, null, 10);
}
public static function productGetWarehouses($params)
{
if ($affiliate['id']) {
$params['warehouse_api']->setFilter(array(
array(
'affiliate_id' => 0,
'|affiliate_id' => $affiliate['id']
)
));
}
}
}
order.getwarehouses
Вызывается в методе Shop::Controller::Front::Checkout::actionWarehouses, перед отображением шага с выбором складов для самовывоза
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace Affiliate\Config;
{
{
$this->
bind(
'order.getwarehouses', null, null, 10);
}
public static function orderGetWarehouses($params)
{
if ($affiliate['id']) {
$params['warehouse_api']->setFilter(array(
array(
'affiliate_id' => 0,
'|affiliate_id' => $affiliate['id']
)
));
}
}
}
externalapi.getexceptions
Вызывается во время рендеринга справочной страницы по API
<?php
namespace ExternalApi\Config;
{
{
$this->
bind(
'externalapi.getexceptions');
}
{
$list[] = new \ExternalApi\Model\Exception();
return $list;
}
}
mobilesiteapp.gettemplates
Возвращает список из путей к шаблонам. Путь может быть отсительным с использованием именимодуля%. Принимается массив ключ - путь шаблону значение - массив со сведениями о путях в переменных
Например:
mobilesiteapp => [
...
'title' => 'По умолчанию',
'css' => 'build/css/',
'fonts' => 'build/fonts/',
'js' => 'build/js/',
...
]
Правила формирования имени события:
Все знаки обязательно в нижнем регистре.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
mobilesiteapp - ключ мобиль
-
title - именование шаблона
-
mobile_root - путь для переменной шаблона
-
templates_root - путь для переменной шаблона
-
...
-
...
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('mobilesiteapp.gettemplates');
}
public static function mobileSiteAppGetTemplates($templates)
{
$templates['custom'] = array(
'title' => t('Мой шаблон приложения'),
'mobile_root' => '%MOBILEPATH%/appsource',
'templates_root' => '%MOBILEPATH%/view',
'www_dir' => '%MOBILEROOT%/www',
'css' => '%MOBILEROOT%/www/build',
'fonts' => '%MOBILEROOT%/www/build/assets/fonts',
'js' => '%MOBILEROOT%/www/build',
'img' => '%MOBILEROOT%/www/images',
);
return $templates;
}
}
}
api.МЕТОД.before
Вызывается перед выполнением метода API. Параметр result может быть изменен, это повлияет на результат выполнения API
Правила формирования имени события:
МЕТОД - полный идентификатор метода API. Например: api.order.get.before или api.order.getlist.before. Все знаки обязательно в нижнем регистре.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
result - array результат выполнения метода API
-
version - string версия, переданная в параметре v
-
lang - string двухсимвольный идентификатор языка, переданный в параметре lang
-
method - object объект метода API
-
params - array все параметры, переданные в метод
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('api.order.get.before');
}
public static function apiOrderGetBefore($params)
{
}
}
api.МЕТОД.success
Вызывается после выполнения метода API. Параметр result может быть изменен, это повлияет на результат выполнения API.
Правила формирования имени события:
МЕТОД - полный идентификатор метода API. Например: api.order.get.success или api.order.getlist.success. Все знаки обязательно в нижнем регистре.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
result - array результат выполнения метода API
-
version - string версия, переданная в параметре v
-
lang - string двухсимвольный идентификатор языка, переданный в параметре lang
-
method - object объект метода API
-
params - array все параметры, переданные в метод
|
namespace Shop\Config;
{
{
$this->
bind(
'api.oauth.token.success')
}
{
$user_id = $params['result']['response']['user']['id'];
$user = new \Users\Model\Orm\User($user_id);
$params['result']['response']['user']['is_courier'] = in_array($courier_user_group, $user->getUserGroups());
return $params;
}
}
delivery.period.correct
Вызывается после расчета сроков доставки. Корректировкой объекта period можно изменять срок доставки.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('delivery.period.correct');
}
public static function deliveryPeriodCorrect($params)
{
$delivery = $params['delivery'];
$address = $params['address'];
$period = $params['period'];
if ($address && $period && $delivery) {
$period->setDayMin($period->getDayMin() + 2);
$period->setDayMax($period->getDayMax() + 2);
return $params;
}
}
}
init.api.catalog-front-listproducts
Вызывается в конце конструктора Catalog::Controller::Front::ListProducts. Данный хук можно использовать для корректировки условий выборки товаров в списке.
namespace Partnership\Config;
{
{
$this->
bind(
'init.api.catalog-front-listproducts');
}
public static function initApiCatalogFrontListProducts($controller)
{
if ($partner) {
$dirs = $partner->getAllowFolderList();
if (!empty($dirs)) {
$controller->api->setFilter('dir', $dirs, 'in');
$controller->dirapi->setFilter('id', $dirs, 'in');
}
}
}
}
orm.beforemultidelete.catalog-product
Вызывается перед массовым удалением товаров. Данное событие вызывается, если удаление происходит из административной панели. Остановкой продолжения события можно отменить удаление. Обработчик данного события должен реализовывать быстрые алгоритмы удаления объектов.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('orm.beforemultidelete.catalog-product');
}
public static function ormBeforeMultideleteCatalogProduct($params, $event)
{
$ids = $params['ids'];
$event->stopPropagation();
}
}
orm.multidelete.catalog-product
Выполняется после массового удаления товаров. Обработчик данного события должен реализовывать быстрые алгоритмы удаления объектов.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace Partnership\Config;
{
{
$this->
bind(
'orm.multidelete.catalog-product');
}
public static function ormMultideleteCatalogProduct($params)
{
$ids = $params['ids'];
if ($ids) {
$file_api = new \Files\Model\FileApi();
$file_api->setFilter('link_id', $ids, 'in');
$file_api->setFilter('link_type_class', 'files-catalogproduct');
$page = 1;
while($files = $file_api->getList($page, 50)) {
foreach ($files as $file) {
$file->delete();
}
$page++;
}
}
}
}
orm.beforemultiupdate.КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА
Вызывается перед массовым обновлением товаров. Если событие будет остановлено, то операция не будет выполняться.
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА - catalog-product или catalog-dir
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
$data - array, данные, которые следует обновить в объекте
-
ids - array, список ID товаров
-
api - Catalog::Model::Api, объект API товаров
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('orm.beforemultiupdate.catalog-product');
}
public static function ormBeforeMultiUpdateCatalogProduct($params)
{
$ids = $params['ids'];
}
}
orm.multiupdate.КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА
Вызывается после массового обновления товаров.
Правила формирования имени события:
КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА - catalog-product или catalog-dir
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('orm.multiupdate.catalog-product');
}
public static function ormMultiUpdateCatalogProduct($params)
{
$ids = $params['ids'];
}
}
export.google.beforewriteoffer
Вызывается перед экспортом товарного предложения в googleMerchant.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
profile - , профиль экспорта в Google Merchant
-
writer - , объект XML Writer
-
product - Catalog::Model::Orm::Product, объект товара
-
offer_index - integer, индекс комплектации
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('export.google.beforewriteoffer');
}
public static function exportGoogleBeforewriteOffer($params)
{
}
}
export.google.writeoffer
Вызывается после экспорта в googleMerchant товарного предложения, но до закрытия элемента item.
| Тип входящего параметра: | array |
| Описание входящего параметра: | Элементы массива:
-
profile - , профиль экспорта в Google Merchant
-
writer - , объект XML Writer
-
product - Catalog::Model::Orm::Product, объект товара
-
offer_index - integer, индекс комплектации
|
namespace ModuleName\Config;
{
function init()
{
$this->bind('export.google.writeoffer');
}
public static function exportGoogleWriteOffer($params)
{
$writer = $params['writer'];
$writer->writeElement("customTag", "customTagValue");
}
}
Важно
Список событий не является окончательным и постоянно расширяется. Если Вы не смогли реализовать какой-то функционал, из-за отсутствия соответствующего события, просьба написать в поддержку по адресу suppo.nosp@m.rt@r.nosp@m.eadys.nosp@m.crip.nosp@m.t.ru