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; } } ?>