Справочники, инструменты, документация

PHP: Шаблоны для чайников

Существует «проблема», как разделение оформления и содержания, и отделение исполняемого кода от получаемого html. Чего хочется в идеале? Чтобы была html-страница, где все, как у людей: полноценные html-тэги, а в тех местах, где выводится информация, стояли специальные, простые, понятные как для верстальщика, так и для движка/программиста указатели. То есть, что-то вроде такого:
PHP: Шаблоны для чайников
<html>
  <title>[TITLE]</title>
<body>
  [TEXT]
</body>
<html>

Там, где стоит [TITLE], движок выводит заголовок, там, где [TEXT] — соответственно, текст.

Легко и просто. И все счастливы. И это правильно. Но! Тут и начинается маразм. Сначала пишется «движок шаблонов», что-то вроде такого:

$page = str_replace ("[TITLE]", $title, $page);
$page = str_replace ("[TEXT]", $text, $page);

Дальше — больше. Оказывается, что в некоторых случаях этого мало. Нужно больше функций! Например, нам нужно проверять: если [TEXT] пустой, то выводить одно, если не пустой, то выводить другое, то есть, фактически, вводить уже минимальную логику отображения. И мы пишем наророченый язык шаблонов. А теперь потрясем мозгами и хорошенько подумаем, что же у нас получилось. У нас получился фактически язык программирования, написанный на PHP, который можно встраивать в html-код и тем самым менять логику его (html-кода) отображения.

Поздравим друг друга. У нас получился PHP, написанный на PHP. Велосипед для велосипеда. Осмысление этого придет позже.

А теперь возвращаемся к первому примеру. Сравним его с примером ниже и попробуем найти кардинальные различия.

<html>
  <title><?=$title?></title>
<body>
  <?=$text?>
</body>
<html>

Чем он кардинально отличается? Ни чем. Вместе с тем, это — не что иное, как сокращенная запись оператора echo. И никакого интерпретатора шаблонов не нужно.

То есть следующий пример php-страницы выведет все, как надо:

<?
$text = "Это текст";
$title = "Это заголовок";
?>

<html>
  <title><?=$title?></title>
<body>
  <?=$text?>
</body>
<html>

Дальше — больше. Выносим все шаблоны в отдельный файл. И пишем просто:

<?
$text = "Это текст";
$title = "Это заголовок";
include "template.html";
?>

Идея понятна? В процессе исполнения php-скрипта нужные части выкладываем в переменные. Потом — инклюдим html-файл, где в нужных местах проставлено отображение данных.

<html><title><?=strtoupper($title)?></title>
<body>

  <? if ($text==""): ?>
  Текста нет, пусто.
  <? else: ?>
  Введеный текст: <b><?=$text;?></b>
  <? endif; ?>

</body>
</html>