Модернизируем баннеролисталку

806
Здравствуйте! Сегодня покажу как улучшить баннеролисталку!
Задача - возможность вставлять код от любых баннерообменников, а также кол-во дней показа баннера!

Итак начнем!

Открываем файл admin\components\banners\backend.php
После строк
Код PHP:
if ($opt == 'submit'){

			if (!empty($_REQUEST['title'])) { $title = $_REQUEST['title']; } else { error("Укажите название баннера!"); }
			$link = $_REQUEST['link'];

			$typeimg = $_REQUEST['typeimg'];
			$maxhits = $_REQUEST['maxhits'];
			$maxuser = 0;

			$published = $_REQUEST['published'];

			$position = $_REQUEST['position'];
Добавляем:
Код PHP:
$maxday =  date('Y-m-d H-i',mktime(23, 59, 59, date('m'), date('d')+$_REQUEST['maxday'], date('Y')));

			$html = $_REQUEST['html'];
Далее после:
Код PHP:
if ($opt == 'update'){
		if(isset($_REQUEST['item_id'])) {
			$id = $_REQUEST['item_id'];

			if (!empty($_REQUEST['title'])) { $title = $_REQUEST['title']; } else { error("Укажите название баннера!"); }
			$link = $_REQUEST['link'];

			$typeimg = $_REQUEST['typeimg'];
			$maxhits = $_REQUEST['maxhits'];
			$maxuser = 0;

			$published = $_REQUEST['published'];

			$position = $_REQUEST['position'];
Добавить:
Код PHP:
$maxday =  date('Y-m-d H-i',mktime(23, 59, 59, date('m'), date('d')+$_REQUEST['maxday'], date('Y')));

			$html = $_REQUEST['html'];
Потом примерно на 168 строке
Код PHP:
$sql = "UPDATE cms_banners
					SET position = '$position',
						title = '$title',
						published = '$published',
						maxhits = '$maxhits',
						maxuser = '$maxuser',
						typeimg = '$typeimg',
						link = '$link'
					WHERE id = '$id'";
Заменяем на
Код PHP:
$sql = "UPDATE cms_banners
					SET position = '$position',
						title = '$title',
						published = '$published',
						maxhits = '$maxhits',
						maxuser = '$maxuser',
						typeimg = '$typeimg',
						link = '$link',
						maxday = '$maxday',
						html = '$html'
					WHERE id = '$id'";
На строках 301-303 заменяем
Код PHP:
 <td><strong>Ссылка баннера: </strong><br />
						<span class="hinttext">Не забывайте "http://" для внешних ссылок!</span>					</td>
				    <td><input name="link" type="text" id="link" size="45" value="<?php echo @$mod['link'];?>"/></td>
			      
На следующее
Код PHP:
 <td><strong>Тип баннера: </strong></td>
				    <td><select name="typeimg" id="typeimg" onchange="chantype(this.value);">
                      <option value="image" <?php if(@$mod['typeimg']=='image') { echo 'selected'; } ?>>Изображение (gif, jpg)</option>
                      <option value="swf" <?php if(@$mod['typeimg']=='swf') { echo 'selected'; } ?>>Flash (swf) (468x60)</option>
                      <option value="html" <?php if(@$mod['typeimg']=='html') { echo 'selected'; } ?>>HTML текст</option>
                      <option value="code" <?php if(@$mod['typeimg']=='code') { echo 'selected'; } ?>>Баннер-код</option>
                    </select></td>

                    <script type="text/javascript">

					function chantype (type) {
						if (type=='image'||type=='swf')
						{
							htmlval = $('#html').val();
							$('#html').attr('disabled','disabled').val('');
							$('#link').attr('disabled','').val(linkval);
							$('#picture').attr('disabled','').val();
						} else {
							linkval = $('#link').val();
							$('#link').attr('disabled','disabled').val('');
							$('#picture').attr('disabled','disabled').val('');
							$('#html').attr('disabled','').val(htmlval);
						};
					}
                    </script>


			      
Строки 321-325
Код PHP:
 <td><strong>Тип баннера: </strong></td>
				    <td><select name="typeimg" id="typeimg">
                      <option value="image" <?php if(@$mod['typeimg']=='image') { echo 'selected'; } ?>>Изображение (gif, jpg)</option>
                      <option value="swf">Flash (swf) (468x60)</option>
                    </select></td>
Меняем на
Код PHP:
 <td><strong>Ссылка баннера: </strong><br />
						<span class=" <td><strong>hinttext">Не забывайте "http://" для внешних ссылок!</span>					</td>
				    <td><input name="link" type="text" id="link" size="45" value="<?php echo @$mod['link'];?>" <? if(@$mod['typeimg']=='html'||@$mod['typeimg']=='code') { echo 'disabled="disabled"'; } ?>/></td>
Потом ПЕРЕД следующим кодом
Код PHP:
 <td><strong>Максимум показов: </strong><br />
						<span class="hinttext">Установите "0" для бесконечного количества</span>					</td>
				    <td><input name="maxhits" type="text" id="maxhits" size="5" value="<?php echo @$mod['maxhits'];?>"/>  раз.</td>
Вставляем
Код PHP:
 <td><strong>HTML код: </strong><br />
						<span class="hinttext">Впишите свой код или код баннерной сети</span>					</td>
				    <td><textarea name="html" id="html" cols="30" rows="4" <?php if(@$mod['typeimg']=='html'||@$mod['typeimg']=='code') { echo ' '; } else { echo 'disabled="disabled"'; } ?>><?php echo @$mod['html'];?></textarea></td>
			      </tr>
				  <tr>
И после
Код PHP:
  <td><strong>Максимум показов: </strong><br />
						<span class="hinttext">Установите "0" для бесконечного количества</span>					</td>
				    <td><input name="maxhits" type="text" id="maxhits" size="5" value="<?php echo @$mod['maxhits'];?>"/>  раз.</td>
			      </tr>
				  <tr>
Вставить нужно
Код PHP:
<td><strong>Дней показов: </strong><br />
						<span class="hinttext">Установите "0" для бесконечного количества</span>					</td>
				    <td><input name="maxday" type="text" id="maxday" size="5" value="<?php
					@$days = abs(gregorianToJD(date('m',strtotime(@$mod['maxday'])), date('d',strtotime(@$mod['maxday'])), date( 'Y',strtotime(@$mod['maxday']))) - gregorianToJD(date('m'), date('d'), date( 'Y')));
					echo @$days;?>"/>  дней.</td>
			      </tr>
				  <tr>
Все с файлом admin\components\banners\backend.php покончено!

Идем далее...
Открываем файл - core/cms.php
Ищем функции public function getBanner($position) и public function getBannerById($id)
И полностю заменяем их на:
Код PHP:
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * Возвращает код баннера с минимальный количеством показов для указанной позиции
     * @param string $position
     * @return html
     */
    public function getBanner($position){
        $inDB = cmsDatabase::getInstance();
        $html = '';

        //get active banners with enough hits
        // Текущяя дата и время
		$nowdate = date('Y-m-d H-i');
        $sql = "SELECT *
                FROM cms_banners
                WHERE position = '$position' AND published = 1 AND ((maxday > '$nowdate') OR (maxday = '0000-00-00 00:00')) AND ((maxhits > hits) OR (maxhits = 0))
                ORDER BY hits ASC
                LIMIT 1";
        $rs = $inDB->query($sql);

        if (mysql_num_rows($rs)==1){
            $banner = mysql_fetch_assoc($rs);
            if ($banner['typeimg']=='image'){
                $html = '<a href="/gobanner'.$banner['id'].'" title="'.$banner['title'].'" target="_blank"><img src="/images/banners/'.$banner['fileurl'].'" border="0" alt="'.$banner['title'].'"/></a>';
            }
            if ($banner['typeimg']=='swf'){
                $html = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="468" height="60">'."\n".
                            '<param name="movie" value="/images/banners/'.$banner['fileurl'].'?banner_id='.$banner['id'].'" />'."\n".
                            '<param name="quality" value="high" />'."\n".
                            '<param name="FlashVars" value="banner_id='.$banner['id'].'" />'."\n".
                            '<embed src="/images/banners/'.$banner['fileurl'].'?banner_id='.$banner['id'].'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="468" height="60">'."\n".
                            '</embed>'."\n".
                        '</object>';
            }
			if ($banner['typeimg']=='html'||$banner['typeimg']=='code'){
                $html = '<div id="bannerclick" onmouseover="banclk();" rel="'.$banner['id'].'">'.$banner['html'].'</div>';
            }
            if ($html) { $inDB->query("UPDATE cms_banners SET hits = hits + 1 WHERE id=".$banner['id']);	}
        }
        return $html;
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * Возвращает код баннера по ID
     * @param int $id
     * @return html
     */
    public function getBannerById($id){
        $inDB = cmsDatabase::getInstance();
        $html = '';

        $sql = "SELECT *
                FROM cms_banners
                WHERE id = $id
                LIMIT 1";
        $rs = $inDB->query($sql);

        if (mysql_num_rows($rs)==1){
            $banner = mysql_fetch_assoc($rs);
            if ($banner['typeimg']=='image'){
                $html = '<a href="/gobanner'.$banner['id'].'" title="'.$banner['title'].'"><img src="/images/banners/'.$banner['fileurl'].'" border="0" alt="'.$banner['title'].'"/></a>';
            }
            if ($banner['typeimg']=='swf'){
                $html = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="468" height="60">'."\n".
                            '<param name="movie" value="/images/banners/'.$banner['fileurl'].'?banner_id='.$banner['id'].'" />'."\n".
                            '<param name="quality" value="high" />'."\n".
                            '<param name="FlashVars" value="banner_id='.$banner['id'].'" />'."\n".
                            '<embed src="/images/banners/'.$banner['fileurl'].'?banner_id='.$banner['id'].'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="468" height="60">'."\n".
                            '</embed>'."\n".
                        '</object>';
            }
			if ($banner['typeimg']=='html'||$banner['typeimg']=='code'){
                $html = $banner['html'];
            }
        }
        return $html;
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Далее в файле templates/ваш_шаблон/basic/js/basic.js добавим в конце следующее:
Код PHP:
oneclc = 0;
function banclk() {
	$('#bannerclick	> *').click( function() {
          if (oneclc==0)
          {
          var id = $('#bannerclick').attr('rel');

          $.get('/modules/banner/banner.php',{ id:id });
          };
          oneclc = 1;
          });
}
И обязательно делаем запрос к БД
Код PHP:
ALTER TABLE `cms_banners` ADD `maxday` DATETIME NOT NULL ,
ADD `html` TEXT NOT NULL ;
Вот и все у нас теперь модернизированная система баннерокрутилки!  smile
Вопросы установки пишите - отвечу! Кому пригодиться - ставьте плюсы!
Скрытый текст виден только зарегистрированным пользователям
Вступление для создания компонентов (Часть 2)
Комментарии (37)
Интересующаяся 4 сентября 2009 в 11:37 +2
А в чем смысл этой модернизации?   smile
Юра 4 сентября 2009 в 11:55 0
small user social cms
Задача - возможность вставлять код от любых баннерообменников, а также менять кол-во дней показа баннера!

Часто мы используем код от Гугла и Яндекс директа - теперь это возможно и в Инстанте( с помощью этой модернизации)!
Эдуард Исламов 4 сентября 2009 в 12:05 +2
small user social cms
Хорошая работа, Юра - тема архиважная - но как-то всегда уходит на второй план.
Для полного счастья желательно ещё прикрутить подконтрольное количество показов и кликов...
Юра 4 сентября 2009 в 12:30 +3
small user social cms
На днях добавлю еще и это!
0 4 сентября 2009 в 21:45 -1
no avatar
А в том, что "Юра" жуткий гад... Сначала берет деньги вот за такую работу, а потом выкладывает на всеобщее обозрение....
Юра 5 сентября 2009 в 07:14 +2
small user social cms
Жадность фраера погубит!
Авторские права мои, вы их не покупали! Лучше бы сами что-то подобное выложели нежели обзываться! smile
0 5 сентября 2009 в 08:07 -1
no avatar
Вот "в этих словах"  вся ваша сущность...
Да уж... Надурил с "заказом" украл предоплату - верни деньги!
0 5 сентября 2009 в 08:11 0
no avatar
Вот, люди, Этот "Юра" живой пример плохого исполнителя.
Если хотите с ним иметь дело, то заключайте безопасную сделку через WEBLANCER - а ни то, он Вас надурит, как меня.
Арбитраж вас рассудит.
Юра у нас человек не надежный, говорит одно, получается другое...
Выложу переписку с ним сюда
0 5 сентября 2009 в 08:22 +3
no avatar
Ребята давайте мы не будем устраивать разборок. Вы beekeeper высказались, а выкладывать переписку я считаю не стоит.
0 5 сентября 2009 в 11:26 +1
no avatar
Да, согласен
MonAmur 5 сентября 2009 в 09:37 +1
small user social cms
если была договоренность, что сделанное не будет в паблике, то тогда еще и можно было бы предъявить претензию.
сейчас с Юрой договорился о создании грабилки rss. если посчитает нужным его выложить - я не против. сам выкладывать не буду. автор же он...
0 5 сентября 2009 в 11:21 +1
no avatar
Моя личная просьба к нему была.
Anonimus 5 сентября 2009 в 16:16 +2
small user social cms
вот ты то как раз то и можешь, ты заказываешь разработку, значит хозяин ты
0 5 сентября 2009 в 09:49 -1
no avatar
У меня были заказы у Юрия! Хороший исполнитель: грамотный и четкий! Со мной работал без предоплаты!
P.S. Доработки полезные Юре +1. Спасибо
0 5 сентября 2009 в 11:20 +1
no avatar
Ты не Юра часом? )
lezginka.ru 4 сентября 2009 в 12:10 0
small user social cms
вещь нужная +
Юра, а не проще было сами измененные файлы выложить.
а можно сделать, чтобы при каждом новом открытии страницы банеры менялись.
Типа: один раз открыл страницу показал банер гугла, следующий раз открыл страницу от бегуна ?
Юра 4 сентября 2009 в 12:12 +2
small user social cms
Юра, а не проще было сами измененные файлы выложить.

В конце есть ссылка на архив!

а можно сделать, чтобы при каждом новом открытии страницы банеры менялись.
Типа: один раз открыл страницу показал банер гугла, следующий раз открыл страницу от бегуна ?

Оно так и есть! Каждый раз новый баннер! smile У меня по крайней мере так работает!
0 5 сентября 2009 в 04:43 +2
no avatar
Что сказать, молодец)
Теперь ещё каталог кто-нибудь поднакачал бы, вообще красота будет)
0 5 сентября 2009 в 10:53 +1
no avatar
У меня проблемка. Баннеры не создаются. Тот один, который был, работает: можно его редактировать (картинка, код). А при попытке создать новый после нажатия на кнопку "сохранить" переходит к списку баннеров, в котором нового баннера, увы, нет.

Такая беда только у меня одного?
Юра 5 сентября 2009 в 11:03 +1
small user social cms
Какая версия Инстанта у Вас?
0 5 сентября 2009 в 11:52 +1
no avatar
Последняя. Получается такой финт ушами: создаю графический баннер (он создаётся), потом изменяю его на код (такой баннер "с нуля" не создаётся).
Юра 5 сентября 2009 в 12:21 +1
small user social cms
В понедельник гляну в чем возможна проблема и исправлю!
0 8 сентября 2009 в 04:08 +1
no avatar
Хех) Обновил патчем, вообще баннеры исчезли))
Юра 8 сентября 2009 в 06:09 +1
small user social cms
)))
Каким патчем? Может перезаписал файлы компонента Баннеры?
0 8 сентября 2009 в 07:23 +1
no avatar
Патчем для InstantCMS v.1.5.2. К которому "баннеролисталку не прикрутили")
Юра 8 сентября 2009 в 09:27 +1
small user social cms
))
Заново залей файлы с моего архива!
0 5 октября 2009 в 20:23 +1
no avatar
Та же самая проблема. Баннеры не вставляются. Как был единственный. так и остался. Все перезалила из архива Вашего, но бесполезно - все то же самое
Виктор 17 ноября 2009 в 17:45 +1
small user social cms
Для чего нужен модуль в архиве /modules/banner/banner.php?
Ведь в таком в таком виде, во-первых, движок его не станет выполнять, а во-вторых, нигде не сказано что его нужно добавить в модули.
Виктор 17 ноября 2009 в 17:55 +1
small user social cms
Но тем не менее, все нормально работает.
с banner.php разобрался.
lezginka.ru 30 сентября 2011 в 20:36 0
small user social cms
оставить стандартный и прикрутить "от юры", сложно ?
schved 30 сентября 2011 в 20:55 +1
small user social cms
Для 1.8 подходит эта модернизация?
seyfer 1 октября 2011 в 17:00 0
small user social cms
Делаете модуль, вставляете в него код от гугла или яндекса, располагаете модуль в местах для баннеров, в чем проблема вообще?
Anonim 23 ноября 2011 в 17:19 0
no profile
Приветствую, seyfer!
В том, проблема, что баннеры, это не модули. Хочется иметь в разделе "баннеры" всю рекламу системы. Единую. В том числе, совместить бы баннеры с компонентом "реклама" который тут тоже есть!
Будет здорово!
rulestyle 27 февраля 2012 в 00:48 0
small user social cms
на 1.9 работает?
ivanish 1 июня 2012 в 22:44 0
small user social cms
Нет :(
ivanish 2 июня 2012 в 14:16 0
small user social cms
Решил эту проблему через гугловскую Даблклик.
Там и статистика и любые форматы и при откручивании баннера - автовставка адсенса и кабинет рекламодателя. Короче серьезное решение + трафф с серверов гугла.
Константин Г. 11 мая 2013 в 16:04 0
small user social cms
Автор, чо насчет версиии для 1.10.1 и с базы на файлах?