url = $url;
$this->path = $path;
}
/*****************************
Функция чтения файла шаблона
******************************/
function load($fname)
{
if (file_exists($this->path.$fname)) //Если файла существует, читаем его
{
$tpl_file = @fopen($this->path.$fname, "r");
if ($tpl_file)
$this->tpl_text = fread($tpl_file, filesize($this->path.$fname));
}
else
print "ОШИБКА: не найден файл главного шаблона.";
}
/**************************************
Функция установки значений переменных
***************************************/
function set_var($f_var, $n_var)
{
//Обрабатываем переменные %VAR:$f_var% и заменяем их на нужный текст из переменной $n_var
$this->tpl_text = str_replace("%VAR:".$f_var."%", $n_var, $this->tpl_text);
}
/**************************************
Функция установки значений переменных
***************************************/
function set_pvar($p_var, $n_var)
{
$this->pvar_array[$p_var] = $n_var;
}
/***********************************************
Функция установки значений переменных в циклах
************************************************/
function set_rvar($r_var, $n_var)
{
if (in_array($r_var, $this->repeat_var)) //Если переменная обрабатывается повтороно, то считаем что это за новый шаг цикла
{
$this->repeat_var = array(); //Очищаем массив
$this->current_text[$this->repeat_name] .= str_replace("%RVAR:".$r_var."%", $n_var, $this->repeat_text); //Зписываем новую строку в массив результирующих строк
$this->repeat_var[] = $r_var; //Запоминаем переменную
}
else //Если переменная новая, производим замену в результирующей строке
{
$this->current_text[$this->repeat_name] = str_replace("%RVAR:".$r_var."%", $n_var, $this->current_text[$this->repeat_name]); //Зписываем новую переменную в массив результирующих строк
$this->repeat_var[] = $r_var; //Запоминаем переменную
}
}
/*********************************
Функция установки текущего цикла
**********************************/
function set_repeat($rep_name)
{
preg_match("/%REPEAT:".$rep_name."%(.*)%END%/Usi", $this->tpl_text, $out); //Выдираем цикл с заданным именем из кода шаблона
$this->repeat_text = $out[1]; //Запоминаем текст цикла
$this->repeat_name = $rep_name; //Запоминаем имя текущего цикла
}
/**************************************
Функция обработки и вывода результата
***************************************/
function parse()
{
//Заменяем все вхождения %INC:ИмяФайла% на текст из реальных файлов
preg_match_all("/%INC:(.*)%/Usi", $this->tpl_text, $out);
for ($i=0; $ipath.$out[1][$i]))
{
$f_inc = @fopen($this->url.$out[1][$i], "r");
if ($f_inc)
{
$inc_text = fread($f_inc, 100000);
$this->tpl_text = str_replace("%INC:".$out[1][$i]."%", $inc_text, $this->tpl_text);
}
}
else
$this->tpl_text = str_replace("%INC:".$out[1][$i]."%", "ОШИБКА: Файл ".$out[1][$i]." не найден!", $this->tpl_text);
}
//Заменяем все циклы на строки из результирующего массива
foreach ($this->pvar_array as $key => $value)
$this->tpl_text = preg_replace("/%VAR:".$key."%/Usi", $value, $this->tpl_text);
//Заменяем все циклы на строки из результирующего массива
foreach ($this->current_text as $key => $value)
$this->tpl_text = preg_replace("/%REPEAT:".$key."%(.*)%END%/Usi", $value, $this->tpl_text);
//Выводим конечный результат
print $this->tpl_text;
}
}
?>