Короткие ссылки и UTM метки

События модуля

При установке модуля регистрируется обработчик события OnPageStart галвного модуля, для отслеживания перехода по коротким ссылкам и перенаправления на конечный адрес.

Модуль использует новое ядро битркиса, поэтому доступны стандратные обработчики классов для раоты с сущностями базы данных. Соответствено можно подписаться на события класов:

  • \Bxmaker\ShortLink\ManagerTable
  • \Bxmaker\ShortLink\StatTable

Важно: в коде события не пишется полное название класса, то есть вместо ManagerTable необходимо писать просто Manager.

События:

  • OnBeforeAdd
  • OnAfterAdd
  • OnBeforeDelete
  • OnAfterDelete
  • OnBeforeUpdate
  • OnAfterUpdate

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

Событие 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;
    }