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

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

             
Веб-курсы


Что это?

Оглавление

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

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

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

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

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

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



Реклама

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







Шаг 8

Логическое завершение

И так, мы логично и последовательно подкрались к популярному в некоторых кругах (их называют угловатыми) native-синтаксису. Вот пример такого шаблона:
1
2
3
4
5
6
7
8
9
10
11
12
            <div id="header">Header. <a href="<?php echo WEB_ROOT;?>">Home</a> | 
                <?php if (isset($_SESSION['user'])) :?> 
                    <a href="<?php echo WEB_ROOT;?>?page=logout">Sign out</a> 
                    <?php if (!empty($_SESSION['usermode'])) :?> 
                        | <a href="<?php echo WEB_ROOT;?>?page=clean-usermode">Exit user mode</a> 
                    <?php endif;?> 
                <?php else :?> 
                    <a href="<?php echo WEB_ROOT;?>?page=login">Sign in</a> 
                <?php endif;?> 
            </div>

Практически это php в чистом виде, а где же разделение...
Мы пойдем другим путем. Будем выводить в шаблон исключительно переменные и по одной штуке. Ну и в редком исключении вызовы функций. Это будет похоже на html теги и никакой динамики. Для этого нам понадобится промежуточный файл, который присвоит результаты работы логических файлов переменным. А их уже мы и выведем в шаблон, дабы не шокировать верстальщиков обилием ифов, форов, форечей и прочих таинств программной части. В этом файле, назовем его view.php, мы приводить в порядок вывод, который потребуется на разных страницах. В нашем случае он будет выглядеть так:
libs/view.php
1
2
3
4
5
6
7
8
9
10
<?php
 

/**
* Date formatting
* Форматирование даты 
*/
    
$date formatDate(date("Y-m-d"), false); 

Теперь, раз уж мы взялись реализовывать паттерн MVC (Model-View-Controller), еще раз немного изменим структуру.

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

Вот и вынесем в него эти вычисления:
modules/main/read_controller.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php


/** 
* Выбор случайного значения из массива  
* Choice of casual value from a file 
*/ 
    
$arr_who = array(  
                       
=> IRB_WHO_FIRST,  
                            
IRB_WHO_SECOND,  
                            
IRB_WHO_THIRD,  
                            
IRB_WHO_FOURTH,  
                            
IRB_WHO_FIFTH  
                     
);           

   
$who $arr_who[rand(1,count($arr_who))]; 

2. За одно, как обещано, исправим историческую несправедливость и переименуем индексы модулей. Называться они теперь будут router.php То есть маршрутизатор.
Почему так. Дело в том, что в модуле может быть несколько контроллеров, это мы рассмотрим позже. А пока просто подготовим почву:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php



/**   
* Контроллер формирования случайного обращения  
* The controller of formation of the casual reference  
*/  
    
include './modules/main/read_controller.php';  
     
/**   
* Подготовка к выводу  
* Preparation for a conclusion  
*/  
    
include './modules/main/view.php';

3. Ну и, как видно из кода, должен быть еще и вид у каждого модуля. Справедливости ради нужно отметить, что это совсем не обязательно. В простых модулях достаточно одного контроллера и незачем делить все это на три. Но мы поделим, что бы привыкнуть к структуре, к тому же нам это пригодится в дальнейшем.

И так, файл modules/main/view.php, непосредственно в модуле. А что бы он не простаивал, подключим в систему дебаггер, который проходили раньше.
1
2
3
4
5
6
7
8
9
10
11
12
<?php


/**   
* Подключаем шаблон   
* Includes a templates   
*/ 
    
include './skins/tpl/main/show.tpl'
     
    
dbg($page);
Ну и второй по аналогии.

А вот так теперь выглядит индекс.
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php


/**   
* The main router  
* Главный маршрутизатор (роутер)  
* @author IT studio IRBIS-team  
* @copyright © 2009 IRBIS-team  
*/  
/////////////////////////////////////////////////////////  

/**  
* We establish the charset and level of errors  
* Устанавливаем кодировку и уровень ошибок  
*/  
    
header("Content-Type: text/html; charset=utf-8");  
    
error_reporting(E_ALL);  
      
/**   
* Debug   
* Дебаггер  
* @TODO To clean in release  
*/  
   
define('IRB_TRACE'true);     
   include 
'./debug.php'


     
/** 
* We connect a configuration file 
* Подключаем конфигурационный файл 
*/ 
    
include './config.php';  

/** 
* We connect a file of the language 
* Подключаем языковой файл 
*/ 
    
include './language/'IRB_LANGUAGE .'.php'
     
/** 
* Получаем файл переменных  
* Receive a variables file  
*/ 
    
include './variables.php'
     
/** 
* We connect a file of the general functions 
* Подключаем файл общих функций 
*/  
    
include './libs/default.php'
     
/** 
* We put in order a conclusion 
* Приводим в порядок вывод 
*/  
    
include './libs/view.php'
     
     
    
ob_start();   

/**   
* Подключаем меню   
* Includes the menu   
*/   
    
include './skins/tpl/menu.tpl';   

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

    
$content ob_get_contents();   
    
ob_end_clean();   
/**   
* Подключаем главный шаблон   
* Includes the basic template   
*/   
    
include './skins/tpl/index.tpl';

Ну и для полноты ощущений добавим в скин папки для картинок и javascript .
Теперь окончательная структура приложения будет такой:


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

Всё это может показаться слишком навороченным и совсем ненужным. Так оно и есть, если сайт предполагается из 2-3 страниц. Но когда приложение будет большим и многофункциональным, без структурного подхода будет крайне трудно и разрабатывать и обслуживать сайт. По этому лучше сразу привыкать к структурному мышлению.

Плюсы такого метода.
1. Можно спокойно и непринужденно разрабатывать дополнительный модуль (расширение), а потом за несколько минут внедрить в рабочий сайт.
2. Готовые модули в процессе работы накапливаются и в следующий раз можно просто собрать из них новый сайт как конструктор лего.
3. С шаблонами такого плана справится любой верстальщик, который боится шаблонизаторов или нативе.
4. Шаблоны этого типа можно разрабатывать параллельно с логикой, потому что они друг от друга практически не зависят.
5. Скорость исполнения и ресурсобережливость. По этой схеме в оперативную память грузятся только те файлы, которые действительно принимают участие в формировании данной страницы. И напрочь отсутствует разбор шаблонов с помощью регулярных выражений. А они как известно не самое быстрое явление в php.
6. Прозрачность кода. Структура построена без ООП парадигмы, которая никогда прозрачностью не отличалась. А принцип построения остался практически тем же самым..

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



Постараемся в следующих уроках более подробно рассказать об этом.

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