Детские воспоминания о летнем отдыхе на море, воскрешют перед мысленным взором живописное полотно, изображающее тщедушную лошадёнку размером со здоровенную псину, на которую взгромоздился лихой горец в папахе и чёрном цее с газырями — какой–нибудь весёлый дядька суёт свою розовую от южного солнца и опухшую от разливного вина морду в дырку между папахой и воротником цея, суетливый фотограф клацает затвором и получается фотография: будто бы скачет штымп верхом, почему–то развернувшись лицом и корпусом к объективу, унося в неведомую даль толстомясую тётку с густыми сросшимися бровями и равнодушным взглядом, сидящую на той же конесобаке. Тётка должна бы олицетворять украденную невесту, но даже неискушённые отроческине представления о взаимоотношениях полов вызывали смутные сомнения: неужели этот мужик не мог найти себе чувиху получше?
Позже, изобретательные уличные фотографы перешли на «дурилки картонные», и можно было в центре любого мегаполиса сфотографироваться с фанерными М.Горбачёвым, Р.Рейганом или Усамой бен–Ладеном (не к ночи будь помянут!)
Цифровая эра внесла новые подходы и техники в арсенал фотографов–приколистов: теперь даже не требуется, высунув от старания кончик языка, выпиливать из фанерки какую–нибудь знаменитость или изощряться, малюя на холстине вокруг дырки для лица клиента заведомо малохудожественную композицию. Теперь достаточно запустить графический редактор, вырезать из цифрового изображения физиономию заказчика и вставить его в цифровой же трафарет (например, такой, как изображён на фото вверху).
Вообще говоря, ирония по поводу шаблонов уместна только в контексте неудачных реализаций — в большинстве остальных случаях трафареты весьма и весьма полезны. Гордо выпятив грудь от переполняющего чувства собственной прозорливости и догадливости, должен ответственно заявить, что много лет тому назад самостоятельно пришёл к идее разделять данные (программно создаваемый контент сайта) и представление (оформление сайта, его дизайн). Тогда появились первые версии систем управления контентом, но мне совершенно не хотелось тратить время на вникание в Wordpress или Joomla! — душа просила чего—нибудь попроще.
Я нашёл невероятно простое и столь же невероятно эффективное средство — php–класс XTemplate: нет ничего лишнего, но есть всё, что необходимо.
Вдохновлённый классами шаблонов FastTemplate и QuickTemplate, венгерский программер Варнава Дебрецени (Barnabas Debreczeni) разработал в 2000 году свой движок, который оказался существенно быстрее своих предшественников, хотя и основывался на идентичных синтаксисе и идеологии (заметьте, не развил существовавшие, а наваял «с нуля»). Энтузиазма у него хватило только на год с небольшим, и он забросил этот проект. «Знамя подхватил» британец Джереми Коутс (Jeremy Coates), развивал этот движок с 2002 по 2007 год (добавил некоторые удобные возможности, «перековал» под PHP5) и довёл его до версии 0.4.0, которая уже почти восемь лет радует своей незатейливостью и эффективностью.
Вот как выглядит использование класса со стороны php–скрипта:
require "xtpl.class.php";
$xtpl=new XTemplate ("page.xtpl");
$xtpl->assign("VARIABLE_1", "Тест");
$varstr = "Привет, мир!";
$xtpl->assign("VARIABLE_2", $varstr);
$row=array(
ID=>"38",
NAME=>"cranx",
AGE=>"20"
);
$xtpl->assign("VARIABLE_3", $row);
$xtpl->parse("main.block");
$xtpl->parse("main");
$xtpl->out("main");
А так — со стороны шаблона (файл page.xtpl):
<!-- BEGIN: main -->
<!DOCTYPE html>
<head>
<title>Заголовок страницы</title>
</head>
<body>
<p>Это пример простейшей подстановки: жирным шрифтом будет выведено "Привет, мир":
<b>{VARIABLE_1}</b></p>
<p>Или так: <b>{VARIABLE_2}</b></p>
<!-- BEGIN: block#Так можно добавлять в блоки комментарии -->
<table border="1">
<tr>
<td>id</td>
<td>{VARIABLE_3.ID}</td>
</tr>
<tr>
<td>name</td>
<td>{VARIABLE_3.NAME#Можно комментировать и тэги}</td>
</tr>
<tr>
<td>age</td>
<td>{VARIABLE_3.AGE}</td>
</tr>
</table>
<!-- END: block -->
<p>Глобальные переменные можно выводить без предварительного присвоения:<br />
$_SERVER['HTTP_HOST']={PHP._SERVER.HTTP_HOST}<br />
$_SERVER['PHP_SELF']={PHP._SERVER.PHP_SELF}<br />
$_SERVER['HTTP_USER_AGENT']={PHP._SERVER.HTTP_USER_AGENT}<br />
и т.п.<br />
(но эти переменные должны быть инициализированы в скрипте до создания объекта $xtpl)</p>
</body>
</html>
<!-- END: main -->
В общем, я процитировал только первый из восьми примеров использования шаблона, и эти восемь примеров, собственно, составляют своеобразную документацию класса (отдельного руководства нет).
Список функциональности пакета содержит также возможность включения других файлов–шаблонов, например:
{FILE "another.template.xtpl"}
{FILE {VAR_FILENAME}}
Имеется также набор приёмов и функций для обработки пустых значений переменных. Впрочем, это довольно экзотическая тема (мне не приходилось на практике использовать эти возможности, хотя они не отличается сложностью).
Комментариев нет:
Отправить комментарий