Простейший шаблонизатор на PHP
Февраль 17, 2008
Что такое шаблонизатор?
Шаблонизатор — ПО, которое помогает отделить логику приложения от его отображения. Еще вернее — код, который генерирует html-страницу из двух частей:
1. Общий шаблон.
2. Сгенерированный контент.
Для различных задач используются различные типы шаблонизаторов: от простых, не поддерживающих логику, до шаблонизаторов типа Smarty.
Я использую 2 шаблонизатора — один простой, для генерации разовых html-сайтов и один более мощный. Оба они — самописные.
Начнем с простого — возьмем любой html-шаблон и «распотрошим» его.
<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Title of site</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="http://www.site.ru/css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<p id="header">
<a href="{http_folder}" title="Name of your Company">
<img src="images/logo.jpg" alt="Illusty web" />
</a>
</html>
<h1>Your slogan here...</h1>
Вставим нужные фрагменты мета-языка (громкое название обычных меток). Получим что-то вроде
<html>
{doctype}
<html>
<head>
<title>{title}</title>
<meta http-equiv="Content-Type" content="text/html; charset={charset}" />
<link href="{http_root}css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<p id="header">
<a href="{http_folder}" title="{site_name}">
<img src="images/logo.jpg" alt="{site_name}" />
</a>
<h1>{site_slogan}</h1>
</html>
Таким образом мы сделали большой шаг вперед — отделили логику представления от кода. Для окончательного «вывода» в нормальный вид нам нужен скрипт-шаблонизатор. Выглядит он примерно так:
<?php
class html_generator
{public $manual_configs;
public $template;
public $buffer;
function __construct()
{
}
public function load_template($type, $name)
{$this->buffer = file_get_contents('../../sys/templates/'.$type.'/'.$name);
}
public function mount_vars($arr)
{foreach ($arr as $parameter=>$value)
{ $this->buffer = str_replace('{'.$parameter.'}',$value,$this->buffer);
}
}
}
?>
Массив $configs выглядит так:
<?php
### META ###
$configs['site_name'] = 'Имя сайта';
$configs['site_slogan'] = 'Слоган сайта';
$configs['doctype'] = ''; // не будем вписывать doctype;
?>
Вызов шаблонизатора будет выглядеть вот так:
<?php
$generator = new html_generator();
$generator->load_template('pages','index.html');
$generator->mount_vars($configs);
?>
Не стоит забывать, что это только макет — описание принципа построения простейшего шаблонизатора. Как обычно — стоит его докручивать и писать под свои нужды. В первую очередь — для простых проектов, куда не нужны мощности таких монстров как Smarty.
Февраль 23, 2008 в 02:56
Пишите побольше статей для начинающих
Февраль 24, 2008 в 09:13
расскажите о своём мощном шаблонизаторе!
Февраль 24, 2008 в 18:50
Оптимизатор, к сожалению, у меня нет дара объяснять все с нуля. Имхо, написание качественного кода определяет, по дефолту, минимальные знания у пользователей, на которые я и ориентируюсь.
Razor Empire, обязательно выложу в ближайшие дни пример усложненного шаблонизатора. Не скажу, что он на 100% крутой, но сложнее чем этот.
К тому же, приведу ссылки на блог моего знакомого — он написал с десяток шаблонизаторов, которые постоянно развиваются. Он, посмотрев на комментарии, обещал заняться блогом, начав с шаблонизаторов для PHP
Май 9, 2008 в 08:11
пасиб за инфу )