Шаблонизация сайта (есть вопросы по обработке/парсингу шаблона)

mrfuse

Новичок
Шаблонизация сайта (есть вопросы по обработке/парсингу шаблона)

Добрый вечер господа =)

Шаблоны сайта хранятся в mysql, в таблицу записываю HTML + PHP в нем...
вот в таком формате:

PHP:
{header()}
... some content ...
{footer()}
вопрос:

как вывести этот нтмл + выполнить РНР ?

дело в том что рнр должен быть именно в {} а не <?= ?> и тп.
пробовал уже и тупо print, и eval =\ пока не получается =\
 

rotoZOOM

ACM maniac
А может попробовать шаблоны хранить тупо в файлах, и парсить их тупо шаблонизатором, который понимает, что такое: {header()} ?
 

mrfuse

Новичок
вообще-то, можно даже и вот так вот:
Код:
<?=header()?>
... content ...
<?=footer()?>
но всеравно

Код:
eval($res->content);
дает: Parse error: syntax error, unexpected '<' in index.php(18) : eval()'d code on line 1

-~{}~ 26.09.08 06:03:

>А может попробовать шаблоны хранить тупо в файлах, и парсить их тупо шаблонизатором, который понимает, что такое: {header()} ?

хм...
просто у меня в mysql хранятся title и meta теги страниц =\ думал все сразу хранить...
 

mrfuse

Новичок
добрый вечер.

хранить шаблон в бд собирался не для того чтоб при каждой перезагрузке страницы оттуда его выдирать и обрабатывать...для этого есть кеширование...
а хранить в бд полезно тем что можно сделать откат и т.д. ит.п. (хотя можно делать бекап файлов)

вообщем, спорный вопрос...
счас использую такой синтаксис <?=$somevar?>

появился еще один вопрос:
раньше шаблоны у меня хранили в файлах, и возможности через веб морду их править, небыло...
поэтому шаблоны были в одном файле, разбиты по функциям..примерно вот так:

Код:
function sometpl()
{
$html=<<<EOF
{$text}
EOF;
return $html;
}
у меня на страницах есть GZip сжатие и прочая фигня, поэтому теперь делать тупо инклуд шаблона или print не выходит :( надо перед выводом обработать НТМЛ..

но как выполнить отдельный РНР файл (шаблон), и записать результат в переменную?!

на мой взгляд 2 варианта:
1. ob_start() и т.д.
2. eval();

собственно вопросы: есть ли другие варианты? (меня не один из 2х особо не устраивает :( счас на сервер и так не маленькая нагрузка, а что будет после eval/ob_start?!?! =\ (сайт довольна таки посещаемый) )

Спасибо все за ответы! простите что напрягаю =\
 

Фанат

oncle terrible
Команда форума
у меня на страницах есть GZip сжатие и прочая фигня, поэтому теперь делать тупо инклуд шаблона или print не выходит
какая связь между GZip сжатием и инклудом шаблона?
 

Angerslave

Новичок
ob_start не такое зло. eval зло, ob_start - нет.
Юзай ob, gzip, это не напряжно для веб-сервера, в отличие от eval. Да и дебажить eval очень сложно. Вообще шаблоны из базы следует выносить в файлы для инклуда. Можешь посмотреть как это в хороших фреймворках/шаблонизаторах сделано.
 

mrfuse

Новичок
>какая связь между GZip сжатием и инклудом шаблона?

для сжатия страницы, надо чтоб весь код был в переменной, для того чтоб функцией сжать текст, отправить заголовок, и вывести сжатый,бинарный код...

если темплейты будут вставлять у меня инклудом, а сам темплейт выглядит примерно так (содержимое файла темплейта):

Код:
<?php
HTML... var1: <?=$val1?>
?>
то получается что все содержимое темплейта пойдет сразу на вывод :(

вот так вот GZip связан с этим... :)
--
Angerslave
спасибо, буду значит юзать ob_start...выбора всеравно нет =\

и еще небольшой вопрос: ob_start и т.д. это все стандартное?
т.е.может быть такое что этого на каком-то хостинге не будет?
 

HraKK

Мудак
Команда форума
mrfuse
и еще небольшой вопрос: ob_start и т.д. это все стандартное?
т.е.может быть такое что этого на каком-то хостинге не будет?
маловероятно. Делай проверки.
 

mrfuse

Новичок
Angerslave
хм...вот кокраз это меня и интересовало :)
спасибо еще раз :)
 

A1x

Новичок
mrfuse
сжатие вы делаете как-то странно, можно просто в начале скрипта:

ob_start("ob_gzhandler");
 

fixxxer

К.О.
Партнер клуба
>счас на сервер и так не маленькая нагрузка

если тебя вдруг интересует вопрос производительности - то нагрузку, которую ты создашь, делая каждый раз запросы к mysql для доставания шаблонов, несоизмерима с eval и т.п.

но лучше подумай, как ты будешь отлаживать шаблоны с евалом, и как их вообще предполагается редактировать. рекомендую установить cms netcat, посмотреть, как там устроены шаблоны, и попытаться этим поделием попользоваться. думаю, после такого экспириенса ты сразу выбросишь из головы все евалы :)
 

mrfuse

Новичок
fixxxer

ну eval я уже давно выбросил :) и это был крайний вариант ;)

каждый раз выбирать темлейты с mysql я и не собирался...выше я об этом написал :) сейчас темплейты хранятся только в файлах...так оно и останется ;)

A1x
ну да...просто до этого я ob_start и т.д. вообще не использовал...
мой сайт был устроен так что вывод был только в конце...и уже в конце, если надо было, я сжимал страницы ;)

сейчас уже буду использовать ob_start...
 

fixxxer

К.О.
Партнер клуба
вообще, если у тебя вывод делается не в самом конце, значит, где-то что-то не то с архитектурой.
 
Сверху