В общем искал на форуме, не нашел не че подобного поэтому решил выложить. Используется cls_fast_template.php версии cls_fasttemplate_1.6.2 взять можно тут http://www.grafxsoftware.com/product.ph ... mplate/26/ пример использования PHP: $CONTENT="Привет всем"; include ("cls_fast_template.php"); $tpl = new FastTemplate("./templates"); $tpl->define (array(main=>"templ.html")); $tpl->assign(array(CONTENT=>$CONTENT)); $tpl->parse (MAIN, "main"); $tpl->FastPrint(); ну и естественно templ.html HTML: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Шаблон</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> </head> <body> {CONTENT} </body> </html> Я это все к тому что посмотрел на несколько реализаций шаблонизации и пришел к выводу что не нужно изобретать велосипед... Все это прекрасно работает на php 5.*
Skyers, а я, если честно, не восхищен. Он позволяет только подставлять переменные? Если да, то этого слишком мало. Если нет, то покажи пример циклов, условий и , если есть, рекурсий. Это три вещи, которые ИМХО основные в шаблонизаторе. Код (Text): $tpl->assign(array(CONTENT=>$CONTENT)); $tpl->parse (MAIN, "main"); Что это за CONTENT и MAIN? Константы? Если да, то почему в глобальной области видимости и сколько есть констант? Если нет, то почему не взяты в кавычки, что генерирует ошибку уровня Notice?
Я думаю что все ответы ты найдешь по данной мной ссылке или в описании которое находится внутри архива, мои потребности на данный момент были решены этим примером... а поскольку я новичок, то уж извините если что не так =)
Не люблю наличие логических блоков в шаблонах, но, в большинстве случаев, без них очень сложно. Например, простейший блок: [group=5]{link}[/group] Естественно, можно абсолютно спокойно со стороны PHP {link} показывать только тем, кто принадлежит какой-то группе. Но вот уже оформить этот блок уже никак, если только со стороны JS определять контент тега и пр.
У меня появилась дибильнейшая идея: оформлять логические блоки со стороны клиента (на JS), a контент отдавать с сервера. Подстановка группы ничего не даст, ибо контент отдается сервером, а вот оформление можно своё забацать =)
логика она в голове. =) а руки, они точатся ржавым напильником до крови, что б писалось потом легче и понятнее. многи так и делают. отдают клиенту JSON, а там по данным генерят HTML. очень продуктивно. сам хочу попробовать сие, но все руки не доходят.
Я так понял, что он где-то взял этот шаблонизатор. Только {TITLE} - это усложение. А циклы - они для облегчения. Как ты напишешь без цикла? HTML: <!-- [LOOP] Posts --> <div class='postAuthor'>{Posts.Author}</div> <div class='postText'>{Posts.Text}</div> <!-- / --> Или вынесешь это в отдельный шаблонный файл? Уж извини, но когда у тебя один документ находится в трех десятках файлов - это сущий кошмар для верстальщика. HTML: <!-- [IFNOT] User.isLogged --> <div class='loginForm'> .. </div> <!-- [/] --> Это даже не логика, а базовые, примитивные действия. Единственные два варианта, как можно реализовать их вышезазначенным способом - это либо мазохистское разбиение на десятки файлов одного документа, либо хтмл-блоки в переменных. Оба варианта - ужасных.
Да, согласно сайта, блоки в этом шаблонизаторе - тоже есть. Интересно, как они решили проблему с видимостью переменных. Видны ли глобальные переменные из блока? Если да, то что будет, если они пересекутся? Если нет, то что делать, если мне понадобится какая-нибудь глобальная переменная, например языковая. HTML: <html> <head> <title>{TITLE}</title> </head> <body bgcolor='lightblue'> <center> <font color='blue'> <font face='arial' size='4'><b>{HEADING}</b></font> <font face='arial'><p>{TEXT}</p></font> <table border='1' bgcolor='darkblue'> <tr> <th> <font color='yellow'>{NAME}</font> </th> <th> <font color='yellow'>{POSITION}</font> </th> </tr> <!-- BEGIN DYNAMIC BLOCK: employees --> <tr> <td> <font color='yellow'>{C_FIRSTNAME} {C_LASTNAME}</font> </td> <td> <font color='yellow'>{C_POSITION}</font> </td> </tr> <!-- END DYNAMIC BLOCK: employees --> </table> <font face='arial'><p>{LOCAL_TIME}: <b>{C_LOCAL_TIME}</b></p></font> </font> </center> </body> </html>
Skyers молодец, как для новичка пойдет, но надо шире раскрывать раз выкладываешь, по больше примеров в том числе и с циклами и прочим...
Ага, а еще перед программированием идеально прорабатывается структура кода, все записывается на бумажке и потом нету одного отклонения от намеченного плана. Имхо, верстка, как и код, дорабатывается, меняется, усовершенствуется с ростом любого более-менее развивающегося проекта.
Может я сейчас глупость напишу, но... по мне так одной подстановки переменных и BEGIN, END - вполне достаточно... Циклы и условия в основной программе. Что мешает пропарсить блок между BEGIN и END несколько раз в цикле, подставляя разные значения? Ну либо парсить или не парсить определённый блок между какими-то BEGIN и END в зависимости от каких-то условий...
sobachnik, ну я так и сказал. Обсуждение было о том, что 440Hz предлагал вообще отказаться от любых блоков.