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

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

             
Веб-курсы


Что это?

Оглавление

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

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

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

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

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

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



Реклама

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







Шаг 2

Буферизация

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

Вот тут не помощь приходит одна замечательная особенность PHP. Буферизация.
С явлением буферизации пользователь ПК сталкивается очень часто. Другими словами это простой копи-паст. Когда мы выделяем какой то текст и жмем "копировать", то все, что попало в выделение, записывается в переменную (буфер). А когда жмем "вставить", то вынимаем данные из буфера и вставляем куда нужно.

Так вот PHP умеет делать тоже самое. Сейчас убедимся. Сделаем второй шаблон:
show.tpl
1
2
3
4
5
<div style="padding:10px; background-color:#33FFFF;"> 
<h3 style="color:#003399;"><?php echo $salutation ?></h3> 
</div>

а главный индекс перепишем так:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php


    ob_start
();     
     
    
$salutation 'Привет, мир!'
/** 
* Подключаем шаблон приветствия 
* Includes a salutation template 
*/    
    
include './show.tpl'
         
    
$content ob_get_contents(); 
    
ob_end_clean(); 
/** 
* Подключаем шаблон 
* Includes a template 
*/    
    
include './index.tpl';

Что тут происходит. Функция ob_start() начинает складывать в буфер весь вывод, который следует после неё. То есть все это не будет отправлено в браузер, а. Так же, как мы выделяем текст. А так, как мы помним, что вместо include можно прописать код из подключенного файла, получится примерно так:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

    ob_start
();     
     
    
$salutation 'Привет, мир!'
    

<div style="width:300px; padding:10px; margin:20px auto auto 200px;  background-color:#33FFFF;"> 
<h3 style="color:#003399;"><?php echo $salutation ?></h3>


         
    $content 
ob_get_contents(); 
    
ob_end_clean(); 
/** 
* Подключаем шаблон 
* Includes a template 
*/    
    
include './skins/tpl/index.tpl';
Потом функция ob_get_contents() вынимает все оттуда и помещает в переменную $content. То есть похоже на Ctrl+C. Потом функцией ob_end_clean() мы очищаем буфер на всякий случай (весь вывод у нас уже в переменной) и дальше идем в главный шаблон и вставляем все туда:
1
2
3
4
5
<body>  
<?php echo $content ?>  
</body>


Опять закономерен вопрос - для чего эти пляски под луной. Ответ прост. На главной странице допустим нам нужно приветствие. А на другой - что то другое. И с совершенно другой разметкой. По этому мы и поделили все на шаблоны, оставив в логической части голые данные. Теперь мы можем не только динамически задавать текст, но и переключать шаблоны.

Но для этого нужно создать структуру. Поместим шаблоны в отдельный каталог tpl, а его в другой - skins В него будем складывать все, что касается отображения - стили, картинки, шаблоны и так далее. Это часть паттерна MVC "вид".
Вот так:




Теперь главный индекс будет таким:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php


    ob_start
();     
     
    
$salutation 'Привет, мир!'
/** 
* Подключаем шаблон приветствия 
* Includes a salutation template 
*/    
    
include './skins/tpl/show.tpl'
         
    
$content ob_get_contents(); 
    
ob_end_clean(); 
/** 
* Подключаем шаблон 
* Includes a template 
*/    
    
include './skins/tpl/index.tpl';


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

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


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