| Николай | Дата: Понедельник, 11.08.2008, 14:05 | Сообщение # 1 |
Модостроитель
Группа: Пользователи
Сообщений: 165
Статус: Offline
| И так учился я тоже по этой статье и у меня вышло а раз у меня вышло то у вас 110% выйдет! Статья взята с php.su (вроде от сюда =) ) Code <?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;
}
} ?> После вывода шаблона, все переменные в нём уничтожились, их надо задавать заново. А теперь весь код, чтобы небыло проблем (без комментов): Code <?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. Его содержимое: Code <!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'); # включили класс # Зададим переменные # Code $bgcolor = '#CCFFCC';
$text = 'Тест класса!';
$title = 'ТЕСТ!';
$tpl = new template('./data','.tpl'); # создали объект, задали каталог и расширение
$tpl -> load('body'); # зашрузили шаблон
$tpl -> vars('body',array('text','title','bgcolor')); # указали какие переменные преобразовать, они должны быть заданы зарание
echo $tpl -> out('body'); # вывели шаблон Так ну вроде всё!!! Пример очень хороший и ясен! Учимся ;)
|
| |
|
|
| zeloras | Дата: Вторник, 12.08.2008, 07:30 | Сообщение # 2 |
Гигабайт
Группа: Пользователи
Сообщений: 153
Статус: Offline
| МММ...спасибо...думаю если это все пойму то в обновлении кмс это прикручу =)
|
| |
|
|
| oleg | Дата: Воскресенье, 17.08.2008, 15:45 | Сообщение # 3 |
|
Мегабайт
Группа: Модераторы
Сообщений: 76
Статус: Offline
| Есть хороший готовый класс с примерами FastTemplate
Desktop: Linux dektop 2.6.24-1-686 #1 SMP Thu May 8 02:16:39 UTC 2008 i686 GNU/Linux Server: Linux home-server 2.6.24-1-486 #1 Thu May 8 01:29:10 UTC 2008 i686 GNU/Linux
|
| |
|
|