Частота показа банеров (ad)

Главные вкладки

Аватар пользователя MCNet MCNet 16 января 2008 в 13:44

Для отображения рекламы с заданым приоритетом я сделал так: поставил модуль ad и написал небольшой кусочек кода прямо в блоке:

function get_banner() {
    $SQL = "SELECT shower, probability from adshower ORDER BY id DESC LIMIT 1";
    $result = db_query($SQL); $out = db_fetch_array($result);
    $shower = preg_replace('/[^0-9,]/','',$out['shower']);
    $probability = preg_replace('/[^0-9,]/','',$out['probability']);
    $shower = preg_replace('/,+/',',',$shower);
    $probability = preg_replace('/,+/',',',$probability);
    $shower = preg_replace('/,$|^,/','',$shower);
    $probability = preg_replace('/,$|^,/','',$probability);
    $banners = explode(',',$shower);
    $probabilities = explode(',',$probability);
    $szB = sizeof($banners); $szP = sizeof($probabilities);
    if ($szB > $szP) $probabilities = array_fill($szP+1, $szB-$szP, 1);
    if ($szB < $szP) $probabilities = array_slice($probabilities, $szB);
    for ($i = 0; $i < $szB; $i++) {
        $total[$banners[$i]] = $probabilities[$i];
    } ksort($total);
    $banners = array_keys($total);
    $probabilities = array_values($total);
    $num = $probabilities;
    $out = array();
    $out[0] = $num[0];
    $sum = 0;
    for ($i = 1; $i < sizeof($num); $i++) {
        $sum = $num[$i-1]+$sum;
        $out[$i] = $sum*$num[$i];
    }

    $ret = array();
    for ($i = 0; $i < sizeof($out); $i++) {
        $tmp = array_fill(sizeof($ret), $out[$i], $banners[$i]);
        $ret = array_merge($ret, $tmp);
    }
    $szof = sizeof($ret)-1;
    return $ret[rand(0,$szof)];
}
$TID = get_banner();
$SQL = "SELECT tid from term_node WHERE nid = '$TID'";
$result = db_query($SQL); $out = db_fetch_array($result);
print '<div class="advertisement"><script type="text/javascript" src="/sites/all/modules/ad/serve.php?q=1&t='.$out['tid'].'"></script></div>';

Здесь функция забирает из базы id рекламных объявлений, а так же вероятности их появления.

В базу их складывает небольшой модуль. По большому счёту он не нужен, достаточно кода выше.

Возможно какнить сделаю полноценный модуль. Но не факт Wink

ВложениеРазмер
Двоичные данные ad_shower.tar_.bz21.95 КБ

Комментарии