я в принципе систему сайта не так строю, так что тут можно спорить до синевы и никто не будет прав. да в общем дело-то не в том чьи шаблоны лучше. данный пример был для новичков, а профи пишут совсем по другому.
В том и задача шаблона, чтобы "родной синтаксис PHP" остался в ведении у программиста. А шаблоны, как известно, пишутся для дизайнеров. А дизайнер может быть очень далеким от разного рода программирования.
D.Lans В том то и дело что ты не совсем прав !!! (хотя и прав во многом) Дело в том что у РНР несколько синтаксисов, обычный и упрощённый, и вот второй как раз идеально подходит для дизайнеров... (в использовании он не сложнее любого preg-based шаблонизатора) А вот "прописные-истины" которые вероятно терзают многих с самого начала этого топика (о разделении HTML от РНР) это немного другое дело, там речь о разделении логики представления от логики приложения (т.е об отделении дизайна от кода)
Заметил: постоянно используется include_once('buffer.inc'); А такого файла нет. Может include_once('buffer.php'); ? И еще ошибка: Добавим в коструктор И вопрос такой. В Parse() используется массив вроде GLOBALS Можно узнать, откуда он берется, раз он не передается в функцию напрямую?
GLOBALS - суперглобальный ассоциативный массив содержащий в себе все глобальные переменные в виде имя переменной => значение в том числе и себя
В общем, я с большим трудом написал свою динамику в системе шаблонов.. Но все равно жду совета от 440hz - он полагаю сделает лучше и удобнее.
Супер! Я как раз думал, как бы попроще сменить, например, цвет фона, ссылок и таблиц у нескольких десятков файлов. Теперь буду знать.
Народ. Моя система шаблонов работает на примере из этой темы. Все отлично, в общем-то, но есть одна проблема. Сама суть описанной в этой теме системы. Берем .tpl файл, состоящий из HTML/CSS и вставок, типа {text}. До этого времени мне подоюной системы хватало, но возникли проблемы, когда мне понадобилось вставить PHP-код на страницу. Его просто вставлять то некуда! Я подумал и сделал так: require() PHP в методе $this-parse() системы шаблонов. Но это неуклюжее решение, к тому же POST-переменные не передаются между страничками. Сами странички у меня отображаются так: site.ru/index.php?act=news site.ru/index.php?act=register В общем, что делать, подскажите, уважаемые.
440hz Это ясно. В шаблоне у меня один дизайн. Вот мне и интересно - как осуществить взаимодействие PHP-кода и данной системы шаблонов? В моем случае.
440hz хм. что-то я сомневаюсь что POST (насчет GET - не знаю) переменные будут передаваться при таком подходе.
Хм, немогу вникнуть в суть, зачем весь этот баян. Есть же smarty от самих PHP (http://smarty.php.net/) + русский мануал. Отлично решает все проблемы, логику можно разделить, но есть возможность и в шаблоне ее реализовать.
лично меня абсолютно не устраивает смарти. За выходные написал собственный шаблонизатор, ничуть не уступающий смарти. а в некоторых задачах (возможно, важных только для меня) даже превосходит ее
Хм, интерестно, думаю что могу попробовать доказать что smarty, хорош во «всем» (долго с ним работаю уже...), давай говори чем он неустраивает тебя, может я тоже на него забью (кто знает, кто знает)...
Я сам юзаю смарти..... но сейчас реально задумываюсь от него отказываться в ряде проектов...... слишком тяжелый......
у меня все проекты организованы так: PHP: <?php include('common.php'); include('includes/header.php'); логика страницы $template->parse(); //парсинг шаблона "тела" страницы. include('includes/footer.php'); ?> соответственно в хеадере футере тоже самое только без инклюдов. В смарти мне придется для каждой страницы создавать свой объект smarty, чтобы потом его вывести и убить. мало того что неудобно (нельзя передавать переменные из хеадера в футер кроме как в основном коде) так еще и несколько ресурсоемко. да и элементарно некрасиво
svk в смарти можно так: PHP: <? $html=$smarty->fetch("header.tpl"); $html.="SOME CONTENT"; $html.=$smarty->fetch("footer.tpl"); echo $html; ?>
Вообще-то не надо перемешивать логику и вывод. Все действия нужно выполнять до вывода шаблона. Соответсвенно все переменные будут доступны и header, и в body, и footer. Хотя я не использую разбиение страницы на три части. У меня отдельно шаблон всей страницы и только где информация изменяется, делаю вставки соответсвующих шаблонов. Например, для смарти будет так Код (Text): <html> <head> <title>{$title}</title> </head> <body> Верх страницы (логотип, меню и т.д.) {include file=$block} Низ страницы </body> </html>
Так, плиз, давайте оффтопить насчет чем хорош или плох смарти в другой теме. Я пишу свой шаблонизатор, ибо когда пишешь свое: 1. Знаешь как оно работает (можно подправить что-нить при необходимости). Не надо читать тонны мануалов. 2. 99% возможностей смарти мне просто не нужны. Тогда зачем тоскать с собой лишний код? 3. В конце концов - когда пишешь сам, невольно поднимается твой профессионализм, понимание PHP и т.д., чем когда юзаешь готовое. опять же - создайте отдельную тему и обсуждайте в ней смарти! Я по прежнему хочу услышать ответа на свой вопрос: как внедрять PHP код в данную систему шаблонов?
Можно так. PHP: <? ob_start(); include('file.php'); $x=ob_get_clean(); ?> А потом значение переменной вставлять в нужное место в шаблоне.
Mavir ээ а где ты предполагаешь вставлять данный код? В index.php или template.php ? Кстать я понял почему у меня переменные не передавались - оказывается я невнимательно написал - вместо $_POST[''] - $_GET['']
Это не я предлагал, а 440hz Естественно, в index.php. В шаблоне только выводишь, что сохранилось в переменной.