допустим я хочу замутить сайт с возможностью смены шкур (шаблонов редактируемых дизайнером) например так выглядит index.php Код (Text): // здесь идет отработка логики программы и инициализация всех переменных, вставляемых в tpl файлы обычным <?php echo $name_var; ?> include('header.tpl'); include('body.tpl'); include('footer.tpl'); Т.о. в файле шаблона с расширение *.tpl - содержиться HTML-код понятный веб-дизайнеру со вставками где надо элементов <?php echo $menu; ?> - на которые дизайнер реагирует нормально Однако у меня например все менюшки сайта формируются на основе результатов запросов к БД, обрабатываются и выводятся обрамленные тегами в нужное место в шаблоне. Но я все равно сдесь не вижу легкую смену дизайна - ведь формирование менюшек происходит у меня в логике программы а не в шаблоне -а поэтому от глаз дизайнера скрыто многое - т.е. теги <table>, <tr>, <td> Возможно ли решить проблему так, чтобы отдать в руки дизайнера полную власть над дизайном - и в тоже время скрыть от него весь php-код, кроме банальных вставок <?php echo $name_var; ?>
дык в том то и дело как ее разделить? я понимаю что логика программы (или бизнесс-логика) и логика представления - это разные вещи и порой не всегда легко отделить одно от другого, но я хочу избежать того чтобы отдавать в руки дизайнера даже логику представления!
enshtein ИМХО 100% отдать не получится, если сайт более менее сложный. я сам парился с такой задачей. либо шаблонизатор писать умный, но тогда он мало чем будет отличатся от пхп кода. либо все-таки что-то оставлять в коде, но тогда будет каша. я вообще за то, что бы все делать классически. сначала дизайн. потом нарезка. протом программинг, а на лету менять дизайн - дело неблагодарное. максисмум что можно отдать - это div верстка и дизайнеру отдавать css править
Имхо, в идеале должно быть 3 человека: программист, дизайнер и верстальщик... но верстальщик как правило на пост-советском пространстве реализуется программистом+дизайнером... отсюда и каша.
PHP: <table> <?foreach ($menu_items as $item):?> <tr><td><?=$item?></td></tr> <?endforeach;?> </table> зачем скрывать такой php-код от дизайнера? пусть сколько хочет редактирует html, никто его не заставляет редактировать php.
ну в принципе да, согласен Ведь по большому счету какая разница в чем путаться веб-дизайнеру или во вставочных тегах PHP <?php ?> или в тегах шаблонизатора, в конце концов - нарушить логику представления он сможет в обоих случаях....
в продолжении темы - хотелось бы задать вопрос как лучше огранизовать такую вот штуковину: Страница делиться на части левая часть у меня содержит блоки, которые в свое время могут в себе содержать или простые ссылки - типа меню ссылок или же быть выводом работы какого-либо модуля (ну типа Голосавание, Авторизация, Кто щас на сайте) - очень похоже на RunCMS - ну конечно не только - это я для примера Дык вот как же мне поступить в таком случае... ведь логика представления не простая - потому как кол-во блоков и содержимое каждого из блоков - формируется на основании БД
жёсткое извращение =) На мой взгляд не сложно отделить дизайн от логики, но полностью это сделать практически невозможно, особенно в серьёзных проектах. В некоторых местах кстати очень выручает CSS. смарти?! =) посмотри на функцию, которую я написал: http://www.php.ru/forum/viewtopic.php?t=1629&start=30 может идея понравится и свою напишешь.
тем не менее, мало чем отличается от того же "смарти". smarty: Код (Text): <table> {foreach item="item" from=$menu_items} <tr><td>{$item}</td></tr> {/foreach} </table> практически то же самое.
вы просто не умеете его готовить function.html_table.php PHP: <?php /** * Smarty plugin * @package Smarty * @subpackage plugins */ ?>
если уж об идеалах так это XML+XSLT а я вот своим шаблонизатором пользуюсь и советую всем хотя бы попробовать написать
точно, и пусть потом дизайнер/верстальщик разбирается, куда и какой параметр подставить, чтобы установить класс для ячейки html-таблицы и т.п. так?
Я прелагаю альтернативы, это была одна из них. А писать такие вещи как шаблонизаторы это глупо. Ты тратишь време на то, что уже написано другими. Лучше бы написал такие вещи, которых еще нет, мы тебе спасибо сказали бы. А написав еще один шаблонизатор, когда их уже просто тысячи, ты просто тратишь свое время. И просто показываешь свое не уважение к разработчикам того же SMARTY. Объясните мне как может быть человек таким невежественным, и в то же время умным в программирование. - Звездная болезнь?
Имхо отделение кода от дизайна не всегда нужно, я например на одном своём сайте генерирую HTML прямо в РНР, а вот дизайн делаю с помощью CSS. (уже 4 дизайна успел сменить не тронув ни РНР ни HTML код)
При чем здесь не уважение? А если готовые решения неподходят? Vladson Полностью согласен с Вами. Полностью отделить мух от котлет врядли получится
Я там понимаю говорили бы про какой-нить не серьезный шаблонизатор, так про смарти же говорите. Сами PHP smarty.php.net это их проект. Кто там из вас сказал что смарти это фигня, да вот ваши шаблонизаторы это полнейшая фигня, дайте мне его, напишите мануалы, и если он мне подойдет я заберу слова обратно. Если я щас начну их сравнивать smarty и ваш самаписанный шаблонизатор вам стыдно станет. Окей я понимаю что вы скажите, что мол пишим мы его под свои нужды, под свои задачи. Но я то предлогаю общее решение проблемы если чуваку нужно отделить PHP от html то ему идельное решение это SMARTY, а вы ему задвигаете речь о том что напиши свой шаблонизатор, возьми Си и напиши свой PHP, вам что похвастаться охото что вы там смогли накатать маломальский шаблонизатор и теперь где надо и где не надо несете этот брет. Да блин напишите вы форум чтож вы PHPbb используете. Потому что есть уже phpbb и если вы напишите свой форум вас все дружно на 3Б пошлют. Так вот я говорю что есть уже SMARTY, и писать такой второй это время коту под хвост.
А кто-нибудь читал это http://spectator.ru/technology/php/easy_templates заметка Spectator-a под названием «Шаблоны в PHP для чайников» После прочтения я окончательно решил что не буду париться с этими шаблонизаторами и т.д. К тому заглянул в код CMS-ок Joomla, Mambo, Runcms и др. и увидел что народ слишком незаморачиваятся и не накручивает лишней абстракции, они делают проще - поместили весь шаблон в один файл (themes.php) и разметили его примерно так: Код (Text): <? function header($title) {> <html><head> <title><?=$title ?></title> </head> <? } ?> <? function body() {> что угодно <? } ?> <? function footer() {> </body></html> <? } ?> и в итоге на выводе (файл index.php) Код (Text): <?php include_once('themes.php'); header('Главная'); body(); footer(); ?> ИМХО лучшее решении... скажете изврат???? а что Код (Text): <html> <title>{TITLE}</title> <body> {TEXT} </body> <html> чем то лучше - а если его нагрузить логикой представления (условия, циклы и т.д.) - то получиться то же самое!!! Так что использовать шаблонизатор или нет - СУГУБО ЛИЧНО ДЕЛО!!!