При установке модуля регистрируется обработчик события OnPageStart
главного модуля, для отслеживания перехода по коротким ссылкам и перенаправления на конечный адрес.
Модуль использует новое ядро битркиса, поэтому доступны стандратные обработчики классов для раоты с сущностями базы данных. Соответствено можно подписаться на события класов:
Важно: в коде события не пишется полное название класса, то есть вместо ManagerTable
необходимо писать просто Manager
.
События:
AddEventHandler('bxmaker.shortlink', '\Bxmaker\ShortLink\Manager::OnBeforeAdd', 'bxmaker_shortlink_onBeforeAdd');
use \Bitrix\Main\Entity; /* стоку разместить в начале файла */
function bxmaker_shortlink_onBeforeAdd(Entity\Event $event)
{
$result = new Entity\EventResult;
$data = $event->getParameter("fields");
if (isset($data['TAG']))
{
/* редактирование значения поля тег перед сохранением */
$result->modifyFields(array('TAG' => '[PROG] ' . $data['TAG'] ));
}
// $result->unsetFields(array('HASH'));
}
Событие onBeforeRedirect
используется для модификатции конечного адреса редиректа налету, подмены адреса или отмены редиректа. Может также быть использован для добавления дополнительных парамтеров или удаления, или изменения порядка параметров в адресе. Ниже пример использования
\Bitrix\Main\Loader::includeModule('bxmaker.shortlink');
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler("bxmaker.shortlink", \Bxmaker\ShortLink\Manager::EVENT_ON_BEFORE_REDIRECT, "onBeforeRedirect");
function onBeforeRedirect(\Bitrix\Main\Event $event){
$arItem = $event->getParameter('arItem');
if($arItem['ID'] == 1)
{
//ошибка, редирект не произойдет
$result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR);
}
else
{
//заменим только одно поле с конечным адресом, можно менять и другие но это ни на чем не отразится
$result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS,array(
'arItem' => array(
'TO' => 'http://bxmaker.ru/',
)
));
}
return $result;
}