Шаблоны
Разделение оформления и содержания - извечная проблема веб-разработчика. |
Столкнувшись однажды с такой проблемой, сайтостроители начали ломать голову над тем, как сделать так, чтобы информация не привязывалась никоем образом к дизайну и наоборот, чтобы внешний вид всего сайта менялся буквально одним движением руки. Необходимо сказать, что способа идеального разделения оформления и содержания в наши дни пока не найдено. Но все же созданы определенные наработки и технологии, которые позволяют максимально приблизиться к этому идеалу. Прежде всего это технология использования шаблонов.
Что есть шаблон?
Понятие "шаблон" довольно обширное. Но чаще всего под шаблоном понимается некий документ (обычно в формате HTML), содержащий в себе все оформление ресурса, либо только его части, а также специальные метки, которые в процессе генерации страницы заменяются на информационные данные.
Для работы с шаблонами используются специальные веб-приложения (если говорить о веб-разработках), которые могут обладать различными свойствами и функциями. Но чаще всего их роль сводится к тому, чтобы заменять вышеуказанные метки на информационные блоки и соединять полученные части страниц в единое целое.
Наверное, во всех языках вебпрограммирования есть подобные инструменты для работы с шаблонами: в Perl это FastTemplate (который, кстати, существует и для PHP, но его использование не рекомендуется, так как приемлемые для работы версии относятся еще к третьей версии PHP), в отношении PHP - это крупный и многофункциональный Smarty, а также ряд других более мелких "шаблонизаторов".
Smarty.
Smarty - одна из самых крупных разработок подобного рода. Реализован он, как и практически все приложения подобного типа, в виде класса.
Этот "шаблонизатор" имеет огромное количество возможностей: он не только осуществляет замену выделенных участков шаблона указанными данными, но и предоставляет использование внутри шаблона исполняемых участков, функций, конфигурационных файлов и прочее.
Описывать все его возможности и правила использвования не имеет смысла, так как на это потребуется не один и не два урока, к тому же к нему написана довольно хорошая документация, а примеры использования прилагаются к самому Smarty.
Smarty - это настоящий монстр по работе с шаблонами. Но, как понимаете, за столь широкую функциональность приходится платить ресурсами сервера и временем исполнения скрипта на его основе. В некоторых случаях из-за своей громоздкости Smarty кажется неповоротливым. Поэтому для сравнительно небольших проектов использование Smarty - обычно далеко не лучший выбор. В этом случае следует обратить свой взор на более мелкие и менее функциональные, но тем не менее достойные инструменты.
Другие инструменты для работы с шаблонами.
Здесь я хочу обратить ваше внимание на "шаблонизаторы" на основе функции eval(). Эта функция расценивает код, заданный в ее аргументе, как код PHP и, соответственно, исполняет его. Например:
$text = 'Hello, $name $fam!';
$name = "John";
$fam = "Mayers";
eval('echo "' . $text . '";');
Этот примитивный пример работы с мини-шаблоном выведет "Hello, John Mayers!".
Преимущество данного типа инструментов работы с шаблонами связано с тем, что от разработчика заранее не требуется определять текст или другую информацию для меток в шаблоне (в нашем примере таковыми метками служат слова $name и $fam). Также такие "шаблонизаторы" значительно выигрывают по скорости.
Разовьем пример выше и напишем функцию, которая будет извлекать шаблон из файла:
function getTemplate($template, $ext = "htm")
{
$templatefolder = "templates"; // папка для хранения шаблонов
return str_replace("\"","\"", implode("",
file($templatefolder."/".$template.".".$ext)));
}
$name = "John";
$fam = "Mayers";
eval('echo "'.getTemplate('test').'";');
Если в файл test.htm мы поместим текст из переменной $text из примера выше, то результат выполения данного примера будет аналогичен предыдущему.
Для удобства работы с данным типом шаблонов пишутся классы. Одним из самых удачных классов такого рода является класс Евгения Кучерова.
Попробуем с его помощью создать один из вариантов примитивного "движка" для данного раздела "Уроки". При этом будем использовать записи MySQL.
Прежде всего заготовим шаблон. Для этого откроем окно с HTML-кодом данной страницы и заменим номер урока на переменную $row[id], вместо названия "Шаблоны" вставим $row[title], весь текст от первого слова "Разделение" до последнего "встречи!" заменим на $row[body]. Вместо элементов навигации "Назад, на урок 16" и в месте, где должно было бы располагаться "Дальше, на урок 18", соответственно ставим $prev и $next. Сохраним его как page.tpl. Готовый шаблон можно скачать здесь.
Теперь работаем с PHP
Пишем:
require "class.Template.php"; // относительный
путь до класса
$tpl = new Template;
$id = (int)getenv("QUERY_STRING"); // извлекаем номер урока из строки
запроса
mysql_connect("host", "root", "root");
mysql_select_db("myphp");
$query = "SELECT * FROM lessons WHERE id = '$id'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
if ($id > 1) $prev = "<a href='?".($id - 1)."'>Назад, на урок ".($id - 1)."</a>";
$query = "SELECT COUNT(*) FROM lessons";
$result = mysql_query($query);
$max = mysql_result($result, 0);
if ($id < $max) $next = "<a href='?".($id
+ 1)."'>Дальше, на урок ".($id + 1)."</a>";
eval('echo "'.$tpl->get("page").'";');
Это простой пример страницы, имеющей несложную структуру. Но даже на таком примере видно, как шаблоны упрощают создание веб-приложений.
В заключение.
Конечно, здесь мы разобрали лишь крохотную часть этой обширной темы работы с шаблонами и рассмотрели лишь малую долю инструментов работы с шаблонами. Но хотелось бы сказать, что не так уж важно, каким образом вы работаете с шаблонами и какие средства вы используете, намного важнее то, как вы с ними работаете. Научиться грамотной работе с шаблонами не так-то просто, понимание этого приходит только с практикой, и тут я не могу дать определенных советов.
© r-i-p.info« Назад