Как написать модуль показа баннеров?

Для CMS нужно написать модуль показа баннеров.
Подскажите статью какую о принципах работы подобного? Защиты от накруток, подсчет кликов и показов.
Есть идеи переписать модуль существующий какой от другой CMS
  • Вопрос задан
  • 3591 просмотр
Пригласить эксперта
Ответы на вопрос 5
Anonym
@Anonym
Программирую немного )
Поставьте OpenX, для CMS напишете только модуль, вставляющий зоны в нужные места.
Ответ написан
Комментировать
casey
@casey
откажитесь от mysql в пользу redis — сможете считать статистику в реальном времени, если конечно не предвидится миллионной нагрузки
Ответ написан
Комментировать
@Naps
Насчёт защиты от накруток не знаю, а в остальном.
Например:
в БД таблица banners
Столбцы: id, img, url, show, click (значение объяснять не нужно надеюсь)
В cms пишем что-то вроде:
$banner=mysql_fetch_array(mysql_query("SELECT img,id FROM banners ORDER BY RAND() LIMIT 1 "));
mysql_query("UPDATE banners SET show=show+1 WHERE id='$banner[id]'");
$banner="<a href='banner.php?go=$banner[id]'><img src="$banner[img]" alt='Баннер' /></a>";


В banner.php по аналогии.
1)Фильтруем $_GET[id] для защиты от инъекций.
2)Проверяем по кукам или в сессии, кликал ли товарищ по баннеру до этого. Если нет, прибавляем единичку в графу click. Пишем куки или в сессию, что по такому то баннеру, товарищ уже кликал.
3)Редиректим товарища по url из базы.

Примерно так. Если где-то в коде ошибся, не ругайтесь, поздно уже.
Ответ написан
@Naps
Если не нравится RAND()
То можно так:

Создаём таблицу:
CREATE TABLE `banners` (
`id` INT( 10 ) NOT NULL ,
`img` VARCHAR( 100 ) NOT NULL ,
`click` INT( 10 ) NOT NULL ,
`show` INT( 10 ) NOT NULL ,
`url` VARCHAR( 100 ) NOT NULL ,
`alt` VARCHAR( 100 ) NOT NULL ,
UNIQUE (
`id`
)
) 


banner.php (надо инклюдить в основной код):
<?php
$default_url='http://habrahabr.ru'; //Сюда перенаправляем по дефолту 

function generate_banner(){  //Генерирует код баннера
	$banner=mysql_fetch_array(mysql_query("SELECT id, img, alt FROM banners ORDER BY show ASC LIMIT 1"));
	mysql_query("UPDATE banners SET show=show+1 WHERE id='$banner[id]'");
	$banner="<a href='banner.php?go=1'><img src='$banner[img]' alt='$banner[alt]' /></a>";
	return $banner;
}
function banner_go($id){ //Редирект + проверка на клик за сессию
	global $default_url;
	if(preg_match('[^0-9]',$id)){
		$banner=mysql_query("SELECT url FROM banners WHERE id='$$id'");
		if(mysql_num_rows($banner)>0){
			$banner=mysql_fetch_array($banner);
			$default_url=$banner[url];
			if($_SESSION[banners][$id][click]!=true){
				$_SESSION[banners][$id][click]=true;
				mysql_query("UPDATE banners SET click=click+1 WHERE id='$banner[id]'");
			}
		}
	}
	header("Location: $default_url");	
}
if(isset($_GET[go])){
	banner_go($_GET[go]);
}
?>


Проверка на клик по конкретному баннеру за сессию. Баннеры показываются по очереди.
Ответ написан
Stalker_RED
@Stalker_RED
практика показывает, что подводных камней и «хотелок» менеджеров-рекламщиков в баннерке выше крыши.
и всякие статистики показов, и рекламные компании, и приоритеты показов, и прочая, прочая.

если вы вообще не представляете как к этому подступиться — поставьте OpenX, посмотрите что там внутри.
а потом решайте — стоит ли писать свое.

ну и баннерообменные сети никто не отменял.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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