Шаблоны в 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% нужд простых смертных. Если вам что-то не нравится — идите, побрейтесь бритвой Оккама.

Комментарии

Оставьте свой комментарий
Вадим И.

всем, привет
автору, всех благ!
я ничего в ваших спорах не разберу
дядя, автор, а как это ещё в файл закинуть и увеличивать имя файла всегда?)
/р.s. на самом деле хотется сразу урок от сенсея

R
ryjiez

Спасибо! Действительно коротко и ясно. Блин шарил интернет читал книжку принципы их понял а вот чтобы что-нить сделать... Спасибо автору за доступность!

А
Алекс

Мда уж....
зачем тогда вообще пхп ? возьми все напиши 01010101010101010101010101
странный ты чувак....
кстати, пользуйся досом, зачем те винда...зачем изобретать велосипед.

О
Ольга

А у меня так не работает

<title>{TITLE}</title>
Зато работает так, как показано

<title><?=$title?></title>
*ПХП на сервере есть

О
Ольга

Отличная статья! Просто и понятно с первого раза 🙂 Хотелось бы увидеть продолжение, например, как работать с остальными модулями (вставка картинки, менюшки и прочее). В интернете - в основном - многотомовые нотации, которые для построения странички и не нужны. А так "по-простому" редко кто может объяснить.

M
maugli

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

K
kostya

в шаблоне вывод текста лучше делать так:

<?php echo $varname; ?>

I
Ivan

А что делать с кавычками в контенте?

R
RUSH

Бред... Лучше всего - <title>{TITLE}</title>
Вот так вот...
И шаблон не одним файлом, а несколькими, шапка, футер, блоки, контент.

G
Guest

Аффтор мега, ясень пень, что покрывает, но ток не суперпроекты, а так хом паги, имхо, еси верстака к написанному выше + научить добывать фришные скрипты, то он поймет что там где в титле $name будет искать нэйм, найдет, подставит дело в шляпе. А программистам что тогда делать? Реально годы трудится над созданием каконить легкого и быстрого движка и в конце концов получить отворот поворот потому как клиент скажет что наш верстальщик и без вас все сделал нихуже. Вот поэтому, имхо, не надо себе облегчать труд, и так пресс написано, сказано, не хочет верстак идти в магазин за книжкой по пшп или искать ресурсы (как тут), не хочет ночи спать, глаза терять над тем чтобы понять как логика выстраивается, так пусть сидит и кодит, горе кодер гипертекста. И важничает тоже пусть. А тот кто не спит (спал), на учебу забивал и в Новый ГОД сидел и кодил сам поймет что нужно сделать. P.s. ..."как всеобъемлюще и непонятно может выглядить язык PHP для среднестатистического дизайнера, и что это можно замаскировать при помощи более простого синтаксиса шаблонов..." ( &copy; Руководство по Smarty. Предисловие. ).
P.s.s выше сказанное мое мнение в ответ автору, хотя если верстак настолько ленив и глуп, либо свыше человеку не дано понять логику, применять думаю задача из тривиальных.
P.s.s.s. Если верстак реально пишет на php, хто он?

Загрузить еще