Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Проверка правил баннера

00 голосов
5
День добрый господа. Назрел вопрос по такой ситуации.

Имеется некий инфоблок, к элементу которого необходимо привязать некий баннер(баннеры) из Рекламного модуля.
Но, если получить привязанный баннер по GetById(), и получив баннер, можем ли мы проверить его правила (таргетинг, время показов, кол-во и т.д.)  и получить ответ - Можно ли его показать или нет, согласно всем правилам рекламного модуля.?
спросил 04 Дек, 13 от Shusui (100 баллов)

5 Ответы

00 голосов
В файле /bitrix/php_interface/init.php повесить обработчик OnBeforeIBlockElementAdd
ответил 03 Фев, 14 от KRIO (500 баллов)
00 голосов
Не совсем понял к чему это.

мы получили объект, содержащий в себе баннер
$objBanner = CAdvBanner::GetByID(1);

Как теперь есть ли метод, чтобы проверить - соответствует ли он правилам показа для данного пользователя, времени, таргетинга и т.д.

Пример: Допустим баннер не показывается по выходным, и в субботу запросив напрямую - мы получили данный  баннер - как узнать что его сегодня показывать нельзя - т.к. сегодня суббота - выходной день.

p.s. не используя при этом другие модули кроме iblocks + advertising

p.s.s. где  повесить обработчик я знаю smile:) я не могу найти метод (или подобное ему) для проверки соблюдений правил показа баннера.
ответил 23 Май, 14 от Shusui (100 баллов)
00 голосов
no ideas???
ответил 19 Сен, 14 от Shusui (100 баллов)
00 голосов
Мда, походу кроме как менять буковки в шаблонах, здешние спецы в помощи бесполезны... Всем спасибо smile;)
ответил 23 Янв, 15 от Shusui (100 баллов)
00 голосов
Цитата
FrostMoon пишет:
no ideas???

у меня была похожая задачка + мне еще баннер надо было самому отрисовывать через аякс.
ниже приведен скриптик, который это делает ... ну и там же я дату проверяю и активность банера. надеюсь разберетесь:
Код
 <?php
require_once($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/include/prolog_before.php");

$ban_id        = (int )$_REQUEST[ 'id' ];
$cache_time = (int )$_REQUEST[ 'cache_time' ];


if( $ban_id < 1 or $ban_id > 10 )  {
    $ban_id = 1;
}

$ban_type_sid = "OTP_BAN_PAGE_".strval($ban_id);

if( CModule::IncludeModule("advertising") )  {

    $obCache = new CPHPCache;
    // время кеширования - 30 минут
    // $cache_time =  30*60;
    // формируем идентификатор кеша в зависимости от всех параметров
    // которые могут повлиять на результирующий HTML
    $cache_id     = 'tabbed_banners'.$ban_type_sid;
    $cache_path = "/".SITE_ID."/alexm/tabbed_banners/";

    // если кеш есть и он ещё не истек то
    if( $obCache->InitCache( $cache_time, $cache_id, $cache_path ) ) {
        $vars    = $obCache->GetVars();
        $ar       = $vars[ "ar" ];
    } else {

        $rs = CAdvBanner::GetList( $by="s_weight",
                                                        $order="asc",
                                                        array( "TYPE_SID" => $ban_type_sid,
                                                                  "TYPE_SID_EXACT_MATCH" => "Y",
                                                                  "SITE" => SITE_ID ),
                                                        $if_filtered,
                                                        "N"  );

        if( $rs ) {
            $ar   = Array();
            $arr  = Array();
            $cdt = date("Ymd");

            while( $arr = $rs->Fetch() ) {

                  if( $arr['ACTIVE'] != "Y" )
                      continue;

                  if( ! empty( $arr['DATE_SHOW_FROM'] ) ) {
                        $yyy       = substr( $arr['DATE_SHOW_FROM'], 6, 4 );
                        $mmm    = substr( $arr['DATE_SHOW_FROM'], 3, 2 );
                        $ddd      = substr( $arr['DATE_SHOW_FROM'], 0, 2 );
                        $dt_beg  = $yyy . $mmm . $ddd;

                        if( $dt_beg > $cdt )
                            continue;
                  }

                  $ar []= $arr;
          }

        }

    if( $obCache->StartDataCache()  )  {

          // записываем  в файл кеша переменные
          $obCache->EndDataCache( array( "ar" => $ar ) );
          }

    }

    if( $ar &&  count( $ar ) > 0 ) {

       $r_i                 = array_rand( $ar );
       $i_color           = stripos( $ar[$r_i]['NAME'], "color" );

       if( $i_color > 0 )
           $str_color    = "#".substr( $ar[$r_i]['NAME'], $i_color + 6, 6 );
       else
 
ответил 08 Май, 15 от AshWolf (140 баллов)

Похожие вопросы

0 голосов
6 ответов
спросил 19 Окт, 13 от Graviti (120 баллов)
0 голосов
1 ответ
спросил 07 Ноя, 13 от Kania (5,180 баллов)
0 голосов
2 ответов
спросил 04 Июнь, 13 от Frankon (280 баллов)
0 голосов
0 ответов
спросил 20 Янв, 17 от root (25,590 баллов)
+1 голос
1 ответ
спросил 24 Дек, 14 от аноним