Версия: 3.x
События (хуки)

Оглавление

Общие сведения

Система событий – инструмент, который позволяет изменять стандартный ход работы системы путем установки обработчиков для различных событий системы. Результат работы обработчиков может учитываться системой и корректировать общий ход выполнения программы

Классы для работы с событиями располагаются в пространстве имен RS::Event.

Для сбора обработчиков происходит поиск в пространстве имен ИМЯ_МОДУЛЯ\Config классов MyHandlers, и в случае, если класс не найден происходит поиск класса Handlers. Найденный класс должен быть потомком класса RS::Event::HandlerAbstract. Далее у найденного класса вызывается метод init(), в котором ожидается, что модуль установит обработчики на события системы.

В классе RS::Event::HandlerAbstract имеется метод RS::Event::HandlerAbstract::bind для упрощенной регистрации обработчиков событий. Рассмотрим пример класса Handlers:

<?php
namespace Article\Config;
// Класс предназначен для объявления событий, которые будет прослушивать данный модуль и обработчиков этих событий.
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this
->bind('getroute')
->bind('getpages');
}
public static function getRoute($routes)
{
//Тело обработчика события
}
public static function getPages ($urls)
{
//Тело обработчика события
}
}

Установка обработчика события

Для назначения обработчика можно использовать метод RS::Event::Manager::bind. Метод принимает 4 параметра:

  • string $event - имя события
  • mixed $callback_class - класс обработчика события. может принимать значения следующих типов
    • объект Closure - анонимную функцию.
    • object - объект instance класса
    • string - имя класса в виде строки
  • string $callback_method - имя метода обработчика. Используется, когда в $callback_class имеет тип object или string. Если не указать, то имя метода будет сформировано из имени события, исключая символы .[точка],-[минус].
  • integer $priority - приоритет. Чем он выше, тем раньше будет выполнено обработчик события
\RS\Event\Manager::bind('getroute', function($params, $event) {
//... тело обработчика события
});

В функцию обработки события передается 2 аргумента:

  • mixed $params - параметр, который был передан в момент вызова события
  • object $event - объект RS::Event::Event - объект, содержащий сведения о выполняемом событии

Ожидается, что функция обработки события может возвращать следующие значения:

  • null, в этом случае, следующий обработчик получит в $params - тот же параметр, который получил текущий обработчик.
  • значение того же типа, что и $params. Это будет означать, что обработчик что-то мог изменить в переменной. Следующий обработчик получит в $params - результат выполнения текущей функции.
  • возврат иного значения вызовет исключение
//После вызова события getroute, $params
\RS\Event\Manager::bind('getroute', function($params, $event) {
//в $params - ожидается array
$params[] = new \RS\Router\Route('article-front-view', '/text-{category}/{id}/', null, 'Просмотр новости');
return $params;
});
//или
\RS\Event\Manager::bind('orm.init.catalog-product', function($params, $event) {
//в $params ожидается Catalog::Model::Orm::Product
$params->getPropertyIterator()->append(array(
'Новая закладка',
'test_field' => new OrmType\Varchar(array(
'description' => 'Тестовое поле',
))
));
//Возвращаем null
});

Любой обработчик события может остановить событие, а соответственно прервать вызов последующих обработчиков. Для некоторых событий это означает, что необходимо отменить действие, перед которым вызвано событие. Для остановки события, необходимо вызвать метод stopPropagation у объекта RS::Event::Event, который передается в функцию-обработчик вторым аргументом.

Например, чтобы прервать сохранение ORM-объекта товара достаточно объявить следующий обработчик.

\RS\Event\Manager::bind('orm.beforewrite.catalog-product', function($params, $event) {
$product = $params['orm']; //Получаем из параметра ORM объект - \Catalog\Model\Orm\Product
$product->addError('Не хочу обновлять товар!');
$event->stopPropagation(); //Останавливаем событие
}

Генерация события

Для генерации собственного события существует метод RS::Event::Manager::fire. Метод принимает 2 аргумента:

  • string $event - строковое имя события
  • mixed $params - произвольный параметр, поступающий в событие
$event_result = \RS\Event\Manager::fire('myevent', array(
'param1' => 'value1',
'param2' => 'value2'
));

Результат выполнения события возвращается в виде объекта RS::Event::Result. Чтобы узнать было ли остановлено событие каким-либо из обработчиков, можно воспользоваться следующей конструкцией:

if ($event_result->getEvent()->isStopped()) {
echo "Событие было остановлено"
}

Чтобы получить параметр, переданный в событие с учетом изменений, которые обработчики могли вносить в него, следует воспрользоваться следующей конструкцией:

$result = $event_result->getResult();

Полный список событий в ReadyScript

initialize

Вызывается cразу после инициализации системных классов, перед вызовом события start. Событие создано для инициализации низкоуровневых процессов. Например, для расширения поведения других классов.

Тип входящего параметра: нет параметров

Пример:

namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
//Подписываемся на обработку события
$this->bind('initialize');
}
public static function initialize()
{
//Здесь код обработчика
}
}

start

Вызывается перед вызовом диспетчера маршрутов в файле /index.php

Тип входящего параметра: нет параметров

Пример:

namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('start');
}
public static function start()
{
//Здесь код обработчика
}
}

stop

Вызывается окончанием выполнения скрипта. Все данные уже отданы в output

Тип входящего параметра: нет параметров

Пример:

namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('stop');
}
public static function stop()
{
//Здесь код обработчика
}
}

getroute

Вызывается в начале работы скрипта. Событие формирует список всех маршрутов, которые будет обрабатывать система.

Тип входящего параметра: array of RS::Router::RouteAbstract
Описание входящего параметра: Массив маршрутов

Пример:

namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('getroute');
}
/**
* Добавляем свой маршрут в систему
*
* @param \RS\Router\RouteAbstract[] $routes Список маршрутов
* @return array
*/
public static function getroute($routes)
{
$routes[] = new \RS\Router\Route('modulename-front-page', array(
'/testpage/',
), null, t('Демо страница по адресу /testpage/'));
return $routes;
}
}

applyroute

Выполняется после определения и установки маршрута в качестве текущего.

Тип входящего параметра: RS::Router::RouteAbstract
Описание входящего параметра: Текущий маршрут
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('applyroute');
}
public static function applyRoute($pages)
{
//Здесь код...
}
}

getpages

Вызывается для формирования списка страниц, которые нужно включить в sitemap

Тип входящего параметра: array
Описание входящего параметра: Массив массивов с элементами, присутствующими в sitemap:
  • loc - URL страницы
  • lastmod - дата последнего изменения страницы
  • ...
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('getmenus');
}
/**
* Возвращает пункты меню этого модуля в виде массива
* @param array $items
* @return array
*/
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('cron');
}
/**
* Обрабатываем событие планировщика
*
* @param array $params
*/
public static function cron($params)
{
//Инициализируем маршруты, если желаем пользоваться роутером далее в коде. Например,
\RS\Router\Manager::obj()->initRoutes();
//Запускаем в полночь проверку на автоматический перевод статусов заказов,
if (in_array(0, $params['minutes'])) { // проверяем на наличие нулевой минуты, что означает время 00:00:00
$sites = \RS\Site\Manager::getSiteList(); //Загружаем все мультисайты
foreach($sites as $site) {
//Загружаем настройки каждого сайта
$config = \RS\Config\Loader::byModule(__CLASS__, $site['id']);
if ($config['here_your_param']) //Проверяем включена ли необходимая опция
{
//выполняем действие
}
}
}
}
}

render.beforeoutput

Вызывается сразу после рендеринга HTML страницы в методе RS::Application::Block::renderLayout.

Тип входящего параметра: string
Описание входящего параметра: Готовый HTML контент
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('render.beforeoutput');
}
/**
* Заменяем всех Иванов на Аркадиев на нашей странице
*
* @param string $html
*/
public static function renderBeforeOutput($html)
{
return str_replace('Иван', 'Аркадий', $html);
}
}

user.auth

Вызывается после успешной авторизации пользователя

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
//Подписываемся на обработку события
$this->bind('user.auth');
}
/**
* Обрабатываем событие авторизаци пользователя
*
* @param array $params
*/
public static function userAuth($params)
{
$user = $params['user'];
if ($user['name'] == 'Иван') {
//Иван не сможет авторизоваться
}
}
}

user.logout

Вызывается после намеренного выхода пользователя

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
//Подписываемся на обработку события
$this->bind('user.logout');
}
/**
* Обрабатываем событие выхода пользователя
*
* @param array $params
*/
public static function userLogout($params)
{
$user = $params['user'];
echo 'Пользователь '.$user['name'].' вышел из системы';
}
}

controller.beforewrap

Вызывается перед добавлением секции BODY к сформированному HTML. Допускается модификация сформированного HTML.

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
  • controller - объект контроллера
  • body - сформированный HTML для вставки в элемент BODY
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
//Подписываемся на обработку события
$this->bind('controller.beforewrap');
}
/**
* Обрабатываем HTML перед его добавлением в тег body
*
* @param array $params
*/
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
//Подписываемся на обработку события
$this->bind('controller.beforeexec.catalog-front-listproducts');
}
/**
* Обрабатываем событие запуска действия контроллера
*
* @param array $params
*/
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
//Подписываемся на обработку события
$this->bind('controller.afterexec.catalog-front-listproducts');
}
/**
* Обрабатываем событие запуска действия контроллера
*
* @param array $params
*/
public static function controllerAfterExecCatalogFrontListProducts($params)
{
if ($params instanceof \RS\Controller\Result\ITemplateResult)
{
$vars = $params->getTemplateVars(); //Получим переменные, которые были подготовлены для шаблона
if (!$vars['list'] && $params->getTemplate() == 'list_products.tpl') { //если пустой список товаров, то подменим шаблон
//Поменяем шаблон, в случае если отсутствуют товары
//шаблон должен присутствовать в нашем модуле modulename
$params->setTemplate('%modulename%/my_custom_empty_list_products.tpl');
}
}
}
}

controller.exec.КОРОТКОЕ-ИМЯ-КОНТРОЛЛЕРА.ИМЯ_ДЕЙСТВИЯ

Вызывается классом RS::Controller::Admin::Crud после выполнения метода helperИМЯ_ДЕЙСТВИЯ.
Данное событие используется для изменения внешнего вида разделов административной панели.

Правила формирования имени события:

КОРОТКОЕ-ИМЯ-КОНТРОЛЛЕРА - аналогично событию controller.beforeexec....
ИМЯ_ДЕЙСТВИЯ - имя действия контроллера, без префикса action.

Тип входящего параметра: mixed
Описание входящего параметра: Результат выполнения метода helperИМЯ_ДЕЙСТВИЯ. Для системных контроллеров - объект RS::Controller::Admin::Helper::CrudCollection
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('controller.exec.catalog-admin-ctrl.index');
}
/**
* Добавляем собственные фильтры
*
* @param $helper
*/
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\DateRange('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() //Получим объект фильтра \RS\Html\Filter\Control
->getContainer() //Получим главный контейнер со строками фильтров
->addLine($line); //Добавим в него строку с фильтрами
}
}

listproducts.beforegetlist

Вызывается в контроллере listproducts перед запросом на получение списка товаров, когда все фильтры установлены.

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
  • controller - объект контроллера
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('listproducts.beforegetlist');
}
/**
* Обрабатываем событие перед выборкой товаров
*
* @param array $params
*/
public static function listproductsBeforeGetList(array $params)
{
$controller = $params['controller'];
/**
* @var $api \Catalog\Model\Api
*/
$api = $controller->api;
$api->setFilter('num', 10, '>'); //Добавим фильтр, чтобы отбирались только те товары, которых более 10 в наличии
}
}

module.install.ИМЯ-МОДУЛЯ

Вызывается сразу после установки модуля

Правила формирования имени события:

ИМЯ-МОДУЛЯ - соответствует имени папки, в которой находится модуль

Тип входящего параметра: RS::Module::Item
Описание входящего параметра: Объект установленного модуля
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('module.install.shop');
}
/**
* Обрабатываем событие установки нового модуля
*
* @param \RS\Module\Item $module_item Объект модуля
*/
public static function moduleInstallShop($module_item)
{
//Здесь любой код
}
}

module.beforeuninstall.ИМЯ-МОДУЛЯ

Вызывается перед удалением модуля

Правила формирования имени события:

ИМЯ-МОДУЛЯ - аналогично событию module.install....

Тип входящего параметра: RS::Module::Item
Описание входящего параметра: Объект установленного модуля
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('module.beforeuninstall.seocontrol');
}
/**
* Обрабатываем событие перед удалением модуля SeoControl
*
* @param \RS\Module\Item $module_item Объект модуля
* @param \RS\Event\Event $event Объект события
*/
public static function moduleBeforeUninstallSeocontrol($module_item, $event)
{
//Предотвратим удаление модуля
$event->addError(t('Нельзя удалять данный модуль'))->stopPropagation();
}
}

module.afteruninstall.ИМЯ-МОДУЛЯ

Вызывается после удаления модуля

Правила формирования имени события:

ИМЯ-МОДУЛЯ - аналогично событию module.install....

Тип входящего параметра: RS::Module::Item
Описание входящего параметра: Объект установленного модуля
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('module.afteruninstall.seocontrol');
}
/**
* Обрабатываем событие перед удалением модуля SeoControl
*
* @param \RS\Module\Item $module_item Объект модуля
* @param \RS\Event\Event $event Объект события
*/
public static function moduleAfterUninstallSeocontrol($module_item, $event)
{
//Здесь любой код
}
}

orm.init.КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА

Вызывается после вызова метода init у ORM объектов. Данное событие может использоваться для изменения структуры полей ORM объекта

Правила формирования имени события:

КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА - формируется из имени класса контроллера включая namesapce, путем замены обратных слешей на минусы, и исключения секции -model-orm. Минусы по краям удаляются. Вся строка приводится к нижнему регистру. Например, если имя контроллера: Catalog::Model::Orm::Product, то его сокращенное имя будет: catalog-product

Тип входящего параметра: RS::ORM::AbstractObject
Описание входящего параметра: Инициализируемый ORM объект
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
//Подписываемся на обработку события
$this->bind('orm.init.shop-order');
}
/**
* Добавляет поля в объект заказа
*
* @param \Shop\Model\Orm\Order $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, //Добавили видимость поля в зоне info
'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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('orm.beforewrite.shoporder');
}
/**
* Добавляет в заказ сведения о партнерском сайте
*
* @param array $params - массив с параметрами перед записью
*/
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('orm.afterwrite.shop.order');
}
/**
* Обработка события создания или обновления заказа, отсылка PUSH уведомления об изменениях
*
* @param array $data - массив данных
*/
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....

Тип входящего параметра: RS::Orm::AbstractObject
Описание входящего параметра: Новый ORM объект
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('orm.clone.shop.order');
}
/**
* Обработка события создания или обновления заказа, отсылка PUSH уведомления об изменениях
*
* @param array $data - массив данных
*/
public static function ormCloneShopOrder($cloned_order)
{
//Устанавливаем новому объекту заказа свойство
$cloned_order['user_fio'] = 'Имя по умолчанию';
}
}

orm.delete.КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА

Вызывается перед удалением ORM объекта из базы данных

Правила формирования имени события:

КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА - аналогично событию orm.init....

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
  • orm - ORM объект
class Handlers extends \RS\Event\HandlerAbstract
{
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
Описание входящего параметра: Элементы массива:
  • orm - ORM объект
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('orm.afterload.catalog-product');
}
/**
* Обрабатывает удаление товара
*/
public static function ormAfterloadCatalogProduct($params)
{
$product = $params['orm'];
//Здесь можно догрузить дополнительные свойства
}
}

theme.getcontextlist

Вызывается для формирования списка Контекстов, присутствующих в системе. Контекст - определяет отличное отображение темы оформления.

Тип входящего параметра: array of string
Описание входящего параметра: Массив контекстов
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('theme.getcontextlist');
}
/**
* Возвращает контексты тем, которые добавляет данный модуль
*
* @param array $contexts Контексты, добавленные другими модулями
* @return array
*/
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('alerts.getsmssenders');
}
/**
* Добавляем СМС пройвайдера
*
* @param array $list
* @return array
*/
public static function alertsGetSMSSenders($list)
{
$list[] = new \SMSImobis\Model\SMS\IMobis\Sender();
return $list;
}
}

export.gettypes

Вызывается для формирования списка сервисов, осуществляющих экспорт товаров.

Тип входящего параметра: array of Export::Model::ExportType::AbstractType
Описание входящего параметра: Массив объектов, осуществляющих экспорт данных
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
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;
class Handlers extends \RS\Event\HandlerAbstract
{
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('cart.addproduct.before');
}
/**
* Прибавляет товары в корзине с определённм шагом при добавлении товара
*
* @param array $params - массив с данными
* @return array
*/
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('cart.addproduct.after');
}
/**
* Прибавляет товары в корзине с определённм шагом при добавлении товара
*
* @param array $params - массив с данными
* @return array
*/
public static function cartAddProductAfter($params)
{
//Здесь код...
}
}

cart.update.before

Вызывается перед обновлением товара в корзине. Все входящие параметры можно модифицировать. Если событие будет остановлено, то операция не будет выполняться.

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
  • cart - объект Shop::Model::Cart
  • products - array массив со сведениями для обновления

                    [
                        'КЛЮЧ ЭЛЕМЕНТА В КОРЗИНЕ' => [
                            'amount' => Количество товара
                            'offer' => Номер комплектации
                            'multioffers' => [
                                'ID характеристики' => 'Значение',
                                'ID характеристики' => 'Значение',
                                ...
                            ]
                        ]
                    ]
                    
  • coupon - номер скидочного купона
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('cart.update.before');
}
/**
* Устанавдивает некоторым товарам фиксированное количество
*
* @param array $params - массив с данными
*/
public static function cartUpdateBefore($params)
{
/**
* @var \Shop\Model\Cart
*/
$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') {
//Товара с псевдонимом test может быть только 10 штук в корзине
$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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('cart.update.after');
}
public static function cartUpdateAfter($params)
{
//Здесь код...
}
}

cart.removeitem.before

Вызывается перед удалением элемента из корзины. Если событие будет остановлено, то операция не будет выполняться.

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
  • cart - объект Shop::Model::Cart
  • uniq - ключ элемента в корзине
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('cart.removeitem.before');
}
public static function cartRemoveItemBefore($params, $event)
{
//Здесь код...
//Чтобы остановить удаление элемента мо
$event->stopPropagation();
}
}

cart.removeitem.after

Вызывается после удаления элемента из корзины

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('cart.removeitem.after');
}
public static function cartRemoveItemAfter($params, $event)
{
//Здесь код...
}
}

cart.addcoupon.before

Вызывается перед добавлением купона в корзину. Если событие будет остановлено, то операция не будет выполняться.

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('cart.addcoupon.before');
}
public static function cartAddCouponBefore($params, $event)
{
//Здесь код...
}
}

cart.addcoupon.after

Вызывается после добавления купона в корзину

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
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;
class Handlers extends \RS\Event\HandlerAbstract
{
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('cart.getorderdata');
}
public static function cartGetOrderData($params)
{
//Здесь код...
}
}

delivery.gettypes

Вызывается для формирования списка расчетных классов доставки в системе

Тип входящего параметра: array of Shop::Model::DeliveryType::AbstractType
Описание входящего параметра: Массив объектов, предоставляющих расчетный класс доставки
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('delivery.gettypes');
}
/**
* Возвращает процессоры(типы) доставки, присутствующие в текущем модуле
*
* @param array $list - массив из передаваемых классов доставок
* @return array
*/
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

Вызывается для формирования списка объектов оплаты в системе

Тип входящего параметра: array of Shop::Model::PaymentType::AbstractType
Описание входящего параметра: Массив объектов, предоставляющих способы оплаты
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('payment.gettypes');
}
/**
* Возвращает способы оплаты, присутствующие в текущем модуле
*
* @param array $list - массив из передаваемых классов оплат
* @return array
*/
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('order.change');
}
/**
* Фиксируем смену курьера в заказе
*
* @param array $params
*/
public static function orderChange($param)
{
if ($param['order']['courier_id'] && ($param['order']['courier_id'] != $param['order_before']['courier_id'])) {
//Фиксируем изменение курьера у заказа
}
}
}

printform.getlist

Вызывается для формирования списка печатных форм для заказа

Тип входящего параметра: Shop::Model::PrintForm::AbstractPrintForm
Описание входящего параметра: Массив объектов, предоставляющих сервис печати документов для заказа
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
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;
class Handlers extends \RS\Event\HandlerAbstract
{
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;
class Handlers extends \RS\Event\HandlerAbstract
{
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;
class Handlers extends \RS\Event\HandlerAbstract
{
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;
class Handlers extends \RS\Event\HandlerAbstract
{
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;
class Handlers extends \RS\Event\HandlerAbstract
{
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('csv.scheme.afterconstruct.catalog-product');
}
public static function csvSchemeAfterconstructCatalogProduct($params)
{
$schema = $params['schema'];
//Здесь код...
}
}

mailer.beforesend

Вызывается перед отправкой любого письма в системе (за исключением писем, отправляемых подсистемой уведомлений). Возможна отмена отправки письма, в случае остановки события.

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('mailer.beforesend');
}
/**
* Обрабатываем событие отправки письма
*
* @param array $params
* @param \RS\Event\Event $event
*/
public static function mailerBeforeSend($params, $event)
{
$event
->addError(t('Отправка писем запрещена'))
->stopPropagation();
}
}

mailer.alerts.beforesend

Вызывается перед отправкой любого письма, отправляемого подсистемой уведомлений

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('mailer.alerts.beforesend');
}
/**
* Подменяет поля from и reply-to в письме уведомления
*
* @param array $params
* @return array
*/
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('exchange.task.afterimport.products');
}
public static function exchangeTaskAfterimportProducts($params)
{
//Здесь код...
}
}

exchange.task.afterimport.groups

Вызывается после импорта категорий из 1С

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
  • filename - Имя импортируемого файла
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('exchange.task.afterimport.groups');
}
public static function exchangeTaskAfterimportGroups($params)
{
//Здесь код...
}
}

exchange.gate.afterimport.all

Вызывается после импорта всех объектов из 1С

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
  • filename - Имя импортируемого файла
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('exchange.gate.afterimport.all');
}
public static function exchangeGateAfterimportAll($params)
{
//Здесь код...
}
}

search.getengines

Вызывается для формирования списка поисковых сервисов

Тип входящего параметра: array of Search::Model::AbstractEngine
Описание входящего параметра: Массив объектов, предоставляющих сервис поиска
namespace Search\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('search.getengines');
}
/**
* Регистрирует поисковый сервис в системе
*
* @param \Search\Model\AbstractEngine[] $list
* @return \Search\Model\AbstractEngine[]
*/
public static function searchGetEngines($list)
{
$list[] = new \Search\Model\Engine\Mysql();
return $list;
}
}

menu.gettypes

Вызывается для формирования списка возможных типов пунктов меню

Тип входящего параметра: array of Menu::Model::MenuType::AbstractType
Описание входящего параметра: Массив объектов, предоставляющих типы пунктов меню
namespace Menu\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('menu.gettypes');
}
/**
* Возвращает список пунктов меню
*
* @param \Menu\Model\MenuType\AbstractType[] $menu_types
* @return \Menu\Model\MenuType\AbstractType[]
*/
public static function menuGetTypes($menu_types)
{
$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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('product.getwarehouses', null, null, 10);
}
/**
* Устанавливает дополнительный фильтр по филиалу при выборе складов
*
* @param array $params
*/
public static function productGetWarehouses($params)
{
$affiliate = \Affiliate\Model\AffiliateApi::getCurrentAffiliate();
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('order.getwarehouses', null, null, 10);
}
/**
* Устанавливает дополнительный фильтр по филиалу при выборе складов
*
* @param array $params
*/
public static function orderGetWarehouses($params)
{
$affiliate = \Affiliate\Model\AffiliateApi::getCurrentAffiliate();
if ($affiliate['id']) {
$params['warehouse_api']->setFilter(array(
array(
'affiliate_id' => 0,
'|affiliate_id' => $affiliate['id']
)
));
}
}
}

externalapi.getexceptions

Вызывается во время рендеринга справочной страницы по API

Тип входящего параметра: array of ExternalApi::Model::AbstractException
Описание входящего параметра: Массив классов исключений
<?php
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('externalapi.getexceptions');
}
/**
* Возвращаем классы исключений, которые используются в методах API
*
* @param \ExternalApi\Model\AbstractException[] $list
* @return \ExternalApi\Model\AbstractException[]
*/
public static function externalApiGetExceptions($list)
{
$list[] = new \ExternalApi\Model\Exception();
return $list;
}
}

mobilesiteapp.gettemplates

Возвращает список из путей к шаблонам. Путь может быть отсительным с использованием именимодуля%. Принимается массив ключ - путь шаблону значение - массив со сведениями о путях в переменных

Например:

mobilesiteapp => [ //Наименование модуля
...
'title' => 'По умолчанию', //Наименование шаблона
'css' => 'build/css/', //Относительный путь к css файлам
'fonts' => 'build/fonts/', //Относительный путь к css файлам
'js' => 'build/js/', //Относительный путь к js файлам
...
]

Правила формирования имени события:

Все знаки обязательно в нижнем регистре.

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
  • mobilesiteapp - ключ мобиль
    • title - именование шаблона
    • mobile_root - путь для переменной шаблона
    • templates_root - путь для переменной шаблона
    • ...
  • ...
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('mobilesiteapp.gettemplates');
}
/**
* Возвращает список из путей к шаблонам. Путь может быть отсительным с использованием %наименование модуля%. Принимается массив
* ключ - путь шаблону
* значение - массив со сведениями о данные
*
*
* Например:
* mobilesiteapp => array( //В ключе наименование модуля
* ...
* 'title' => 'По умолчанию', //Наименование шаблона
* 'css' => 'build/css/', //Относительный путь к css файлам
* 'fonts' => 'build/fonts/', //Относительный путь к css файлам
* 'js' => 'build/js/', //Относительный путь к js файлам
* ...
* )
*
* @param array $templates - массив с шаблонами собраные из модулей
* @return array
*/
public static function mobileSiteAppGetTemplates($templates)
{
$templates['custom'] = array( //В ключе наименование модуля
'title' => t('Мой шаблон приложения'), //Наименование шаблона
'mobile_root' => '%MOBILEPATH%/appsource', //Относительный путь к файлам. %MOBILEPATH% - путь к приложению
'templates_root' => '%MOBILEPATH%/view', //Относительный путь к шаблонам. %MOBILEPATH% - путь к приложению
'www_dir' => '%MOBILEROOT%/www', //Относительный путь к css файлам. %MOBILEROOT% - путь к корню приложения
'css' => '%MOBILEROOT%/www/build', //Относительный путь к css файлам. %MOBILEROOT% - путь к корню приложения
'fonts' => '%MOBILEROOT%/www/build/assets/fonts', //Относительный путь к файлам с шрифтами. %MOBILEROOT% - путь к корню приложения
'js' => '%MOBILEROOT%/www/build', //Относительный путь к js файлам. %MOBILEROOT% - путь к корню приложения
'img' => '%MOBILEROOT%/www/images', //Относительный путь к картинкам. %MOBILEROOT% - путь к корню приложения
);
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;
class Handlers extends \RS\Event\HandlerAbstract
{
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('api.oauth.token.success')
}
/**
* Добавляем к сведениям об авторизации, сведения о том, является ли пользователь курьером
*
* @param array $params
* @return array
*/
public static function apiOauthTokenSuccess($params)
{
$user_id = $params['result']['response']['user']['id'];
$courier_user_group = \RS\Config\Loader::byModule(__CLASS__)->courier_user_group;
$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;
class Handlers extends \RS\Event\HandlerAbstract
{
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. Данный хук можно использовать для корректировки условий выборки товаров в списке.

Тип входящего параметра: Catalog::Controller::Front::ListProducts
Описание входящего параметра: Объект контроллер
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$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
Описание входящего параметра: Элементы массива:
  • ids - array, список ID товаров
  • api - Catalog::Model::Api, объект API товаров
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('orm.beforemultidelete.catalog-product');
}
/**
* Проверяем, можно
*
* @param array $params
*/
public static function ormBeforeMultideleteCatalogProduct($params, $event)
{
$ids = $params['ids'];
//Здесь код....
//Запрещаем удаление
$event->stopPropagation();
}
}

orm.multidelete.catalog-product

Выполняется после массового удаления товаров. Обработчик данного события должен реализовывать быстрые алгоритмы удаления объектов.

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
  • ids - array, список ID товаров
  • api - Catalog::Model::Api, объект API товаров
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('orm.multidelete.catalog-product');
}
/**
* Обрабатывает массовое удаление товаров
*
* @param array $params
*/
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;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('orm.beforemultiupdate.catalog-product');
}
/**
* Обрабатывает массовое обновление товаров
*
* @param array $params
*/
public static function ormBeforeMultiUpdateCatalogProduct($params)
{
$ids = $params['ids'];
//Здесь код...
}
}

orm.multiupdate.КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА

Вызывается после массового обновления товаров.

Правила формирования имени события:

КОРОТКОЕ-ИМЯ-ORM-ОБЪЕКТА - catalog-product или catalog-dir

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
  • ids - array, список ID товаров
  • api - Catalog::Model::Api, объект API товаров
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('orm.multiupdate.catalog-product');
}
/**
* Обрабатывает массовое обновление товаров
*
* @param array $params
*/
public static function ormMultiUpdateCatalogProduct($params)
{
$ids = $params['ids'];
//Здесь код...
}
}

export.google.beforewriteoffer

Вызывается перед экспортом товарного предложения в googleMerchant.

Тип входящего параметра: array
Описание входящего параметра: Элементы массива:
  • profile - , профиль экспорта в Google Merchant
  • writer - , объект XML Writer
  • product - , объект товара
  • offer_index - integer, индекс комплектации
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
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 - , объект товара
  • offer_index - integer, индекс комплектации
namespace ModuleName\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('export.google.writeoffer');
}
/**
* Дописываем произвольный тег в XML для Google Merchant
*
* @param array $params
*/
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