Шаблонизатор. Проблемы создания\использования.

Статус
В этой теме нельзя размещать новые ответы.

cDLEON

Онанист РНРСlub
Шаблонизатор. Проблемы создания\использования.

Создавая эту тему я прежде всего хочу узнать все аспекты, фичи, навороты, которые желательно включить в Шаблонизатор.
1) Возможность компиляции (Аля смарти), а нужна ли она вообще ? И на сколько она ускоряет работу?
2) Кеш. Возьмём довольно распространённый пример. Новостной движок. Усложним задачку, для модератора есть несколько кнопочек (редактировать\удалить ) и т.д. Как реализовать кеширование так, что бы выполнялись все условия? Кешировать только данные ? Тогда получится целая куча мусора. Т.к. данных для каждой странички движка получится много. К тому же не ясно, а как узнать устарели ли они ? После каждого добавления\удаления\редактирования сносить кеш для всех пользователей?
3) Блочная структура. (Т.е. в одном файле куча шаблонов объединённых по единому критерию - принадлежность к модулю, например.) Так же интересна функция md5_file и на сколько она точно создаёт хеш, т.е. не будет ли он одинаков, если размер файла не изменился, а я, например, заменил несколько символов на другие ?
4)Хочется прикрутить всё это дело к движку. Каждый модуль лежит в отдельной папке с своими шаблонами. Как объеденить рутовую папку(шаблоны всего оформления сайта) + шаблоны модуля, делая меньшее количество тело движений. Т.е. красиво и изящно =)

ПЫСЫ. Заранее спасибо =)
 
Это все принципы, которых я придерживался при написании своего шаблонизатора.
1) Если Вы пишете свой шаблонизатор, начните с малого.
2) Кеш нужен если Ваш проект будет очень громадный, а просто для сайтишки рукописного сойдет и без кеша.
3) По блочной структуре не понятно, Вы спрашиваете или утверждаете? md5_file а Вы попробуйте или лень? Коллизии (повторения) происходят редко.
4) Разделите по максимуму PHP и HTML при написании, это поможет в дальнейшем. Если верный алгоритм, то Ваш темплейтор будет работать не хуже Смарти. Я лично в своей CMS делаю так:
/com/ - исполняющие файлы модулей
/templates/ - шаблоны (HTML)
С помощью SetRoot (метода шаблонизатора) - указую рут моих шаблонов.
 

cDLEON

Онанист РНРСlub
Curly-fingers
1) Шаблонизатор я уже писал. Маленький (на тот момент здаровенный не нужен был). Давольно успешно. Но это не суть вопроса.
2) В том то и дело, что пишу сейчас к здоровенному сайту.
3) Вопрос. А нужна ли она ?
4) Я тоже к этому склоняюсь. Но, например, что делать если в модуле нужно использовать стандартные шаблоны после вызова SetRoot для модульных шаблонов ? Ещё раз делать SetRoot? Так же не очень бы хотелось использовать что то вроде SetSubRoot......
 
1) Насчет компиляции я ничего не могу сказать, потому что ИМХО это изврат использовать PHP в шаблоне и сохранять его и т.д. Никогда не использовал, слава Богу.
2) Я думаю что лучшее всего кешировать уже пропрасеный шаблон в файл если md5_file != md5(шаблона) елс принт из файла. Такой вариант по мне.
3) Блочная структура нужна и от нее никуда не денешся. Я 2 месяца делал этот гребаный шаблонизатор и все из за блочной структуры и вложености блоков.
4) Нет. У меня такая организация:
/templates/ - это типа рут шаблонов.
/templates/news/ - это шаблоны модуля новости.
PHP:
$tpl -> SetRoot('/templates/');
$tpl -> AssignFiles('index_body.html'); // Прикручиваем файл из рута шаблонов, для примера
$tpl -> AssignFiles('news/index_news.html'); // Прикручиваем новостной шаблон
 

cDLEON

Онанист РНРСlub
Curly-fingers
2) Тогда какой смысл от кеширования ? Данные то ведь всё равно извлекаются. Легче сделать принт шаблона, чем сравнить две версии и если они равны то читать из файла не правда ли ?
3) Я думаю так и поступлю ) Тогда другой вопрос. Как это лучше организовать ? В виде ХМЛ (Тогда придётся чётко соблюдать формат) Либо парсить регуляркой ?
4) Такая организация не совсем удобна для меня. Т.к. модульные шаблоны лежат отдельно от модуля (что, помоему, не очень правильно).
 

zerkms

TDD infected
Команда форума
4) Такая организация не совсем удобна для меня. Т.к. модульные шаблоны лежат отдельно от модуля (что, помоему, не очень правильно).
а тут надо уже действовать в зависимости от ситуации
или у тебя шаблоны лежат рядом с модулем, или все шаблоны лежат вместе.
вот например иконки и прочая графика для модуля новости у тебя где будут лежать?
 

cDLEON

Онанист РНРСlub
вот например иконки и прочая графика для модуля новости у тебя где будут лежать?
Там же. А пути к картинкам будут лежать в КСС файле, который в свою очередь будет лежать в дире с картинками и путь к картинкам можно будет задать отнасительно этого файла =)
Или я перемудрил ? )
 

zerkms

TDD infected
Команда форума
cDLEON
а, т.е. модули у тебя лежат ниже вебрута... ну тогда вопросов нет
 

zerkms

TDD infected
Команда форума
cDLEON
если выше - то как ты будешь давать ссылки на графику?
 
Как это лучше организовать ? В виде ХМЛ (Тогда придётся чётко соблюдать формат) Либо парсить регуляркой ?
У меня единственная регулярка в шаблонизаторе, которая извлекает блок, а там уже строчными функциями. У меня такая организация:
<b>{./t_TITLE}</b> Внешнеблоковая переменная
<!-- BEGIN ./news/ --> Начало блока news
{./news/T_NEWS_TITLE} Блоковая переменная
<!-- BEGIN ./news/subnews/ --> Начало блока subnews
{./news/subnews/T_TEXT} Блоковая переменная
<!-- END ./news/subnews/ --> Конец блока subnews
<!-- END ./news/ --> Конец блока news

Все эти пути для того чтобы различать принадлежность блоков и переменных друг к другу. Регуляркой выбирается все от начала до конца блока и все что внутри парситься и возвращается.
4) Такая организация не совсем удобна для меня. Т.к. модульные шаблоны лежат отдельно от модуля (что, помоему, не очень правильно).
Так как модули у меня устанавливаются отдельно после установки уже самой CMS и каждая директория имеет свое назначение: одна содержит ВСЕ шаблоны, одна все картинки и кстати независимо от положения относительно рута, т.к. отдается скриптом даже дизайн, что позволяет вести детальную статистику трафика.

-~{}~ 07.06.07 08:48:

2) Тогда какой смысл от кеширования ? Данные то ведь всё равно извлекаются. Легче сделать принт шаблона, чем сравнить две версии и если они равны то читать из файла не правда ли ?
Да. Вы действительно правы. Не подумал до конца.
 

cDLEON

Онанист РНРСlub
если выше - то как ты будешь давать ссылки на графику?
Вот это дело я не продумал.
Через CSS файл можно конечно, но сейчас подумал....Будет выглядеть как костыль...
т.к. отдается скриптом даже дизайн, что позволяет вести детальную статистику трафика.
Гм....Сервака не жалко ?
---
С кешем я всё ещё не определился...
Как сделать лучше ?
 

HraKK

Мудак
Команда форума
А нужноли вообще что-то писать? cDLEON нечем занятся по проекту, кроме как писать свой шаблонизатор?
Ваш шаблонизатор будет лучше существующих аналогов?
 
HraKK
Извините, вмешаюсь в Ваш разговор. Я например во время написания шаблонизатора получил много опыта и массу удовольствия после написания, хотя этот процесс занял у меня два месяца и несколько тон валерьяны :).
 

HraKK

Мудак
Команда форума
Curly-fingers
Я не против обучения, пишишь - пиши, даже помогу и похвалю. Но не для _уже_разрабатываемого_проекта_.

2) В том то и дело, что пишу сейчас к здоровенному сайту.
не согласны?

И кстате Ваш шаблонизатор может чем то похвастаться перед публикой? Или чтоб было?
 
И кстате Ваш шаблонизатор может чем то похвастаться перед публикой? Или чтоб было?
Я не писал чтобы хвастаться, а скорее склоняюсь к варианту "чтобы было", но было то что надо лично для меня и отвечало моим требованиям. А требование у меня одно: простота. Этим только можно похвастаться.
Согласен и поддерживаю. Если уж разрабатывается здоровенный проект, то надо уделить ему внимание, а не выдумывать велосипед. Но я склоняюсь к принципу, сделать "фундамент" прежде чем строить "дом".
 

cDLEON

Онанист РНРСlub
HraKK
Я вижу вы ярый поклонник использывать чужой софт.
Впуть. Используйте. Но оффтопить не нужно. Договорились?
Мне ваши смарти флекси и прочая лабуда нафиг не впилась. Я хочу написать своё быстрое, лёгкое, заточенное под меня.
Поэтому пишу своё. И,пожалуйсто, не желейте моё время.
 

Андрейка

Senior pomidor developer
cDLEON
а почему ты у нас тогда спрашиваешь какие фичи тебе включить в твое быстрое легкое заточенное под тебя?
 

cDLEON

Онанист РНРСlub
Андрейка
Пожалуйсто, не придирайтесь к словам. Я интересуюсь сутью, а в ответ получаю: "тебе что делать нефиг? Возьми готовое и не мучайся." Если бы я хотел взять готовое, то, как минимум, не интересовался бы здесь.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху