PHPFAQ  
Начинающим   Технологии   MySQL   Ошибки   Ссылки   Юмор   О сайте   Форум   PHP Club  

Шаблоны

Теория
Практика
Комментарии

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

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

Фантазий главных две:
1. Шаблоны нужны "дизайнеру", чтобы он мог их править, не разбираясь в PHP.
2. Следовательно, шаблоны служат для отделения PHP от HTML.

Давайте попробуем задуматься над первым утверждением. Кто такой дизайнер? Это человек, который работает в фотошопе. HTML он чаще всего не знает вообще. А над шаблоном работает либо специальный верстальщик или - чаще всего... сам программист! Смешно, правда?
Теперь следствие, про отделение PHP от HTML. Отлично. Перед нами стоит святая цель отделить. Поэтому мы придумываем Смарти и пишем:
{foreach key=cid item=con from=$contacts}
    <a href="contact.php?contact_id={$cid}">{$con.name} - {$con.nick}</a><br />
{/foreach}

Ещё смешнее.
"Дизайнер", ради которого все затевалось, падает в обморок от счастья.

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

За время своей деятельности в качестве веб-программиста я сформулировал для себя три причины, по которым нужны шаблоны лично мне. По сути, их две. А сводятся, в конечном счете, к одной:

Один код - несколько представлений.

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

Часто одну и ту же информацию надо показывать в нескольких видах. К примеру - обычная страница и страница для печати. Информация та же самая, код её получения один и тот же, а код вывода - разный. Столкнувшись с такой ситуацией, очень быстро разделишь свой код на две части, одна из которых отвечает за вывод, а вторая - не отвечает.

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

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

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

сам файл links.php. НИЧЕГО не выводит. Только готовит данные и после этого вызывает шаблон.
<?
//инклюдим настройки.
include 'settings.php';

//получаем данные из базы, определяем переменные 
$pagetitle "Ссылки";
$DATA=dbgetarr("SELECT * FROM links");

//обрабатываем ошибку
if ($DATA === FALSEerror500();

//задаем шаблон страницы и вызываем общий шаблон сайта
$tpl "tpl_links.php";
include 
"tpl_main.php";
?>


общий шаблон (tpl_main.php ):

<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>My site. <?=$pagetitle?></title>
 </head>
 <body>
  <div id="page">
<? include $tpl ?>
  </div>
 </body>
</html>


в нужном месте в него включается шaблон нашей страницы (tpl_links.php):


<h2><?=$pagetitle?></h2>
<ul>
<? foreach($DATA as $row): ?>
  <li><a href="<?=$row['link']?>" target="_blank"><?=$row['name']?></a></li>
<? endforeach ?>
<ul>




Другие материалы раздела:
Сессии. Подробное описание работы и объяснение механизма.
Регулярные выражения.
Mail injection. Работа с e-mail средствами PHP.
Определение IP адреса
Безопасность PHP скриптов


Комментарии

Саша 08.12.11 18:10
Мне понравилась эта сатья. Довольно таки просто сказано о том, о чем сложно говорить и не надо
Андрей 19.05.11 16:03
ьторь
Скад 08.01.11 20:06
А не проще ли задвать шаблоны с помощью:
file_get_contents();
и в файле заменять с помощью:
str_replace();


Т.е. у нас есть html файл с:
Привет, %USER%!

И php:
$tpl = file_get_contents('html.html');
/// скрипт
$tpl = str_replace('%USER%', $user, $tpl);
echo $tpl;
Ответ: Все эти фантазии очень быстро разбиваются о проблемы реальной жазни. К примеру, иногда нам надо вывести не просто имя пользователя, а список новостей...
Tigran Azatyan 04.01.11 22:51
Я думаю любой сегодняшний сайт имеет две части для сохранения данных, это - база данных(для контента) и файлы, которые две вида - программа и дизайн. Нужна чтобы программа, написанная мною работала "под" разных дизайнов, то есть шаблонов. Вот поэтому и нужен шаблон!!! Например я написал КМС но внедрил вес шаблон по кусочками в ПХП код. И кто будет верстать под мой КМС Сайт? никто.
Сергей 26.07.10 21:28
как-то странно читать такие рассуждения в 2010 году. По-хорошему шаблоны не нужны - лучше использовать управляемую трансформацию (xsl). Конечно стоит допускать и наличие активных и нативных шаблонов. Все это прекрасно реализуемо в рамках стандарта. И дизайнеру и верстальщику понятно. Главное что бы было понятно менеджеру проекта - что в конце должно получиться. Вот вопрос который меня мучит: а почему все повторяют за Мартином Фаулером что MVC это хорошо? А как же web 2.0? Что хорошо для данных со статической структурой - смерть для данных сос структурой динамической.
Ответ: Разницы нет никакой. XSL - такой же шаблонизатор, как и другие: программа, которая на основании исходных данных (XML) формирует HTML. От программы на PHP отличается только синтаксисом и форматом исходных данных.
С вебдванолем то же самое. Серверу нет никакой разницы, кто у него запрашивает данные - браузер или жабаскрипт. View просто натравит json_encode на данные вместо шаблонизатора.
Вся разница только в красивости слов "управляемая трансформация" и "вебдваноль". Но этот сайт не о литературе, а о технологии.
Александр 27.02.10 20:51
Вопрос нужности или ненужности шаблонов здесь встал только потому, что в качестве языка используется php (при чем php4). Ведь php по сути является шаблонизвтором, а не полноценным языкрм. В 5-м php (как и в perl, python и т.д.) идеология программирования совершенно другая, принцип MVC используется повсюду, поэтому вопрос использования или неиспользования шаблонов вообще не стоит — шаблоны являются частью программной архитектуры, которая доказала свое превосходство.
СВЕТЛАНА 07.01.10 20:38
Когда я ввожу свой e-mail мне отвечает что адрес введен неверно.В чем может быть проблема.
ГПК 02.10.09 16:47
Ваши слова о том, что вместо верстальщика зачастую выступает программист, доказывает то, как выглядят шаблоны популярного блог-кмс движка wordpress - там голый php-код.

Почему бы не использовать шаблоны с целью избежания внесения глюков в код сайта, захотев однажды изменить его дизайн?
Ответ: В шаблонах вордпресс не голый РНР код, а РНР код, который взаимодействует с HTML.
Для сравнения рекомендую посмотреть движок XSLT
Глюки можно внести в любом движке.
Гость 23.02.09 15:21
Главное цель шаблонизации - повторное использование кода, это основная методология, которая применяется для сокращения трудозатрат при разработке сложных систем.
Если есть сайт с 200 страницами, то глупо писать под каждую страницу свой html-дизайн, еще сложнее потом делать редизайн (менять все 200 страниц) - на ХТМЛ эта проблема частично могла быть решена использованием фреймов (например два фрейма - header.html и footer.html)
На PHP это решаеться так называемым использованием "шаблонов".
Две, приведенные в статье, фантазии, на самом деле являются проблемой:
Выносить HTML-код из PHP, для удобной работы не только дизайнера, но и программиста.

так называемые "высшие соображения" естественно глупо использовать для личной странички, сайта-визитки.. Но обязательно должны учитываться при разработке сложных(крупных) проектов.
Ответ: Спасибо за отличную коллекцию заблуждений!
- Никакие, разумеется, не "высшие соображения" приводят нас к использованию шаблонов, а технологическая необходимость. И никакой разницы нет, большой ты делаешь проект, или маленький.
- "удобство программиста" - понятие субъективное. Шаблоны - объективное. Разговаривать имеет смысл только с тем, кто может объяснить - чем именно удобно.
- главное заблуждение чайников: они думают, что шаблон - это "дизайн", рыба сайта. Хидер и футер, ага. А содержимое выводится, ничтоже сумняшеся, через echo. Объяснить, что главный шаблон - это шаблон страницы, а не всего сайта - наша задача.

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

© phpfaq.ru, 2012
Rambler's Top100 0.029 sec.