Привет. Написал мини шаблонизатор.
class template {
function optimize($buffer) {
$search = array('/\>[^\S ]+/s', '/[^\S ]+\</s', '/(\s)+/s');
$replace = array('>', '<', '\\1');
$buffer = preg_replace($search, $replace, $buffer);
return $buffer;
}
private function compile($str) {
$include = DI . 'app/template/include/';
$pattern = "|\@@([^)]+?)\@@|";
preg_match_all($pattern, $str, $arr);
foreach ($arr[1] as $row) {
$str = str_replace("@@" . $row . "@@", "", $str);
}
$pattern = "|\[{([^)]+?)\}]|";
preg_match_all($pattern, $str, $arrr);
foreach ($arrr[1] as $row) {
$str = str_replace("[{" . $row . "}]", '<?=$array["'.$row.'"]?>', $str);
}
$head = self::optimize(file_get_contents($include . $arr[1][0] . '.html'));
$body = self::optimize($str);
$foot = self::optimize(file_get_contents($include . $arr[1][1] . '.html'));
return $head . $body . $foot;
}
public function load($template, $array) {
$template_file = DI . TEMPLATE_DIR . $template;
$NN = hash('adler32', $template);
$file = DI . TEMPLATE_CACHE_DIR . $NN . '.cache';
if (file_exists($template_file)) {
if (file_exists($file)) {
include $file;
} else {
$text = self::compile(file_get_contents($template_file));
$fp = fopen($file, "w");
fwrite($fp, $text);
fclose($fp);
include $file;
}
} else {
echo'404';
}
}
}
Класс очень прост (предназначен для верстальщика, а то она так тупит что неможет запомнить как подключать файлы и выводить данные из масива )
Функция compile регуляркой заменяет инклайд и масивы. Потом подгружает нужные куски и прогоняет их через функцию optimize (она удаляет переносы строки и пробелы)
Функция load проверяет есть ли такая вьюшка если нету то вызовет 404 если есть то проверим есть ли кеш. Если кеш есть то его инклайдим, если нет то создаём и инклайдим.
Проблема в том что хочу прикрутить мемкеш. Если записать в мемкеш то как потом заинклайдить данные из него?
Кроме инклайда выхода невижу так как eval не хочеть роботать с кучей хтмл и вызовом php посредством <?= ?>
Зарание спасибо за помощь