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

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

Итак начнем!

Открываем файл admin\components\banners\backend.php
После строк
  1. if ($opt == 'submit'){
  2.  
  3. if (!empty($_REQUEST['title'])) { $title = $_REQUEST['title']; } else { error("Укажите название баннера!"); }
  4. $link = $_REQUEST['link'];
  5.  
  6. $typeimg = $_REQUEST['typeimg'];
  7. $maxhits = $_REQUEST['maxhits'];
  8. $maxuser = 0;
  9.  
  10. $published = $_REQUEST['published'];
  11.  
  12. $position = $_REQUEST['position'];
Добавляем:
  1. $maxday = date('Y-m-d H-i',mktime(23, 59, 59, date('m'), date('d')+$_REQUEST['maxday'], date('Y')));
  2.  
  3. $html = $_REQUEST['html'];
Далее после:
  1. if ($opt == 'update'){
  2. if(isset($_REQUEST['item_id'])) {
  3. $id = $_REQUEST['item_id'];
  4.  
  5. if (!empty($_REQUEST['title'])) { $title = $_REQUEST['title']; } else { error("Укажите название баннера!"); }
  6. $link = $_REQUEST['link'];
  7.  
  8. $typeimg = $_REQUEST['typeimg'];
  9. $maxhits = $_REQUEST['maxhits'];
  10. $maxuser = 0;
  11.  
  12. $published = $_REQUEST['published'];
  13.  
  14. $position = $_REQUEST['position'];
Добавить:
  1. $maxday = date('Y-m-d H-i',mktime(23, 59, 59, date('m'), date('d')+$_REQUEST['maxday'], date('Y')));
  2.  
  3. $html = $_REQUEST['html'];
Потом примерно на 168 строке
  1. $sql = "UPDATE cms_banners
  2. SET position = '$position',
  3. title = '$title',
  4. published = '$published',
  5. maxhits = '$maxhits',
  6. maxuser = '$maxuser',
  7. typeimg = '$typeimg',
  8. link = '$link'
  9. WHERE id = '$id'";
Заменяем на
  1. $sql = "UPDATE cms_banners
  2. SET position = '$position',
  3. title = '$title',
  4. published = '$published',
  5. maxhits = '$maxhits',
  6. maxuser = '$maxuser',
  7. typeimg = '$typeimg',
  8. link = '$link',
  9. maxday = '$maxday',
  10. html = '$html'
  11. WHERE id = '$id'";
На строках 301-303 заменяем
  1. <td><strong>Ссылка баннера: </strong><br />
  2. <span class="hinttext">Не забывайте "http://" для внешних ссылок!</span> </td>
  3. <td><input name="link" type="text" id="link" size="45" value="<?php echo @$mod['link'];?>"/></td>
  4.  
На следующее
  1. <td><strong>Тип баннера: </strong></td>
  2. <td><select name="typeimg" id="typeimg" onchange="chantype(this.value);">
  3. <option value="image" <?php if(@$mod['typeimg']=='image') { echo 'selected'; } ?>>Изображение (gif, jpg)</option>
  4. <option value="swf" <?php if(@$mod['typeimg']=='swf') { echo 'selected'; } ?>>Flash (swf) (468x60)</option>
  5. <option value="html" <?php if(@$mod['typeimg']=='html') { echo 'selected'; } ?>>HTML текст</option>
  6. <option value="code" <?php if(@$mod['typeimg']=='code') { echo 'selected'; } ?>>Баннер-код</option>
  7. </select></td>
  8.  
  9. <script type="text/javascript">
  10.  
  11. function chantype (type) {
  12. if (type=='image'||type=='swf')
  13. {
  14. htmlval = $('#html').val();
  15. $('#html').attr('disabled','disabled').val('');
  16. $('#link').attr('disabled','').val(linkval);
  17. $('#picture').attr('disabled','').val();
  18. } else {
  19. linkval = $('#link').val();
  20. $('#link').attr('disabled','disabled').val('');
  21. $('#picture').attr('disabled','disabled').val('');
  22. $('#html').attr('disabled','').val(htmlval);
  23. };
  24. }
  25. </script>
  26.  
  27.  
  28.  
Строки 321-325
  1. <td><strong>Тип баннера: </strong></td>
  2. <td><select name="typeimg" id="typeimg">
  3. <option value="image" <?php if(@$mod['typeimg']=='image') { echo 'selected'; } ?>>Изображение (gif, jpg)</option>
  4. <option value="swf">Flash (swf) (468x60)</option>
  5. </select></td>
Меняем на
  1. <td><strong>Ссылка баннера: </strong><br />
  2. <span class=" <td><strong>hinttext">Не забывайте "http://" для внешних ссылок!</span> </td>
  3. <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>
Потом ПЕРЕД следующим кодом
  1. <td><strong>Максимум показов: </strong><br />
  2. <span class="hinttext">Установите "0" для бесконечного количества</span> </td>
  3. <td><input name="maxhits" type="text" id="maxhits" size="5" value="<?php echo @$mod['maxhits'];?>"/> раз.</td>
Вставляем
  1. <td><strong>HTML код: </strong><br />
  2. <span class="hinttext">Впишите свой код или код баннерной сети</span> </td>
  3. <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>
  4. </tr>
  5. <tr>
И после
  1. <td><strong>Максимум показов: </strong><br />
  2. <span class="hinttext">Установите "0" для бесконечного количества</span> </td>
  3. <td><input name="maxhits" type="text" id="maxhits" size="5" value="<?php echo @$mod['maxhits'];?>"/> раз.</td>
  4. </tr>
  5. <tr>
Вставить нужно
  1. <td><strong>Дней показов: </strong><br />
  2. <span class="hinttext">Установите "0" для бесконечного количества</span> </td>
  3. <td><input name="maxday" type="text" id="maxday" size="5" value="<?php
  4. @$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')));
  5. echo @$days;?>"/> дней.</td>
  6. </tr>
  7. <tr>
Все с файлом admin\components\banners\backend.php покончено!

Идем далее...
Открываем файл — core/cms.php
Ищем функции public function getBanner($position) и public function getBannerById($id)
И полностю заменяем их на:
  1. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. /**
  3.   * Возвращает код баннера с минимальный количеством показов для указанной позиции
  4.   * @param string $position
  5.   * @return html
  6.   */
  7. public function getBanner($position){
  8. $inDB = cmsDatabase::getInstance();
  9. $html = '';
  10.  
  11. //get active banners with enough hits
  12. // Текущяя дата и время
  13. $nowdate = date('Y-m-d H-i');
  14. $sql = "SELECT *
  15. FROM cms_banners
  16. WHERE position = '$position' AND published = 1 AND ((maxday > '$nowdate') OR (maxday = '0000-00-00 00:00')) AND ((maxhits > hits) OR (maxhits = 0))
  17. ORDER BY hits ASC
  18. LIMIT 1";
  19. $rs = $inDB->query($sql);
  20.  
  21. if (mysql_num_rows($rs)==1){
  22. $banner = mysql_fetch_assoc($rs);
  23. if ($banner['typeimg']=='image'){
  24. $html = '<a href="/gobanner'.$banner['id'].'" title="'.$banner['title'].'" target="_blank"><img src="/images/banners/'.$banner['fileurl'].'" alt="'.$banner['title'].'"/></a>';
  25. }
  26. if ($banner['typeimg']=='swf'){
  27. $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".
  28. '<param name="movie" value="/images/banners/'.$banner['fileurl'].'?banner_id='.$banner['id'].'" />'."\n".
  29. '<param name="quality" value="high" />'."\n".
  30. '<param name="FlashVars" value="banner_id='.$banner['id'].'" />'."\n".
  31. '<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".
  32. '</embed>'."\n".
  33. '</object>';
  34. }
  35. if ($banner['typeimg']=='html'||$banner['typeimg']=='code'){
  36. $html = '<div id="bannerclick" onmouseover="banclk();" rel="'.$banner['id'].'">'.$banner['html'].'</div>';
  37. }
  38. if ($html) { $inDB->query("UPDATE cms_banners SET hits = hits + 1 WHERE id=".$banner['id']); }
  39. }
  40. return $html;
  41. }
  42.  
  43. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  44. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  45. /**
  46.   * Возвращает код баннера по ID
  47.   * @param int $id
  48.   * @return html
  49.   */
  50. public function getBannerById($id){
  51. $inDB = cmsDatabase::getInstance();
  52. $html = '';
  53.  
  54. $sql = "SELECT *
  55. FROM cms_banners
  56. WHERE id = $id
  57. LIMIT 1";
  58. $rs = $inDB->query($sql);
  59.  
  60. if (mysql_num_rows($rs)==1){
  61. $banner = mysql_fetch_assoc($rs);
  62. if ($banner['typeimg']=='image'){
  63. $html = '<a href="/gobanner'.$banner['id'].'" title="'.$banner['title'].'"><img src="/images/banners/'.$banner['fileurl'].'" alt="'.$banner['title'].'"/></a>';
  64. }
  65. if ($banner['typeimg']=='swf'){
  66. $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".
  67. '<param name="movie" value="/images/banners/'.$banner['fileurl'].'?banner_id='.$banner['id'].'" />'."\n".
  68. '<param name="quality" value="high" />'."\n".
  69. '<param name="FlashVars" value="banner_id='.$banner['id'].'" />'."\n".
  70. '<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".
  71. '</embed>'."\n".
  72. '</object>';
  73. }
  74. if ($banner['typeimg']=='html'||$banner['typeimg']=='code'){
  75. $html = $banner['html'];
  76. }
  77. }
  78. return $html;
  79. }
  80.  
  81. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Далее в файле templates/ваш_шаблон/basic/js/basic.js добавим в конце следующее:
  1. oneclc = 0;
  2. function banclk() {
  3. $('#bannerclick > *').click( function() {
  4. if (oneclc==0)
  5. {
  6. var id = $('#bannerclick').attr('rel');
  7.  
  8. $.get('/modules/banner/banner.php',{ id:id });
  9. };
  10. oneclc = 1;
  11. });
  12. }
И обязательно делаем запрос к БД
  1. ALTER TABLE `cms_banners` ADD `maxday` DATETIME NOT NULL ,
  2. ADD `html` TEXT NOT NULL ;
Вот и все у нас теперь модернизированная система баннерокрутилки! smile
Вопросы установки пишите — отвечу! Кому пригодиться — ставьте плюсы!
Группе, к которой вы принадлежите, запрещено просматривать этот скрытый текст
+2
Интересующаяся 14 лет назад #
А в чем смысл этой модернизации? smile
0
Юра Юра 14 лет назад #
Задача - возможность вставлять код от любых баннерообменников, а также менять кол-во дней показа баннера!

Часто мы используем код от Гугла и Яндекс директа - теперь это возможно и в Инстанте( с помощью этой модернизации)!
+2
Эдуард Исламов Эдуард Исламов 14 лет назад #
Хорошая работа, Юра - тема архиважная - но как-то всегда уходит на второй план.
Для полного счастья желательно ещё прикрутить подконтрольное количество показов и кликов...
+3
Юра Юра 14 лет назад #
На днях добавлю еще и это!
-1
14 лет назад #
А в том, что "Юра" жуткий гад... Сначала берет деньги вот за такую работу, а потом выкладывает на всеобщее обозрение....
+2
Юра Юра 14 лет назад #
Жадность фраера погубит!
Авторские права мои, вы их не покупали! Лучше бы сами что-то подобное выложели нежели обзываться! smile
-1
14 лет назад #
Вот "в этих словах" вся ваша сущность...
Да уж... Надурил с "заказом" украл предоплату - верни деньги!
0
14 лет назад #
Вот, люди, Этот "Юра" живой пример плохого исполнителя.
Если хотите с ним иметь дело, то заключайте безопасную сделку через WEBLANCER - а ни то, он Вас надурит, как меня.
Арбитраж вас рассудит.
Юра у нас человек не надежный, говорит одно, получается другое...
Выложу переписку с ним сюда
+3
14 лет назад #
Ребята давайте мы не будем устраивать разборок. Вы beekeeper высказались, а выкладывать переписку я считаю не стоит.
+1
14 лет назад #
Да, согласен
+1
MonAmur MonAmur 14 лет назад #
если была договоренность, что сделанное не будет в паблике, то тогда еще и можно было бы предъявить претензию.
сейчас с Юрой договорился о создании грабилки rss. если посчитает нужным его выложить - я не против. сам выкладывать не буду. автор же он...
+1
14 лет назад #
Моя личная просьба к нему была.
+2
Anonimus Anonimus 14 лет назад #
вот ты то как раз то и можешь, ты заказываешь разработку, значит хозяин ты
-1
14 лет назад #
У меня были заказы у Юрия! Хороший исполнитель: грамотный и четкий! Со мной работал без предоплаты!
P.S. Доработки полезные Юре +1. Спасибо
+1
14 лет назад #
Ты не Юра часом? )
0
lezginka.ru lezginka.ru 14 лет назад #
вещь нужная +
Юра, а не проще было сами измененные файлы выложить.
а можно сделать, чтобы при каждом новом открытии страницы банеры менялись.
Типа: один раз открыл страницу показал банер гугла, следующий раз открыл страницу от бегуна ?
+2
Юра Юра 14 лет назад #
Юра, а не проще было сами измененные файлы выложить.

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

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

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

Такая беда только у меня одного?
+1
Юра Юра 14 лет назад #
Какая версия Инстанта у Вас?
+1
14 лет назад #
Последняя. Получается такой финт ушами: создаю графический баннер (он создаётся), потом изменяю его на код (такой баннер "с нуля" не создаётся).
+1
Юра Юра 14 лет назад #
В понедельник гляну в чем возможна проблема и исправлю!
+1
14 лет назад #
Хех) Обновил патчем, вообще баннеры исчезли))
+1
Юра Юра 14 лет назад #
)))
Каким патчем? Может перезаписал файлы компонента Баннеры?
+1
14 лет назад #
Патчем для InstantCMS v.1.5.2. К которому "баннеролисталку не прикрутили")
+1
Юра Юра 14 лет назад #
))
Заново залей файлы с моего архива!
+1
14 лет назад #
Та же самая проблема. Баннеры не вставляются. Как был единственный. так и остался. Все перезалила из архива Вашего, но бесполезно - все то же самое
+1
Виктор Виктор 14 лет назад #
Для чего нужен модуль в архиве /modules/banner/banner.php?
Ведь в таком в таком виде, во-первых, движок его не станет выполнять, а во-вторых, нигде не сказано что его нужно добавить в модули.
+1
Виктор Виктор 14 лет назад #
Но тем не менее, все нормально работает.
с banner.php разобрался.
0
lezginka.ru lezginka.ru 12 лет назад #
оставить стандартный и прикрутить "от юры", сложно ?
+1
schved schved 12 лет назад #
Для 1.8 подходит эта модернизация?
0
seyfer seyfer 12 лет назад #
Делаете модуль, вставляете в него код от гугла или яндекса, располагаете модуль в местах для баннеров, в чем проблема вообще?
0
Anonim Anonim 12 лет назад #
Приветствую, seyfer!
В том, проблема, что баннеры, это не модули. Хочется иметь в разделе "баннеры" всю рекламу системы. Единую. В том числе, совместить бы баннеры с компонентом "реклама" который тут тоже есть!
Будет здорово!
0
rulestyle rulestyle 12 лет назад #
на 1.9 работает?
0
ivanish ivanish 11 лет назад #
Нет :(
0
ivanish ivanish 11 лет назад #
Решил эту проблему через гугловскую Даблклик.
Там и статистика и любые форматы и при откручивании баннера - автовставка адсенса и кабинет рекламодателя. Короче серьезное решение + трафф с серверов гугла.
0
Константин Г. Константин Г. 10 лет назад #
Автор, чо насчет версиии для 1.10.1 и с базы на файлах?

Еще от автора

Вступление для создания компонентов (Часть 2)
Доброго времени суток всем! В предыдущем посте я писал о файловой системе InstantCMS! Сегодня, как я и обещал, мы рассмотрим базу данных данной cms!
Вступление для создания компонентов (Часть 1)
Всем привет! Перед началом создания своего компонента давайте разберем файловую структуру InstantCMS и структуру БД!
Открытие блога!
С этого дня я буду помагать Вам разрабатывать свои модули, плагины, компоненты к CMS Instant!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.