Шаблоны в PHP для чайников
Автор: Дмитрий Смирнов
И снова здравствуйте. Давно я как-то не писал ничего
путного, даже как-то самому неприятно. Так что сразу к теме. Давайте,
товарищи умники, забудем такие слова, как XML, XHTML и прочий X…, и
поговорим о вещах, приближенных к реальности.
Сужествует такая «проблема», как разделение оформления и
содержания, и отделение исполняемого кода от получаемого html’я. Мухи —
там, котлеты — тут. Грубо говоря, программист программирует, дизайнер
дизайнит и никто никому не мешает жить. А если надо поменять что-то в
оформлении, то сделать это сможет один оформитель, сиречь дизайнер,
самостоятельно.
PHP хорош (хорош, собака!) тем, что позволяет встраивать
исполняемые конструкции прямо в html. Плюсы понятны. Минусы, например:
довольно сложно менять оформление в таком коде: echo
"<b>".$boldtext."</b>"; Глупый дизайнер испугается и убежит, а
умный программист скажет «я вам не глупый дизайнер, чтобы ерундой
заниматься».
Чего хочется в идеале? Чтобы была html-страница, где все,
как у людей: здоровые, полноценные html-тэги, а в тех местах, где
выводится информация, стояли специальные, простые, понятные как для
верстальщика, так и для движка/программиста указатели.
То есть, что-то вроде такого:
<html>
<title>[TITLE]</title>
<body>
[TEXT]
</body>
<html>
Там, где стоит [TITLE], движок выводит заголовок, там,
где [TEXT] — соответственно, текст.
Легко и просто. И все счастливы. И это правильно. Но! Тут
и начинается маразм. Сначала пишется «движок шаблонов», что-то (я утрирую)
вроде такого:
$page = str_replace
("[TITLE]", $title, $page);
$page = str_replace
("[TEXT]", $text, $page);
Дальше — больше. Оказывается, что в некоторых случаях
этого мало. Нужно больше функций! Например, нам нужно проверять: если
[TEXT] пустой, то выводить одно, если не пустой, то выводить другое, то
есть, фактически, вводить уже минимальную логику отображения. И мы пишем
супер-пупер наророченый язык шаблонов. На PHP. И называем его SMARTASS
(Super Mega And Revolutionary Totally Automatized Shablon System).
До такой степени навороченный, что дизайнер, ради
которого все затевалось, — чтобы тот смог сам менять оформления, уже не
может сменить оформление пока специально не выучит язык шаблонов.
А теперь потрясем мозгами и хорошенько подумаем, что же у
нас получилось. У нас получился фактически язык программирования,
написанный на PHP, который можно встраивать в html-код и тем самым менять
логику его (html-кода) отображения.
Поздравим друг друга. У нас получился PHP, написанный на
PHP. Велосипед для велосипеда. Осмысление этого придет позже.
А теперь возвращаемся к первому примеру.
<html>
<title>[TITLE]</title>
<body>
[TEXT]
</body>
<html>
Помните? Сравним его со следующим примером и попробуем
найти кардинальные различия.
<html>
<title><?=$title?></title>
<body>
<?=$text?>
</body>
<html>
Чем он кардинально отличается? Ни чем. Глупый верстальщик
поймет, если ему сказать «нужно вставить переменную text — пиши
<?=$text?>». Вместе с тем, это — не что иное, как сокращенная запись
оператора echo. И никакого интерпретатора шаблонов не нужно.
То есть следующий пример php-страницы выведет все, как
надо:
<?php
$text = "Это текст";
$title = "Это заголовок";
?>
<html>
<title><?=$title?></title>
<body>
<?=$text?>
</body>
<html>
Дальше — больше. Выносим все шаблоны в отдельный файл. И
пишем просто:
<?php
$text = "Это текст";
$title = "Это заголовок";
include "template.html";
?>
Идея понятна? В процессе исполнения php-скрипта нужные
части выкладываем в переменные. Потом — инклюдим html-файл, где в нужных
местах проставлено .
Верстальщику же, чтобы научиться работать с такими
«шаблонами», нужно всего 3–5 минут для ознакомления с основами синтаксиса
PHP. И не надо учить какой-то навороченный язык шаблонов, который ему
больше никогда не пригодится.
Ну что плохого в таком вот шаблоне страницы?
<html><title><?=strtoupper($title)?></title>
<body>
<? if ($text==""): ?>
Текста нет, пусто.
<? else: ?>
Введеный текст:
<b><?=$text;?></b>
<? endif; ?>
</body>
</html>
Плюсы — налицо. Для его вывода не нужно никаких
дополнительных вещей. Кроме PHP.
Вот, собственно, и все.
PS. Уважаемые умники. Данный способ «шаблонизации»
действительно покрывает 95% нужд простых смертных. Если вам что-то не
нравится — идите, побрейтесь бритвой Оккама.