Пишем класс Template

Автор: content Воскресенье, Апрель 8th, 2012 Нет комментариев

Рубрика: Язык PHP

Класс шаблонов это незаменимая часть в форуме, гостевой, чате и т.д. Это класс прост, причём очень прост. Объясню основные функции: загрузка шаблона, обработка в нём переменных и выход шаблона. Давайте рассмотрим подробнее:

<?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’); # вывели шаблон

Всё, я прощаюсь с вами.

Автор: Андрошук Александр

Источник: http://www.php.su/articles/?cat=examples&page=006

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты