Forum Webscript.Ru

Программирование => PHP => Тема начата: AliMamed от 23 Июня 2003, 14:38:34

Название: на тему шаблонизаторов
Отправлено: AliMamed от 23 Июня 2003, 14:38:34
давно пользую две функции:


function template($name) {
global $abspath, $templatesdir, $templatescache;
if(isset($templatescache[$name])){
return $templatescache[$name];
}else{
if( file_exists($abspath."/templates/$templatesdir/".$name.".html")){
$gettemplate=r_file($abspath."/templates/$templatesdir/".$name.".html");
$template= $gettemplate;
$template=addslashes($template);
$template=str_replace("\\\\\'","\'",$template);
if($name != "phpinclude") {
$template = "\\n$template\\n";
$template = $template."\\n";
}
$templatescache[$name]=$template;
return $template;
}else{
return "No such template: $name";
}
}
}

function loadtemplates($name){
global $templatescache, $abspath, $templatesdir;

foreach($name as $tname){
if(file_exists($abspath."/templates/$templatesdir/".$tname.".html")){
$gettemplate=r_file($abspath."/templates/$templatesdir/".$tname.".html");
$templatescache[$tname]=$gettemplate;
$templatescache[$tname]=addslashes($templatescache[$tname]);
$templatescache[$tname]=str_replace("\\\\\'","\'",$templatescache[$tname]);
if($tname != "phpinclude") {
$templatescache[$tname] = "\\n$templatescache[$tname]\\n";
$templatescache[$tname] = $templatescache[$tname]."\\n";
}
}
}
return $templatescache;


}


function r_file($fname){
$fp = fopen ($fname, "r");
$content = fread ($fp, filesize ($fname));
fclose($fp);
return $content;
}
Название: на тему шаблонизаторов
Отправлено: AliMamed от 23 Июня 2003, 14:48:11
используются они следующим образом.
файлы .html располагаются по адресу $abspath/templates/$templatesdir
$templatesdir - нужен мне, чтобы в зависимости от пользователя иметь возможность менять набор шаблонов.

файлы .html выглядят примерно так:



$title

$body




перед началом работы скрипта загружаются наиболее часто используемые:
loadtemplates( array(\'main\',\'category\', \'header\', \'footer\') );

обработанный шаблоном вывод я сохраняю в переменные

$title="title";
$body="body";
eval("\\$out .= \\"".template("main")."\\";");


а когда мне  надо - вывожу
echo $out;

по-моему просто и вполне удобно.
Название: на тему шаблонизаторов
Отправлено: Макс от 23 Июня 2003, 16:04:22
я отказался от такого кода (насколько я помню на этом основан шаблонизатор Britva-ы) по следующим причинам:
1. Считаю что пространство переменных скрипта не должно пересекаться с пространством меток шаблонизатора (то есть нужно прямо регистрировать те переменные, которые ты хочешь использовать в скрипте)
2. Неудобно работать с блоками (для создания блока в твоем млучае нужно 2 шаблона, а в шаблонизаторах с поддержкой блоков - один шаблон)
3. Нечитабельный код получается

Все ИМХО
Название: на тему шаблонизаторов
Отправлено: FreeSpace от 23 Июня 2003, 17:36:05
AliMamed
Сам пользуюсь подобным шаблонизатором, но меня стали очень раздражать те самые "отдельные шаблоны для каждой строчки таблицы".
Попробую найти для себя шаблонизатор с хоть какой-то внутренней логикой...