[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите допилить класс
McLotos
В общем очередное изобретение новой версии велосипеда с квадратными колёсами пишу класс, задачи класса:
1. принять имя файла и массив данных
2. считать файл в массив и заменить в нём тэги на значения (если значение передано)
3. сохранить уже измененный файл в каталог cache чтобы в следующий раз не повторять те же действия.
4. вывести результат.
class Template
{
private $file;
private $tags=array();
private $extension='.html';
private $template_dir=DIR_TEMPLATES;
private $skin;
private $cache_dir=DIR_CACHE;
private $filename;
private $block_start = '<!-- BEGIN:';
private $block_end = '<!-- END:';
private $block_tag_end = ' -->';
private $tag_start = '{';
private $tag_end = '}';
private $buf_start; //начало блока сохраняемого в буфер
private $buf_end; //конец блока
private $buffer = array();
//принимаем имя файла шаблона
public function __construct($file)
{$this->skin=$_COOKIE['skin'];
$this->filename=$file;
$this->file=file($this->template_dir.$this->skin.$file.$this->extension);}
//принимаем массив данных и переменную например $tpl -> assign('HEAD',$array);
public function assign($var, $arr) {
foreach($arr as $key => $value) {
if(is_array($value)) {
$arr[$key] = $this->assign($var, $value);
} else {
$arr[$this->tag_start.$var.'.'.$key.$this->tag_end] = $value;
unset($arr[$key]);
}
}

$this->tags=$arr;
}
//принимаем имя блока
public function parse($block){
if(!is_file($this->cache_dir.$this->filename.'.'.$block))
{
for($i=0;$i<count($this->file);$i++){
if(stristr($this->file[$i], $this->block_start.$block.$this->block_tag_end) == TRUE)//если в строке найдено начало блока
{
$start=explode($this->block_start.$block.$this->block_tag_end,$this->file[$i]);//записать всё что после него
$this->buffer[$block][$i]=$start[1];
}
if(stristr($this->file[$i], $this->block_end.$block.$this->block_tag_end) == TRUE)//если в строке найден конец блока
{
$start=explode($this->block_end.$block.$this->block_tag_end,$this->file[$i]);//записать всё что до него
$this->buffer[$block][$i]=$start[0];
}
}

$this -> buf_start=key($this->buffer[$block]);//начало блока
$this -> buf_end=end(array_keys($this->buffer[$block]));//конец блока
$this -> prepare($block);}//отдать дальше на обработку
}

private function prepare($block)
{
for($i=$this->buf_start;$i<=$this->buf_end;$i++)
{$this->buffer[$block][$i]=str_replace(array_keys($this->tags), array_values($this->tags), $this->file[$i]);}//заменить {HEAD.Title} на Название
ksort($this->buffer[$block]); //отсортировать полученный массив
//дальше убираем из файла признаки начала и конца блока

$this->buffer[$block][$this->buf_start]=str_replace($this->block_start.$block.$this->block_tag_end,'',$this->buffer[$block][$this->buf_start]);
$this->buffer[$block][$this->buf_end]=str_replace($this->block_end.$block.$this->block_tag_end,'',$this->buffer[$block][$this->buf_end]);

for($i=$this->buf_start;$i<=$this->buf_end;$i++)
{
$trimmed[$i]=trim($this->buffer[$block][$i]);
if(!empty($trimmed[$i]))
{$pos = strpos($this->buffer[$block][$i],$this->tag_start);
$this->current.=$this->buffer[$block][$i];
}
}

file_put_contents($this->cache_dir.$this->filename.'.'.$block,$this->current,0);//сохраняем полученный массив в файл в папке cache
}
//выводим
public function out($block)
{require $this->cache_dir.$this->filename.'.'.$block;}
}


_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.