БЛОГ одинокого РАЗРАБОТЧИКА

Автор блога: Юра
Все рубрики (4)

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

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

Итак начнем!

Открываем файл 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)

Доброго времени суток всем!

В предыдущем посте я писал о файловой системе InstantCMS!
Сегодня, как я и обещал, мы рассмотрим базу данных данной cms! В
Instant очень понятная и простая в использовании структура БД.

Вся БД Instant CMS выглядит так:



Рассмотрим все таблицы отдельно!


Итак таблица cms_banlist  - список IP адресов, которым запрещен
доступ к сайту;
cms_banner_hits - список хитов с IP адресов по баннерам;
cms_banners - таблица самых баннеров;
cms_blogs - главная таблица блогов;
cms_blog_authors - таблица содержащая информацию о авторах блогов;
cms_blog_cats - категории блогов;
cms_blog_files - пути к файлам блогов;
cms_blog_posts - таблицы постов в блогах;
cms_board_cats - категории доски объявлений;
cms_board_items - сами объявления;
cms_cache - таблица данных о кэше;
cms_category - названия и параметры категорий статей;
cms_clubs - таблица cms Instant, которая содержит данные о
клубах  и их настройки;
cms_codecheck - данные о проверке кода, соотвественно сессиям;
cms_comments - таблица комментариев;
cms_comments_votes - таблица, содержащая данные о скрипте
голосования в комментариях;
cms_components - компоненты, их названия, настройки и параметры;
cms_content - содержит новости cms;
cms_content_access - параметры доступа к статьям;
cms_downloads - загрузки файлов (их ссылка и количество загрузок);
cms_event_hooks - зарегистрированные события;
cms_faq_cats - категории ответы/вопросы;
cms_faq_quests - содержит ответы/вопросы;
cms_filter_rules - правила и параметры фильтра (замены);
cms_filters - фильтры (замены), их названия и описания;
cms_forms - формы (обратной связи, анкеты, жалобы и пожелания и другие);
cms_form_fields - содержит поля формы и их значения;
cms_forums - форумы, их название, описание и главные настройки;
cms_forum_votes - голосавалка на форумах;
cms_forum_threads - темы на форумах и их параметры;
cms_forum_posts - записи в темах на форумах;
cms_forum_images - данные и ссылки прикрепленных к форуме картинок;
cms_forum_files - содержит ссылки и параметры файлов с форума;
cms_menu - меню CMS Instant, т.е. нашего сайта;
cms_modules - данные о подключенных модулях;
cms_modules_bind - привязка модулей к меню;
cms_online - кто онлайн, сессия, дата, данные и просматриемая страница;
cms_photo_albums - фото альбомы и их параметры;
cms_photo_files - данные о файлах фото галереи;
cms_plugins - плагины, которые установлены в системе;
cms_polls - опросы;
cms_polls_log - данные о голосах в опросах;
cms_price_cats - категории прайс-листа;
cms_price_items - элементы с прайс листа и их параметры;
cms_ratings - таблица компонента рейтинг;
cms_search - таблица компонента поиска по сайту;
cms_stats - данные компонента Instant о статистике посещения сайта;
cms_subscribe - данные о подписке;
cms_tags - теги к компонентам и страницам CMS Instant;
cms_uc_cart - данные о карточках Универсального каталога;
cms_uc_cats - компонент Универсальный каталог - категории;
cms_uc_discount - содержит данные о дисконтных скидках в
Универсальном каталоге;
cms_uc_items - товары Универсального каталога;
cms_uc_ratings - рейтинг в компоненте Универсальный каталог;
cms_upload_images - данные о загруженных картинках;
cms_users - общие данные о зарегистрированных пользователях;
cms_user_autoawards - награды пользователей CMS Instant;
cms_user_awards - данные о присвоенных наградах пользователям;
cms_user_clubs - клубы и пользователи в их;
cms_user_files - файлы пользователя;
cms_user_friends - друзья пользоватилей;
cms_user_groups - группы в которых состоят пользователи;
cms_user_karma - карма пользователей;
cms_user_msg - таблица содержащая сообщения пользователей друг другу;
cms_user_photos - фотографии пользователей;
cms_user_profiles - данные профайла пользователей;
cms_user_wall - содержание стен пользователей;
cms_users_activate - данные о активации пользователя;


Теперь мы знаем что и где лежит в таблицах базы данных CMS Instant,
можно приступать к созданию собственных модулей и компонент, чем мы и
займемся в следующих моих постах! А пока все!
С вами был Фирс Юрий Петрович! Не забываем комментировать и ставить
плюсы, если понравилось!

Вступление для создания компонентов (Часть 1)

Всем привет!
Перед началом создания своего компонента давайте разберем файловую структуру InstantCMS и структуру БД!

Файловая структура

Папка components - в этой папке содержатся каталоги всех компонентов, которые выводятся на сайте!
В каждом из этих каталогов есть файлы которые отвечают за вывод компонентов! Обязательным файлом есть - frontend.php. В котором должна присутсвовать функция с одноименным названием компонента. Общий вид этого файла такой:

Код PHP:
<?
if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }

function имя компонента(){// 

    $inCore = cmsCore::getInstance();//Подключаем главное ядро(движок) сайта, который содержит главные ф-ции
    $inDB = cmsDatabase::getInstance();//Подключаем БД


....//Тело функции компонента

} 
?>

Этот файл отвечает за вывод на сайте, а файлы, которые отвечают за вывод компонента в админке, находятся в каталоге admin\components\<название компонента>. Там главным и обязательным файлом является backend.php, который по структуре похож на frontend.php.

За вывод компонента на сайте еще отвечают файлы .tpl с папки шаблона! Их название может быть любым, но как правило оно такое:
com_<название компонента>_<название страницы компонента>

На сегодня пока все! Разберитесь с файловой структурой InstantCMS, в следующем посте посмотрим на БД и разберем ее по косточкам  smile  И потом уже преступим к созданию своего компонента!!!!
P.S. Жду комментариев и пожеланий для следующих постов... Первый пост, так что сильно не критикуйте...  laugh

Оригинал данной статьи >>>

Открытие блога!

С этого дня я буду помагать Вам разрабатывать свои модули, плагины, компоненты к CMS Instant!