Общие сведения
Система событий – инструмент, который позволяет изменять стандартный ход работы системы путем установки обработчиков для различных событий системы. Результат работы обработчиков может учитываться системой и корректировать общий ход выполнения программы
Классы для работы с событиями располагаются в пространстве имен 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