#php #шаблонизаторы
Надеюсь, что не подниму сейчас холивар) В общем-то всегда удивлялся фанатам шаблонизаторов и хочется послушать аргументы в их пользу. Не понимаю, какой смысл в написании псевдокода на псевдоязыке, который либо компилируется, либо (омфг) транслируется во время запроса к странице, который к тому же реально сложнее для восприятия. Скомпилированный код того же smarty, по сравнению с нативным шаблоном, захламлен чем-то явно лишним, сам код намного менее гибок, чем php, малопонятные конструкции циклов, пляски с бубном на банальном разделении контента в 3 столбика, etc etc... Но при этом даже здесь от "старожилов" и явно не глупых людей слышу постоянно "используйте шаблонизаторы типа Смарти". Итак, вопрос: а, собственно, зачем? ЗЫ: Я не против шаблонизаторов в принципе(только извращений типа псевдокода с "компиляцией"). То, с чем я работаю, работает по такому принипу (минимальный код): function assignTemplate($file, $tmpl, $params = array()) { ob_start(); if (!is_file($file)) { echo 'No file'; } elseif(!is_file($tmpl)) { echo 'No template'; } else { require $file ; ob_end_clean(); ob_start(); require $tmpl ; } $result = ob_get_contents(); ob_end_clean(); return $result; }
Ответы
Ответ 1
Суть шаблонов, - абстрагировать верстку от кода на PHP, облегчить верстальщикам (а не программистам) работу. По чему не стоит писать свой шаблон координально синтаксически отличающийся от сматри и иже с ним? Дело в том, что верстальщику легче привыкнуть к одному языку шаблонов (или использовать его подмножество), чем под каждый проект изучать свой (особенно если он на жизнь зарабатывает фрилансом). Мощные шаблонизаторы по типу смарти, благополучно транслируют свой код в пхп и кэшируют его (поэтому замедление будет заметно только при трансляции нового шаблона в код, дальше все будет работать из кэша). Да, он не читаемый, но он и не должен быть читаем человеком, для человека есть текст шаблона, который он должен изменять. P.S. Могу поспорить каждый писал свой шаблонизатор, еще и потому что это легче чем изучать чужой и пользоваться им (прошу не обижаться, я сам такой :) ).Ответ 2
Если честно, я работаю со своим шаблонизатором, который знает только блоки (содержат что угодно и могут дублироваться) и метки (заменяются значением). Мне это удобно потому, что для исправления шаблона мне не надо копаться в php-коде, верстка шаблонов действительно похожа на верстку, а не программирование, да и верстальщику, ничего не понимающему в php, будет легче ориентироваться. Поклонников Смарти я тоже не понимаю - код страшен как смерть, да и далеких от программирования людей к нему лучше не подпускать. Весь функционал Смарти легко укладывается в обычный php, без надобности извращаться с псевдоязыком.Ответ 3
Шаблоны предназначены для: 1. разделения логики и представления; 2. упрощения написания и последующего чтения кода. Шаблон — это domain-specific language. Smarty, в этом плане, это не особо интересен — разницы между «» и «{{ if $foo }}» не очень много, хотя она есть — и не только синтаксическая. Посмотрите, например, на Jade (реализация для PHP) — это более интересный и наглядный пример, как DSL упрощает жизнь.Ответ 4
Мне очень полюбился процессор XSLT. Работает быстро, без нареканий, кое-где есть тонкости, но уж очень подкупает своей простотой. Кроме того, использование дополнительной обработки результатов именно в шаблоне тоже удобная "фича". Под-шаблоны и т.п. мелочи, которые делают все немного приятнее. Кроме того, легко можно привинтить ко многим интерпретаторам, лично я работал с ним на PHP и VB. Думаю, что и к фрейм-воркам легко его можно прикрутить, одной функцией в десять строк он встраивается в Codeigniter. Не претендую на панацею, но как вариант, возможно кому-то тоже приглянется.Ответ 5
Только программист пишет, например, на php, а верстальщик на языке шаблонов. Ну и зачем два языка, если PHP сам по себе шаблонизатор? В чем преимущество {$msg} над <?=$msg?>? Как ни крути, а некие скриплеты втыкать надо. Мне очень полюбился процессор XSLT. Работает быстро, без нареканий, кое-где есть тонкости. Тонкость одна: ему надо скармливать XML. То есть делать разметку, которую XSLT превратит в другую разметку.
Комментариев нет:
Отправить комментарий