AGAVA partners programs http://agava.ru/partners/            

Название функции

             
Веб-курсы


Что это?

Оглавление

Основы
Основы основ

Практика
Гостевая книга
Простой сайт
Структура сайта (MVC)
Ядро (Light)
Ядро
Гостевая на SQL
Статические страницы
Модуль новостей
Система регистрации

Теория
Дебаггинг
Регулярные выражения
Введение в ООП
Паттерны проектирования

Репозитарий
BB-code
Почтовый класс
Пагинатор
Всякие полезности

Download
Полезные утилиты

Разное
Видеокурсы
Последние изменения
Вопросы и замечания сюда



Реклама

Диеты для похудения
Фреймворк Kohana. Обучение. Мануал на русском.
кино онлайн бесплатно, правило регистрация.





Шаг 1

Подготовка

Одним из наиболее востребованных и простых функционалов, которыые обычно помещаются на главную (да и не только) страницу сайта, является лента последних новостей. Вот и мы не останемся в стороне от главных мировых событий и сотворим что то по образу и подобию.

Возьмем уже готовый движок с прошлого занятия и немного его доработаем.

Начнем с базы данных. У нас она уже есть, осталось добавить таблицу.
Таблица будет состоять из следующих полей:
№№ Название Тип Описание Примечание
1 id int(10) Идентификатор auto_increment
2 date timestamp Дата опубликования  
3 subtitle varchar(250) Заголовок  
4 text text Текст новости  
5 public int(1) Флаг публикации  

Вот запрос на создание такой таблицы. Уже сразу заполненной:
CREATE TABLE `irbis_news` (
  `id` int(10) NOT NULL auto_increment,
  `date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `subtitle` varchar(250) default NULL,
  `text` text,
  `public` int(1) default NULL,
  PRIMARY KEY  (`id`),
  KEY `public` (`public`,`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

-- 
-- Дамп данных таблицы `irbis_news`
-- 

INSERT INTO `irbis_news` VALUES (1, '2010-08-08 17:26:28', 'Первая новость', 'Внимание, внимание!\r\nГоворит Германия!\r\nНедавно под мостом поймали Гитлера с хвостом.\r\nКошка сдохла, хвост облез - кто промолвит, тот и съест.', 1);
INSERT INTO `irbis_news` VALUES (2, '2010-08-08 15:27:26', 'Вторая новость', 'У попа была собака.\r\nОн её любил.\r\nОна съeла кусок мяса.\r\nОн её убил.\r\nВ землю закопал.\r\nНадпись написал, что\r\nУ попа была собака.\r\nОн её любил.\r\nОна съeла кусок мяса.\r\nОн её убил. \r\nВ землю закопал.\r\nНадпись написал, что\r\nУ попа была собака.\r\nОн её любил.\r\nОна съeла кусок мяса.\r\nОн её убил.\r\nВ землю закопал.\r\nНадпись написал, что\r\nУ попа была собака.\r\nОн её любил.\r\nОна съeла кусок мяса.\r\nОн её убил.\r\nВ землю закопал.\r\nНадпись написал, что\r\nУ попа была собака.\r\nОн её любил.\r\nОна съeла кусок мяса.\r\nОн её убил.\r\nВ землю закопал.\r\nНадпись написал, что\r\nУ попа была собака.\r\nОн её любил.\r\nОна съeла кусок мяса.\r\nОн её убил.\r\nВ землю закопал.\r\nНадпись написал, что\r\nУ попа была собака.\r\nОн её любил.\r\nОна съeла кусок мяса.\r\nОн её убил.\r\nВ землю закопал.\r\nНадпись написал, что\r\nУ попа была собака.\r\nОн её любил.\r\nОна съeла кусок мяса.\r\nОн её убил.\r\nВ землю закопал.\r\nНадпись написал, что\r\nУ попа была собака.\r\nОн её любил.\r\nОна съeла кусок мяса.\r\nОн её убил.\r\nВ землю закопал.', 1);
 

Теперь подробнее. Ну с идентификатором понятно - должен быть порядок. Дальше дата. Тип поля timestamp, чтобы не заботиться о установке даты в запросе. Потом идет заголовок новости, куда без него. Сам текст, ну и флаг публикации. Он нужен для того, чтобы имелась возможность сначала спокойно написать новость, проверить, исправить, а потом только опубликовать. Ну и для архива сойдет.

Теперь добавим в наш движок модуль новостей. Вот тут можно изменить структуру, чтобы не плодить множество файлов и подключений. Так как функционал новостей очень небольшой, то вполне поместится в одном контроллере. А значит отпадает необходимость в роутере, вьюшке, да и самой директории модуля. Просто возьмем и положим (пока пустой) контроллер прямо в папку modules.


Ну и подключим в главный индекс. Вот тут и становится понятной выгода переключателя swith перед обычной подстановкой названия в путь. Этот способ у нас реализован в роутерах модулей, а в главном индексе имеется возможность подключить несколько разных модулей на одну страницу. В индексе поправим так:
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/** 
* The switch of modules 
* Переключатель страниц 
*/       
    
switch($GET['page'])  
    {  
        case 
'main':
            include 
'./modules/news_controller.php';          
            include 
'./modules/main/router.php';    
            
$page $GET['id'];  
        break;
          
        case 
'guest':     
            include 
'./modules/guest/router.php';  
        break;
                   
        default: 
            include 
'./modules/main/router.php';  
        break;     
    } 


Что это дает. А то, что новости мы теперь можем вывести не только на главной странице, а на любой другой по желанию. И даже отдельно. Стоит только подключить этот контроллер в case любого модуля.

А для полноты ощущений нам необходим шаблон, в который и будут выводится новости. Организуем в скинах для него папку news, и положим в неё шаблон:
skins/tpl/news/rows.tpl
 
1
2
3
4
5
6
7
8
<!-- ./skins/tpl/news/rows.tpl begin -->
    <div  style="padding:5px; margin-top:3px; width:250px; border:1px solid">    
    <p><?php echo $tpl_date ?><br /> 
    <b><?php echo $tpl_subtitle?></b></p>
    <p><?php echo $tpl_text?></p>
    </div>
<!-- ./skins/tpl/news/rows.tpl end -->

Ну и в шаблоне главной страницы нужно определить место, куда мы поместим самые свежие новости и будем радовать ими наших многочисленных посетителей. Изменим шаблон главной страницы:
skins/tpl/main/show.tpl
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- ./skins/tpl/main/show.tpl begin -->
<div style="padding:10px">
<div  style="float:left; padding:30px; width:200px; border:1px solid">
<?php echo createMenu($links); ?>
</div>
<div style="float:right;padding:10px; width:700px; min-height:800px; border:1px solid">
<?php echo $page_content?>
</div>
<div  style="float:left">
<?php echo $news?>
</div>
<div style="clear:both"></div>
</div>
<!-- ./skins/tpl/main/show.tpl end -->


Ну вот, подготовительные работы окончились. Приступим к самой кулинарии.
Рейтинг@Mail.ru Рейтинг@Mail.ru Яндекс цитирования
irbis-team © 2009