Баннерная система.
Вот решился ради практики написать простую баннерную систему, кому то может пригодится.
Начнем.
Что из себя представляет баннер?
Это блок в который выводится рекламное сообщение на сайте.
Что из себя будет представлять баннерная система?
1. Блок управления баннерами - назовем "Панель управления"
2. Система инициализации - это способ которым будем инициализировать вывод баннеров.
3. База данных в которой будем хранить информацию о файлах баннеров.
Что должен уметь баннер?
1. При клике мышкой по баннеру надо переходить на сайт рекламодателя.
2. Нужно вести статистику показов, переходов и т.д.
3. Нужно система лимитов на показы, переходы и т.д.
Приступим.
Реализация базы данных.
Предположим что наша банерная система вынуждена будет работать с ограниченным количеством баз данных, по этому правильно будет разместить свои данные в базе данных(БД) сайта. По этому создадим для себя таблицы.
Для демонстрации будем предполагать что БД будет носить название WORK
Сразу заложим такие параметры для подключения к БД.
БД - mysql
Сервер - localhost
Пользователь - root
Пароль - отсутствует
Имя БД - work
для удобства таблицу будем создавать самим скриптом баннерной системы.
таблица нам понадобится такая:
Каким образом будем получать баннеры с сервера?
Давайте будем делать красиво, сразу AJAX что бы не напрягать никого.
Приступим к разработке ajax файла, назовем его banners.php
Именно к нему будем обращаться через ajax запросы.
Далее текст будет обрамлет // в виде коментариев, для любителей копипаста
Код:
Вот решился ради практики написать простую баннерную систему, кому то может пригодится.
Начнем.
Что из себя представляет баннер?
Это блок в который выводится рекламное сообщение на сайте.
Что из себя будет представлять баннерная система?
1. Блок управления баннерами - назовем "Панель управления"
2. Система инициализации - это способ которым будем инициализировать вывод баннеров.
3. База данных в которой будем хранить информацию о файлах баннеров.
Что должен уметь баннер?
1. При клике мышкой по баннеру надо переходить на сайт рекламодателя.
2. Нужно вести статистику показов, переходов и т.д.
3. Нужно система лимитов на показы, переходы и т.д.
Приступим.
Реализация базы данных.
Предположим что наша банерная система вынуждена будет работать с ограниченным количеством баз данных, по этому правильно будет разместить свои данные в базе данных(БД) сайта. По этому создадим для себя таблицы.
Для демонстрации будем предполагать что БД будет носить название WORK
Сразу заложим такие параметры для подключения к БД.
БД - mysql
Сервер - localhost
Пользователь - root
Пароль - отсутствует
Имя БД - work
для удобства таблицу будем создавать самим скриптом баннерной системы.
таблица нам понадобится такая:
Поле | Тип | Параметры | Описание |
id | int(11) | NOT NULL AUTO_INCREMENT | Уникальный идентификатор |
caption | varchar | 255 | Название банера |
url | varchar | 255 | Ссылка для перехода |
imgname | varchar | 255 | название картинки для показа |
click | int(11) | default 0 | количество кликов |
limitclick | int(11) | default -1 | лимит на клики, -1 значит что отключено |
views | int(11) | default 0 | Счетчик показов |
limitviews | int(11) | default -1 | Лимит на показы, -1 - отключен контроль |
dateexpired | date | Дата истичения | |
enable | int(11) | default 0 | Включен или выключен банер |
Каким образом будем получать баннеры с сервера?
Давайте будем делать красиво, сразу AJAX что бы не напрягать никого.
Приступим к разработке ajax файла, назовем его banners.php
Именно к нему будем обращаться через ajax запросы.
Далее текст будет обрамлет // в виде коментариев, для любителей копипаста
Код:
<?php
//Ajax скрипт обработки запроса баннеров
//Конфигурация
$cfg['host'] = 'localhost';
$cfg['base'] = 'banners';
$cfg['user'] = 'root';
$cfg['pass'] = '';
$cfg['table'] = 'banners';
$cfg['path'] = '/banner/';
/*
Подключение к серверу
работать с БД будет через PDO
*/
$dsn = "mysql:host={$cfg['host']};dbname={$cfg['base']};charset=utf8";
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$pdo = new PDO($dsn, $cfg['user'], $cfg['pass'], $opt);
$pdo->query('SET NAMES utf8');
//проверка таблицы на наличие, если таблицы нет то создаем ее
$sql="CREATE TABLE IF NOT EXISTS {$cfg['table']}(
id int(11) NOT NULL AUTO_INCREMENT,
caption varchar(255),
url varchar(255),
imgname varchar(255),
click int(11) default 0,
limitclick int(11) default -1,
views int(11) default 0,
limitviews int(11) default -1,
dateexpired date,
enable int(11) default 0,
PRIMARY KEY(id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
$pdo->prepare($sql)->execute();
//используем prepare что бы при последующих показах не терять время на запрос
/*
Обработка запроса
Будем обрабатывать и GET и POST запросы.
Но по факту использовать будем только POST запросы
*/
$url=$_GET['url'];
if($url!='')$action='go_url';
else
$action=$_POST['action'];
/*
Дальше смотрим что от нас хочет запрос
get_banner - получить банер
go_url - перейти по банеру
*/
switch ($action){
case 'get_banner':{
//тут посмотрим сколько банеров от нас хочет получить запрос
$count=$_POST['count'];
if($count=='')$count=1;//если неуказано то вернем 1 банер
//Количество доступных банеров(отметаем отключенные)
$sql="select count(*) as enable_banners from {$cfg['table']} where enable=1";
$query=$pdo->prepare($sql);
$query->execute();
$row=$query->fetch();
//выберем count банеров для показа
$sql="select id,imgname,url from {$cfg['table']} where (enable=1) order by rand() limit {$count}";
$query=$pdo->prepare($sql);
$query->execute();
//Будем вести массив где будут хранится ID выбранных банеров
$b=array();
while($row=$query->fetch()){
print "<div class='banner'><a href='.{$cfg['path']}ajax/banners.php?url={$row['id']}'><img src='.{$cfg['path']}data/{$row['imgname']}'></a></div";
$b[]=$row['id'];
}
$in = str_repeat('?,', count($b) - 1) . '?';
//Накрутим счетчик показов только тем банерам которые в массиве $b[]
$sql="update {$cfg['table']} set views=views+1 where id IN ({$in})";
$query=$pdo->prepare($sql);
$query->execute($b);
//Если количество показов превышает указанное то отключаем
$sql="update {$cfg['table']} set enable=0 where (limitviews<>-1) and(views>=limitviews) and(enable=1) and( id IN ({$in}))";
$query=$pdo->prepare($sql);
$query->execute($b);
//Если дата показа истекла - отключаем
$sql="update {$cfg['table']} set enable=0 where (dateexpired IS NOT NULL) and(CURDATE()>=dateexpired) and(enable=1)";
$query=$pdo->prepare($sql);
$query->execute();
break;
};
case 'go_url':{
//$url - индекс ссылки, пометим что по ней был выполнен клик
$sql="update {$cfg['table']} set click=click+1 where id={$url}";
$pdo->query($sql);
//Если количество переходов превышает указанное то отключаем
$sql="update {$cfg['table']} set enable=0 where (limitclick<>-1) and(click>=limitclick) and(enable=1) and( id={$url})";
$query=$pdo->prepare($sql);
$query->execute($b);
//переход
$sql="select url as url_banner from {$cfg['table']} where id={$url}";
$query=$pdo->prepare($sql);
$query->execute();
$row=$query->fetch();
header('Location: '.$row['url_banner']);
break;
}
}
//Попрощаемся с базой
$pdo=null;
?>
Как будем вызывать банеры с сервера?
Давайте делать будем красиво, а именно в виде плагина к jQuery но об этом с следующей статье.
Комментариев нет:
Отправить комментарий