В сегодняшней заметке пойдет речь о маленьком хаке для рекламного модуля. Итак, представьте, у Вас на сайте есть баннер и вы хотите его показывать только неавторизованным пользователям. Можно залезть в шаблон баннера и прописать условие вида:
if(!$USER->IsAuthorized()){
// показываем баннер
} |
В таком случае баннер не будет показан неавторизованному пользователю, но будет сгенерирован системой, в рекламном модуле показ баннера фиксируется в момент его генерации, если мы будем вести аналитику по показам, то нам такой вариант не подходит. Настройки таргентинга задавать условие для показа баннера определенной группе. Этой настройкой и воспользуемся.
Создаем группу
Неавторизованные пользователи, данная группа будет динамической, такой же как группа с ID 2
Все пользователи (в том числе неавторизованные) но состав такой группы мы обозначим сами, через события. После создания группы, заходим в файл init.php и прописываем там следующий код:
AddEventHandler("main", "OnBeforeProlog", "MyOnBeforePrologHandler", 50);
function MyOnBeforePrologHandler()
{
global $USER;
if(!$USER->IsAuthorized()){
if(!isset($_SESSION["SESS_AUTH"]["GROUPS"][0])){
$_SESSION["SESS_AUTH"]["GROUPS"][] = 2;
$_SESSION["SESS_AUTH"]["GROUPS"][] = 116;
}
}
}
|
Скрипт на событии
OnBeforeProlog будет переопределять массив
$_SESSION["SESS_AUTH"]["GROUPS"] c которого считываются группы пользователя (116 ID группы Неавторизованные пользователи). Благодаря созданной группе, мы теперь можем задать условие, что баннер будет показываться только неавторизованным пользователям.
Такой баннер будет показан только неавторизованным пользователям. Было бы здорово, если бы разработчики Bitrix добавили события в функцию
CAdvBanner::GetRandom($TYPE_SID) Событие позволило мы накладывать дополнительные условия на выборку. К примеру я хочу ввести ограничение: 1 показ баннера одному пользователю в сутки, данный механизм можно реализовать с помощью событий и дополнительной функции, которая будет фиксировать показ баннера в COOKIE браузера.