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

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

             
Веб-курсы


Что это?

Оглавление

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

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

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

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

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

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



Реклама

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





Шаг 1

Основной принцип

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

По этому, если действительно хотите стать настоящим программистом, забудьте про тот скрипт. Начнем все сначала. Ну а кто начал отсюда - повезло. ))

Жалко? Не нужно жалеть, это всего навсего буквы. Если жалеть каждый неудачно написанный скрипт, толку никогда не выйдет. Мы будем делать настоящие, профессиональные сайты.

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

Есть масса способов организации называемого движка. Это принято называть архитектурой или паттернами (шаблонами проектирования).
Самым популярным на сегодняшний день является паттерн MVC (Model-View-Controller). Ну и начнем отсюда отталкиваться

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

Графическое представление этого безобразия:

которое приведено в википедии, напомнило мне эту картинку:

хотя на самом деле все просто до безумия. Самым жизненным примером этой схемы является обычный телевизор.

Видели когда-нибудь?
Так вот. Сзади у него есть панель с разъёмами. Можно подключить антенну, видеомагнитофон, DVD или даже игровую приставку DANDY. Вот эта панель отвечает за связь с источниками информации либо потребителями. В MVC это называется "МОДЕЛЬ", то есть то, что отвечает за получение или выдачу данных каким то источникам. Базе данных, файловой структуре или еще чего.

Прямо напротив, с аверсной стороны, находится экран. Кинескоп. Или плазма, не важно. Важно, что это устройство позволяет сделать работу телевизора видимой. Это "ВИД" или отображение.

А между ними что то гудит и иногда дымится. Там непонятная куча деталей, которая из полученной информации может сделать кино. Это "КОНТРОЛЛЕР".

Вот и все ужасы. На сайте это выглядит так:

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

2. Вид - это шаблоны. То есть оболочка для информации. Стили, картинки, верстка и прочая красота. А так же функции, которые выбирают нужные шаблоны и вставляют в них нужную информацию.

3. Ну и контроллер - сам скрипт, который готовит блюдо под названием "страница".

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

Схема эта довольно проста как в реализации так и в дальнейшем использовании.

Основные принципы.
1. Полностью разделяем бизнесс-логику с представлением. (Имеется ввиду именно логика и представление, а не php и html)
2. Максимально используется процедурный подход, который более прозрачен.
3. Функционал приложения делится на отдельные, самодостаточные модули.
4. Используется набор общих функций и классов (подобие библиотеки или фреймворка, как угодно)

Как это работает.

Допустим нам нужно сделать главную страницу, и на ней вывести набивший оскомину "Привет, Мир!". Так и сделаем. Вот первый и главный файл:
index.html
1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"> 
<head>
<title>Мой сайт</title> 
</head> 
<body> 
Привет, Мир! 
</body> 
</html>

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


/** 
* Подключаем шаблон 
* Includes a template 
*/    
    
include './index.tpl';


Языковые конструкции include, include_once, requre и requre_once позволяют объединить несколько файлов в один. Подробнее про это тут.
Обратите внимание на расширение файла .tpl Теперь это уже не главный файл, а всего навсего шаблон ( англ. template). Это негласное правило, обозначать шаблоны таким расширением. Такие файлы подсвечиваются многими редакторами и сразу видно, что это не готовый HTML а только часть, полуфабрикат.

Чего нам не сиделось на месте, ведь вроде бы ничего не изменилось. Но это пока. А вот сейчас и начнется магия динамических сайтов. Переделаем шаблон так:
1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">  
<head> 
<title>Мой сайт</title>  
</head>  
<body>  
<?php echo $content ?>  
</body>  
</html>

а index.php так:
1
2
3
4
5
6
7
8
9
10
11
<?php


    $content 
'Привет, Мир!'
/** 
* Подключаем шаблон 
* Includes a template 
*/    
    
include './index.tpl';

Если запустить, то на первый взгляд опять ничего не поменялось, все тот же "Привет, Мир!".
Однако сейчас можно не трогая шаблон, изменить значение переменной $content
1
2
3
4
5

    $content 
'Привет, Солнце!';
и мы получим совершенно другую картину.
Ну а что PHP умеет менять значения переменных, для нас не новость. Но как же можно вывести в поток значение переменной, если файл у нас вовсе не php, а вообще непонятный tpl какой то...

Все не так плохо.
Дело в том, что любые файлы, подключенные к исполняемым (а именно таковым и является главный индекс), воспринимают дескрипторы <?php ?> как специальные теги, и исполняют код, который находится между ними. Причем это совершенно не влияет на tpl в чистом виде и не мешает править верстку. Так как очень похоже на обычный html тег и не воспринимается браузером, если файл открыть напрямую, без сервера.

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

Вот и вся основа принципа. Разметка осталось в tpl файлах, а логическая составляющая - в php.

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