Пишем класс Template
Автор: Андрошук Александр
Класс шаблонов это незаменимая часть в форуме, гостевой,
чате и т.д. Это класс прост, причём очень прост. Объясню основные функции:
загрузка шаблона, обработка в нём переменных и выход шаблона. Давайте
рассмотрим подробнее:
<?php
class template # создали класс
{ # зададим переменные
var $data = array(); #
переменная для шаблонов
var $root = '.'; # каталог
для шаблонов
var $ext = '.tpl'; #
расширение для шаблонов
var $da_vr = array(); #
переменная для преобразованых шаблонов
// Класс создан, далее
формируем функции:
function
template($dir,$ext)
{
if(is_dir($dir)){$this
-> root = $dir;}
else{die('Ошибка!
<b>'.$dir.'</b> - это не директория!');}
$this -> ext = $ext;
}
// Эта функция выполниется сразу после создания класса,
поэтому при создании надо
// указывать директорию и расширения шаблонов (см.
ниже). Далее надо загрузить шаблон:
function load($name)
{
$nn = $name;
$dir = $this -> root;
$ext = $this -> ext;
$name =
$dir.'/'.$name.$ext;
if(!is_file($name))
{die('Ошибка <b>'.$name.'</b> - это не файл!');}
$fp = fopen($name,'r');
$data =
fread($fp,filesize($name));
fclose($fp);
$this -> data[$nn] =
$data;
$this -> da_vr[$nm] =
$data;
}
// В этой функции мы считали шаблон через fread и запихнули
его в две переменных:
// da_vr и data. При загрузке шаблона надо указывать
имя шаблона без расширения
// (см.ниже). Далее преобразовываем переменные:
function vars($nm,$vars =
array())
{
$data = $this ->
data[$nm];
while(list($id,$var) =
each($vars))
{
global $$vars[$id];
$data=str_replace('{'.$vars[$id].'}',$$vars[$id],$data);
}
$this -> da_vr[$nm] =
$data;
}
// Тут мы преобразовали
переменные и загнали в переменную da_vr. И осталось вывести
// шаблон:
function out($name)
{
$ret = $this ->
da_vr[$name];
$this -> da_vr[$name] =
$this -> data[$name];
return $ret;
}
}
После вывода шаблона, все переменные в нём уничтожились,
их надо задавать заново. А теперь весь код, чтобы небыло проблем (без комментов):
<?php
class template # создали
класс
{ # зададим переменные
var $data = array(); #
переменная для шаблонов
var $root = '.'; # каталог
для шаблонов
var $ext = '.tpl'; #
расширение для шаблонов
var $da_vr = array(); #
переменная для преобразованых шаблонов
function
template($dir,$ext)
{
if(is_dir($dir)){$this
-> root = $dir;}
else{die('Ошибка! '.$dir.'
- это не директория!');}
$this -> ext = $ext;
}
function load($name)
{
$nn = $name;
$dir = $this -> root;
$ext = $this -> ext;
$name =
$dir.'/'.$name.$ext;
if(!is_file($name))
{die('Ошибка <b>'.$name.'</b> - это не файл!');}
$fp = fopen($name,'r');
$data =
fread($fp,filesize($name));
fclose($fp);
$this -> data[$nn] =
$data;
$this -> da_vr[$nm] =
$data;
}
function vars($nm,$vars =
array())
{
$data = $this ->
data[$nm];
while(list($id,$var) =
each($vars))
{
global $$vars[$id];
$data=str_replace('{'.$vars[$id].'}',$$vars[$id],$data);
}
$this -> da_vr[$nm] =
$data;
}
function out($name)
{
$ret = $this ->
da_vr[$name];
$this -> da_vr[$name] =
$this -> data[$name];
return $ret;
}
}
?>
Обясню как работать с классом. Допустим у нас есть шаблон
body.tpl в директории data. Его содержимое:
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> {title}
</title>
</head>
<body
bgcolor={bgcolor}>
{text}
</body>
</html>
Работа с классом:
include('template.php'); #
включили класс
# Зададим переменные #
$bgcolor = '#CCFFCC';
$text = 'Тест класса!';
$title = 'ТЕСТ!';
$tpl = new
template('./data','.tpl'); # создали объект, задали каталог и расширение
$tpl -> load('body'); #
зашрузили шаблон
$tpl ->
vars('body',array('text','title','bgcolor')); # указали какие переменные
преобразовать, они должны быть заданы зарание
echo $tpl ->
out('body'); # вывели шаблон
Всё, я прощаюсь с вами.
Tiger (c) 2004 специально для Web-support.ru.