obsrv Разобрался с примерами, которые были в скачанном пакете - в общем-то всё просто, мне пока нравится. А помимо того, что описано в тех 8-ми примерах, которые идут вместе с XTemplate, у него есть ещё какие-то функции/возможности, которые не рассмотрены в примерах?
У меня снова вопрос по этой теме... В общем допустим на сайте есть куски, которые одинаковы для каждой странички - это традиционно шапка (логотип, меню, какая-то информация о состоянии сайта (допустим, сколько всего фоток на сайте или что-то в этом роде) ну и т.д.), а также нижняя часть, в которой может быть продублирована навигация, ну и вообще что угодно, не в этом суть. Есть также, соответственно, основная часть, которая для каждой странички различная. Естественно, напрашивается такой вариант - создать шаблон типа header.tpl , footer.tpl и остальные, например body-main.tpl , body-register.tpl и т.д. И вот теперь вопрос: как лучше эти три части собрать (средствами XTemplate)? Я пока начал делать так: создаю три объекта типа xtpl: PHP: <?php $xtpl_header = new XTemplate("templates/header.tpl"); $xtpl_body = new XTemplate("templates/body-main.tpl"); $xtpl_footer = new XTemplate("templates/footer.tpl"); ?> Дальше идёт сама программа, и в конце такой завершающий эпизод: PHP: <?php $xtpl_header->out("main"); $xtpl_body->out("main"); $xtpl_footer->out("main"); ?> Но есть у меня предчувствие, что начал я делать не так... Ну вот, собственно, такой вопрос. Насколько это правильно/неправильно и как сделать лучше?
В общем случае: Код (Text): // page.xtpl <!-- BEGIN: page --> {FILE "header.xtpl"} {FILE "body-main.xtpl"} {FILE "footer.xtpl"} <!-- END: page --> PHP: <?php $xtpl->parse('page'); echo $xtpl->text('page'); ?> У меня на самом деле немного по-другому. У меня нет body-main.xtpl. Есть класс (типа SitePage)в одном месте, от которого наследуются классы в разных разделах сайта (типа StaticPage). У себя в разделе они имеют свой page.xtpl - копия описанного выше, только там уже есть body.xtpl. Сам StaticPage парсит body.xtpl, а в SitePage парсятся header.xtpl и footer.xtpl. Объяснил как мог
Mr.M.I.T. а чего сложного ? если сайт можно разрезать условно на три части, из которых активно меняется средняя, то наверное так стоит сделать, нет ? в случае использование "шаблонизатора" это не несет никакой лишней нагрузки. К слову, header и footer тоже имеют подвижный контент.
Mr.M.I.T. Зависит от ситуации. Иногда (и не редко) лучше 4 в кэше.Это если вообще. А если в частности (о примере выше), то какая разница, описать это в одном файле или УСЛОВНО разбить на 3 части тоже самое количество байт.?
1. Это когда лучше 4 в кеше? 0о (я если что про кеширование откомпилированных шаблонов) 2. Не совсем, ему придётся искать и грузить 4 файла а не один т.е. я о чём, если нет пользы, зачем это нужно?
1. Если про компиляцию - то она на этапе ->parse. Если про хранение 4 в кэше, то без разницы - количество байт одинаково. 2. Да, микросекунды роляют . Если у меня будет задача написать под нагруженную систему с десятками тысяч запросов - я использую один файл. А может вообще без шаблонизатора. Предлагаю не спорить по этому вопросу, потому как неплодотворно, я понимаю вашу мысль, а учавствовать в разминке мышц не очень хотса, ибо все-таки флуд . дописка: это как баланс - если мы выигрываем в одном, то теряем в другом. Сюда можно привести много примеров. В данном случае - выигрываем в гибкости - проигрываем в скорости (при открытии только и весьма условно - но ладно). Посмотрим на классы - выигрываем в гибкости (масштабируемость, dev юзабилити и тд) проигрываем в скорости линейному программингу.
/me опять не доганяет как же мы тут в гибкости выигрываем нафига во всех шаблонах городить один и тот же футер? 0о шаблон это представление одной функциональной части вообще шаблоны нужно (думаю так многие считают) разделять по функциям в не по виду т.е. например, главный шаблон, шаблон для публикаций, шаблон для регистрации и тд для каждого нужно выделять по процессу а вот такая ситуация, допустим у нас в хидере и боди есть переменная title, но в боди это переменная должна содержать название публикации, в а хидере это титл страницы
Спасибо! Вчера, после того, как задал тут свой вопрос - уехал на дачу. Погулял там с собакой, сидел вечером пил чай и мне в голову тоже пришла эта идея. Ну просто на сайте несколько страничек и на каждой страничке одинаковое начало и окончание. Причём оно хоть и одинаковое, но тоже не чистый html, а имеются всякие вставки типа всего в базе ххх записей, у нас ххх пользователей и т.д. Можно, конечно, это вставлять в шаблон каждой странички, но если вдруг захочется что-то поменять или доделать в этой "шапке" сайта - придётся вносить изменения в шаблон каждой странички, а так - только в один.
И ещё вопрос по XTemplate... В примерах, которые шли в архиве вместе с самим шаблонизатором встречаются строки наподобии этой: HTML: <!-- $HeadURL: [url=https://xtpl.svn.sourceforge.net/svnroot/xtpl/trunk/ex3.xtpl]https://xtpl.svn.sourceforge.net/svnroo ... k/ex3.xtpl[/url] $ $Id: ex3.xtpl 16 2007-01-11 03:02:49Z cocomp $ --> Зачем это нужно и нужно ли вообще...?
блиин, нафига в каждый шаблон пихать футер и хидер? ладно, попробую объяснить кодом PHP: <? $tpl= new smarty(); // угу $result=array(); // выводим контент $tpl->assign("text","text text"); $tpl->assign("title","title content"); $result['content']=$tpl->fetch('content.tpl'); // теперь контент в одной переменной // вместо шаблона контента, можно подключать например шаблон регистрации и тд. // выводим главный шаблон $tpl->assign("title","header title"); $tpl->assign('footer',"footer g"); // лучше это делать через $result чтобы избежать повторений $tpl->assugn($result); // теперь наш контент доступен в шаблоне ввиде переменной $tpl->display('main.tpl'); /* т.е. листинг шаблона main.tpl будет примерно такой <html> <head>{$title}</head> <body> {$content} </body> {$footer} </html> а content.tpl Контент<br> {$title}<br><br> {$text}<hr> */ ?> короче я не знаю как ещё объяснить что я хочу сказать =)
Mr.M.I.T., кажется я догнал, о чём ты...Типа вместо: делать: HTML: // page.xtpl <!-- BEGIN: page --> // шаблон "шапки" {FILE "body-main.xtpl"} // шаблон "футера" <!-- END: page --> И получится 2 файла с шаблнами вместо 4х или 3х... Так?
типа =) только body-main.xtpl не надо инклудить, иначе теряется смысл для body-main.xtpl лучше делать отдельный процесс обработки, результат в переменную, переменную в page.xtpl
Mr.M.I.T. 1. Что-то не знаю даже, а в XTemplate есть ли функция ? Я так понимаю, что эта функция возвращает "пропарсеный" шаблон (и можно переменной присвоить это значение)? Т.е. она выдаст тоже самое, что и $xtpl->out(), только out() передаст результат браузеру клиента, а fetch() - вернёт результат и его можно присвоить переменной? 2. А чем будет лучше то, что ты предлагаешь, чем вышеупомянутый вариант: HTML: <!-- BEGIN: page --> // шаблон "шапки" {FILE "body-main.xtpl"} // шаблон "футера" <!-- END: page --> ?
если нет, значит в жо*у такой шаблонизатор да переменные в body и page tpl могут иметь одинаковые имена, но разные значения... есть и другие приемущества, например тебе надо скопировать 10 шаблонов body в page tpl или надо скешировать шаблон body и тд.
Ну теперь жду obsrv - он мне порекомендовал XTemplate и, наверно, знает, есть ли в нём функция, аналогичная PHP: $tpl->fetch('content.tpl') ?
sobachnik Вот мой ответ (возьмем из примера ): Код (Text): // page.xtpl <!-- BEGIN: page --> {FILE {LANGUAGE}} <!-- END: page --> PHP: <?php // все как обычно $xtpl->assign_file('LANGUAGE', 'body.xtpl'); // body_ru.xtpl, body_en.xtpl, whatever you want // тыт parse разные $xtpl->out('page'); ?> Можно посмотреть example 7. А вообще сурс смотреть полезная штука. Я там еще даже не все знаю Я "ответил" ?
obsrv, спасибо. То, что можно подключать файлы других шаблонов я уж понял. И то, что можно задавать их имена из основного скрипта - тоже. Там (выше) вопрос немного в другом был: PHP: $tpl->[b]fetch[/b]('content.tpl')