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

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

             
Веб-курсы


Что это?

Оглавление

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

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

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

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

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

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



Реклама

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






Шаг 1

Шаблоны

Мы уже сделали одну гостевую книгу, основанную на файловой системе. Посмотрим теперь, чем отличается такая же книга, только с применением баз данных.
Кроме того, оценим всю прелесть готовой рамки, которую, я надеюсь, Вы тоже успели изучить.
Вот тут можно её скачать

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

Хотя не будем забегать вперед, до хранения нам нужно сначала принять эти данные, а, значит, нужна форма. Вот она:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- ./skins/tpl/guest/show.tpl begin -->  
<h2>Гостевая книга</h2>  
<?php echo $rows?> 
<div style="text-align:center;" > 
<form action="" method="post">   
Имя:<br />   
<input name="form[value1]" type="text"  value="<?php echo $POST['value1'];?>"/><br />   
Сообщение:<br />   
<textarea name="form[value2]" cols="40" rows="10"><?php echo $POST['value2'];?></textarea><br /> 
<br />   
<input name="ok" type="submit" /> <br /> 
<br /> 
</form>  
</div> 

<!-- ./skins/tpl/guest/show.tpl end -->


Форму запишем прямо в файл show.tpl (можно, кстати, легко догадаться по маркировке на шаблоне).По ней же не трудно понять, что модуль будет называться guest, нужно изготовить такую директорию в папке tpl. А вернее, переименовать уже имеющуюся заготовку (second).

Ну, а коль скоро мы изменили название страницы, значит нужно изменить установочный массив:
config.php
1
2
3
4
5
6
7
8
9
10
11

/** 
* Installation page  
* Установка страниц
*/      
    
$
CONFIG_SETTING = array(
                            
'main'   => 'Главная страница'
                            
'guest'  => 'Гостевая книга' ,     
                           );    

Раз мы ковыряемся в шаблонах, то сделаем сразу и шаблон поста:
guest/rows.tpl
1
2
3
4
5
6
7
8
9
<!-- ./skins/tpl/guest/rows.tpl begin --> 
<div style="border:1px solid; width:70%; background-color:#66FFFF; min-height:100px; margin:5px; margin-left:10%; padding:5px">  
<?php echo $tpl_date?> / <?php echo $tpl_name?> 
<hr width="30%" align="left" />  
<?php echo $tpl_text?> 
</div> 
<!-- ./skins/tpl/guest/rows.tpl end -->

Вот и всё, отображение готово. Пошли дальше.

Теперь небольшой фокус. Мы переимновали модуль, а пути в роутере остались прежними. Так вот, для того, чтобы нам не переписывать каждый раз пути в роутере и вьюшке, определим текущую директорию автоматически. А так как по нашей структуре все директории модуля называются одинаково, это избавит от путаницы и лишних движений.

А еще, раз у нас теперь будет несколько контроллеров, заставим роутеры и их искать автоматически. В зависимости от того, что находится в переменной $GET['rem']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php

/** 
* Router of the module of the main page 
* Роутер модуля главной страницы 
* @author IT studio IRBIS-team 
* @copyright © 2009 IRBIS-team 
*/ 
///////////////////////////////////////////////////////// 

/** 
* Generation of page of an error at access out of system 
* Генерация страницы ошибки при доступе вне системы 
*/ 
    
if(!defined('IRB_KEY')) 
    { 
       
header("HTTP/1.1 404 Not Found");       
       exit(
file_get_contents('../../404.html')); 
    }     
//////////////////////////////////////////////////////////// 

/**  
* Define the name of the current catalogue 
* Определяем название текущего каталога  
*/ 
    
$modul basename(dirname(__FILE__)); 

/**  
* The switch of controllers 
* Переключатель контроллеров 
*/ 
    
if($GET['rem'] && file_exists('./modules/'$modul .'/'$GET['rem'] .'_controller.php')) 
        include 
'./modules/'$modul .'/'$GET['rem'] .'_controller.php'
    else 
    { 
       
header("HTTP/1.1 404 Not Found");       
       exit(
file_get_contents('./404.html'));     
    } 
     
/**  
* Подготовка к выводу 
* Preparation for a conclusion 
*/ 
    
include './modules/'$modul .'/view.php';

Тут нужно учитывать, что разделы ($GET['rem']) в ссылках должны соответствовать префиксам контроллеров.
Если ссылка вида href('rem=read')то контроллер должен называться read_controller.php

Контроллер теперь нужно именовать, определив принадлежность к разделу. Дефолтный (тот, который включается по умолчанию) должен называться read_controller.php, так как это значение стоит в массиве $GET, если его не трогали.

Соответственно во вьюшках путь будет теперь таким:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php

/** 
* View 
* Отображение 
* @author IT studio IRBIS-team 
* @copyright © 2009 IRBIS-team 
*/ 
///////////////////////////////////////////////////////// 

/** 
* Generation of page of an error at access out of system 
* Генерация страницы ошибки при доступе вне системы 
*/ 
    
if(!defined('IRB_KEY')) 
    { 
       
header("HTTP/1.1 404 Not Found");       
       exit(
file_get_contents('../../404.html')); 
    }     
/////////////////////////////////////////////////////////// 

    
$POST htmlChars($POST); 
     
/**  
* Includes the template 
* Подключаем шаблон 
*/ 
    
include './skins/tpl/'$modul .'/show.tpl';
Этот же финт ушами нужно проделать и в админке. Зато потом можно будет просто копировать модули и не трогать роутер. Он сам все сделает.

Ну а чтобы искал, нужно изменить ссылку в навигации:
1
2
3
4
5
6
7
8
9
10
<!-- ./skins/tpl/menu.tpl begin -->   
<div id="menu">  
<ul>  
<li><a href="<?php echo href('page=main'); ?>">Главная страница</a></li>  
<li><a href="<?php echo href('page=guest'); ?>">Гостевая книга</a></li>  
</ul>   
</div>   
<!-- ./skins/tpl/menu.tpl end -->

И поменять путь в индексах
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

/** 
* The switch of modules 
* Переключатель страниц 
*/       
    
switch($GET['page'])  
    {  
/**   
* Подключаем модуль приветствия   
* Includes the greeting module   
*/          
        
case 'main':     
            include 
'./modules/main/router.php';             
        break;  
/**   
* Подключаем модуль гостевой книги   
* Includes the module of the guest book  
*/  
        
case 'guest'
            include 
'./modules/guest/router.php';  
        break;  
/**   
* Подключаем модуль приветствия по умолчанию  
* Includes the greeting module   
*/            
        
default: 
            include 
'./modules/main/router.php'
        break;     
    } 

Вот тут можно посмотреть, как это работает.


Рейтинг@Mail.ru Рейтинг@Mail.ru Яндекс цитирования
irbis-team © 2009