Хотел бы обсудить теорию создание шаблонизаторов на php. Знаю, что тема избитая и много готовых решений. НО! 1. Часто нужен шаблонизатор, не требующий дополнительной установки и настройки. 2. Зачастую нужен простой шаблонизатор, без кучи ненужных наворотов. Предлагаю обсудить следующие темы: - Идеальный синтаксис, какой он должен быть? - Теорию разбора выражений. - Теорию хранения и кеширования без заморочек (доп настройки, бд). У кого какие есть соображения на эту тему? P.S. По ходу обсуждения топика развился проект wwwPHParser.ru, прошу всех к тестированию.
Danilka Идиальный шаблонизатор - отсутствующий (в том понимании, как многие его представляют). Посмотрите как сделаны шаблоны у меня. Можете поспрашивать Nemo, он его изучает какое-то время, вроде очень доволен. http://file.lv/framework.rar
Psih Запостил тему и пошёл в бассейн. Пока мылся в душе, пришёл к той же идее, что быстрее чем пых, код на пыхе парсить не будет и понял, что нужно юзать его. Тут прихожу домой, открываю и вижу! Ну эт шутки-шутками, а по теме. Не особо я понял, как он у вас работает, но суть ясна. Предлогаю немного развить идею. Работает-то ваш безусловно быстро. Но, что с синтаксисом шаблонов? Не думаю, что он уж так удобен... А как же классические конструкции типа {if my_var} something {/if} ? Предлогаю следующую идею. Можно написать любой (пусть даже очень тормозной парсер) для кода, вид которого я написал. Парсер будет перегонять этот код в php конструкции. Самый тупой способ заюзать preg. Быстро (в написании) и сердито. В результате получим шаблон на подобии вашего, а его уже можно простым пыхом выполнить. Ну и можно разные фичи приделать на подобии кеша и пр.
Danilka - всмысле ставится отдельно ?? лишнее отрезать, нужное добавить .. - и получается указанный функционал ;-)
HTML like: аки теги и аки атрибуты. (Моя мечта.) XML parser (libxml в PHP5 стандартный модуль). Файлы. Закэшированные куски парсер пропускает. Но это, конечно же, очень медленно. Килобайт 100 кода и парсер накроется медным тазом.
Sergey89, очень красиво и не геморойно. Это я иронизирую. %) DOM в роли ядра шаблонизатора это хорошо (точнее, xpath это хорошо), но это скорее эдакий javascript, а не html.
Мне понравилась идея реальизовать преконвертор из любого синтаксиса в пшп, а потом пых уже обработает. Получится и удобно и быстро. P.S. Hight, вот какого хрена, а? Всегда в таких темах найдётся кто-то, кто это скажет?! Что за народ? Не видно о чём говорим? Не верю, что ты прочитал и не вник. Нет бы по теме чего сказать...
Я и говорю. Абсолютно не вижу смысла переносить логику в шаблоны. Логика должна быть в программе, а не в шаблоне. upd. Конечно Я могу себе представить случай когда в шаблоне может понадобиться логика. Но ИМХО это не оправдывает трату ресурсов на разработку некого парсера шаблонов.
antonn И что же тут велосипедного? По-моему очень даже одекватная идея совмещающая все плюсы парсеров и вставки html прямо в php. Если это велосипед, что же тогда все остальные парсеры?
Danilka я про то, что несмотря на другие варианты (возможно лучшие) люди все же изобретают велосипед, кто то ради тренировки и интереса, кто то парируя "а вон другие же делают, значит и мне надо"
antonn Не нужно мне этого случая рассказывать. Я сам был противник шаблоно и начал их использовать только тогда, когда они на самом деле понадобились.
HTML: {if my_var} something {/if} <!-- vs //--> <? if (get('my_var')){?> SOME HTML <?}?> Не вижу разницы в плане синтаксиса. Последнее хоть подсвечивается нормально. Первый вариант можно прекомпилировать в PHP и будет почти тоже самое, но теряется гибкость функционала и возможностей. Делать как в Smarty модификаторы и плагины - усложнение, потеря скорости и рассудка (аля ООП ради ООП). Я работал со smarty, я знаю что он может и на что похожи шаблоны в итоге. Да, я работал _только_ со сложными проэктами, я _никогда_ не работал над простыми сайтиками, только долгосрочные большие проэкты от 5-6 месяцев и дольше. Поэтому я не буду спорить про простецкие сайтики - не моя область. А в моей Smarty просто не применим. З.Ы. Кстати, на новой работе используют XML style теги и обрабатывают XML парсером шаблоны. Но компания работает над корпоративными внутренними системами, поэтому тут оно применимо и очень удобно. А вот для WEB'а я бы такое не использовал - слишком тяжело.
Dagdamor По причинам fucking sky high memory and cpu usage. Практически все в интернете соглашаются что Smarty без opcode кешера применим только при разработке. А многие со временем приходят к выводу что он и не нужен, хоть конечно и функционален, удобен но ресурсы экономить важнее. Да и порой проще обычным PHP да ещё и быстрее. Просто гуглом пошарте по форумам и статьям, не только русским.
Наваял я то, о чём писал. Работает на ура, но выкладывать пока не буду. Добъю один проект на нём полностью, чтобы все косячки на первый раз подправить. Шмат шаблона на вскидку, для примера: HTML: [if show_table] [load pl_search] <center><table id="main_table" bordercolor="#3399CC" cellpadding="3" cellspacing="0" width="80%"> <tr> <td width="0">Операции</td> <td width="0"><a title="Отсортировать настройки по названию" class="mt_a" href="[this_link]&order=name">Название[order_name]</a></td> <td width="30%">Значение</td> <td width="70%">Описание</td> </tr> [loop table] <tr> <td align="center" valign="middle"> <a title="Редактировать" href="[site_url]panel.php?pl=cfg&do=edit&id=[id]&p=[p][src]"><img src="[dis]edit.gif"></a> <a title="Удалить" onClick="return window.confirm('Вы уверенвы, что хотите удалить настройку ([name]) безвозвратно?');" href="[site_url]panel.php?pl=cfg&do=del&id=[id]&p=[p][src]"><img src="[dis]del.gif"></a> </td> <td>[name]</td> <td>[value]</td> <td>[about]</td> </tr> [/loop] </table></center> [/if]