Недавий спор с одним знакомым толкнул меня на создание этого топика. Вопрос обычный - как вы считаете, что лучше? На данный момент я знаю 4 следующих вида. 1. Вообще без шаблонизаторов. Вставка PHP-кода в чистый html. На мой взгляд это лучшее. Самый быстрый вариант из всех. Функционал такого подхода и прост в использовании и широк по возможностям. Для того же альтернативного синтаксиса есть самый нужный функционал - короткое отображение переменных и функций - "<?=$var?>" за место "<?php print $var; ?>" и основные конструкции с помощью которых можно осуществить наверное всё что в голову взбредёт (по крайней мере я пока не встречал задач для шаблонов которые не возможно сделать с помощью альтернативного синтаксиса) - if, for, foreach и while. При этом в шаблоне всё отлично воспринимается визуально если в используемом редакторе имеется подсветка кода. Тогда можно чётко видеть где у вас PHP, а где HTML. 2. Использование отдельных шаблонизаторов. Это Smarty и шаблонизаторы которые встроены во многие CMS. Такой вариант, как мне кажется, хорош только на первый взгляд. Да, есть некоторые удобства у таких отдельных решений но минусов достаточно много - нужно при каждом новом шаблонизаторе учить его синтаксис, редакторов с подсветками кода для конкретных шаблонизаторов нет, приложение тратит время на парсинг текста шаблона. Плюс временные и ресурсные затраты внутренних механизмов шаблонизатора относящиеся не только к парсингу и выводу. Я думаю что это выбор проектов у которых нет столько функционала что бы шаблонизатор начал отжирать огромное кол-во ресурсов. Например depositfiles работает на Smarty. 3. Использование XML+XSLT в качестве шаблонизатора. Имею в виду не выдачу клиенту этого кода (та же опера не поддерживает XML+XSLT), а обработку его на стороне сервера и выдачу клиенту чистого HTML. Главная проблема - время затраченное на парсинг. С остальным всё нормально - есть и редакторы с подсветкой, и функции типа if и циклов в XSLT. Да и это стандартизированная вещь в отличие от всего остального. Между прочим единственный официально признанный организацией W3C вид шаблонизации Конечно у нас пока к этому относятся отрицательно говоря что время данной связки уже прошло, хотя зарубежные продукты во всю её используют. Хорошие примеры - IPB и vBulletin. 4. Этот вариант я даже не знаю как назвать. Что-то типа шаблонизации по кускам. Смысл следующий. Шаблон разбивается на несколько частей (в основном используют массив) и в коде приложения по мере надобности загружается шаблон и из его кусков составляется общий вид. Вещь очень редкая поэтому приведу небольшой пример. При отображении таблицы с несколькими строками в шаблон помещают отдельными кусками верх и низ таблицы и код одной строки. А уже в коде приложения загружают сначала верх, потом сколько нужно раз шаблон строки и в конце низ. Главный плюс здесь - полное отделение бизнес-логики от кода шаблона. В отличие от всех предыдущих вариантов все циклы, условия и т.д. выполняются в коде. В шаблоне лишь лежит html-код порезаный на куски. Пример такой шаблонизации можно посмотреть в UMI.CMS. А как думаете вы? Ответ прошу аргументировать.
Кузьмич, задай себе вопрос - какова цель шаблонизации? Придумал ответ? А ответ то очень прост - разделение представления и функциональности... Как думаешь, когда ты херачишь ПХП вместе с хтмл - разделение есть? Удобно потом будет человеку, который не делал разметку страницы, но которому нужно будет изменить функциональность лазить на N-ному числу страниц и вникать что это за код, откуда и что он берёт? Так что пункт 1 отпадает сразу, если ты, конечно, не пишешь страничку аля "Вася Пупкин". XML+XSLT - это хороший вариант, трудоёмкий в понимании и реализации, но если ты его освоил - он тебя не подведёт. Насчёт скорости парснига - да забейте на это, в наше время подстановка чего-либо в шаблон это не настолько трудоёмкая задача для сервера. Учитесь лучше писать грамотный код и кешировать вывод в нужных местах. 4-ый вариант вообще бред, не пойму, что ты этим хочешь сказать, в UMI.CMS не так сделан шаблонизатор. И теперь наступает судьбоносный момент (звук фанфар, барабанная дробь) - готовые шаблонизаторы... Та-да-да! На кой байт изобретать колесо, если оно уже есть? Скажем в составе твоего фреймворка? Или в составе твоей ЦМС... Ты что будешь к этому писать свой шаблонизатор? Это раз... Ни один шаблонизатор ещё не изобрёл ничего такого, чего бы не было в другом, ни в плане функциональности, ни в плане синтаксиса. Или ты считаешь что выучить менее десятка управляющих конструкций, и чуть более десятка функций - это непомерная задача для программиста? Ты говоришь о минусах в готовых шаблонизаторах, о тормозах и т.д. Ты это видел на практике? Или это надуманно говоришь в силу того, что тебе сложно это освоить? Так вот, любой шаблонизатор поддерживает кеширование, очень гибкую работу с результатом шаблонизации, неимоверные возможности в плане расширения функциональности шаблонизатора - плагины, свои функции, свои конструкции и т.д. Где минусы? Моё мнение - имхо, лучше чем смарти, для какого-нибудь стартапа, который делаешь ты ничего никто никогда не создавал. Это мнение не только моё. Если тебе по долгу службы пришлось столкнуться уже с готовым шаблонизатором (скажем в ЦМС какой-нибудь) так вот с ним и работай. Если ты работаешь с каким-нибудь Wordpress где нет шаблонизатора, а темплейты представляют из себя месиво PHP + HTML, то работай с этим месивом... Умей комбинировать знания и опыт, не изобретать колёса, грамотно разобраться в узких местах проекта...
Когда человек рассуждает на тему "сымый быстрый", то вместо ответа на свой вопрос он хочет услышать "дада, тот вариант, который ты назвал самым быстрым - самый лучший".
groundhog, мнение понятно. Я в принципе так и поступаю. Раньше был ярым приверженцем Smarty, но как столкнулся с HTML+PHP начал немного всё переосмысливать. Мне кажется что тут разницы то фактической нет. Или ты пишешь Code: {foreach from=$articles item=article} <p>$article</p> {/foreach} или Code: <?foreach($articles as $artice):?> <p><?=$article;?></p> <?endforeach;?> Разумеется я не имел в виду код типа Code: <div ....> <p> <?php php-code....... ?> </p> </div>
Вот... Ты умеешь понять необходимость использования той или иной технологии в разработке... Но есть и задачи, которые лучше будут смотреться на шаблонизаторе недели чем в кусках PHP-кода...
Слова, достойные мембера группы "Резервисты Античата"... Печально... Даже если это в шутку сказано, очень печально, что ты опустился до этого... Раз уж на то пошло, тогда и С++ всего лишь шаблонизатор, а то, что придумали идеологию ресурсов - это всё ***ня... Куда проще хуярить CreateWindow в коде, чем разделить логику и представление...
имхо я пока не юзал нечего кроме хтемплате.. конкретно он меня не устраивает так как в нем нет возможности юзать такие конструкции PHP: {foreach from=$articles item=article} <p>$article</p> {/foreach} скоро начну писать свой шаблонизатор (просто ради практики.. делать мне нечего).. суть такая.. на входе имеем шаблон вида (как выше) после обработки получаем шаблон вида PHP: foreach($articles as $artice) { echo '<p>'.$article.'</p>'; } сохраняем результат в другой файл и далее подключаем его вместо оригинального шаблона и все.. получается удобный синтаксис для написания шаблонов и 0 потеря производительности по сравнению с чистым пхп
Я что-то не уловил разницы между 2-м и четвертым видомом. Не знаю как там в Smarty, но в шаблонизаторе Джанго, к примеру, можно и то и другое делать. Кстати: любой нормальный шаблонизатор должен отделять бизнес-логику в коде веб-приложения от логики представления в коде шаблона. Шаблониазаторы нужны прежде всего для ускорения процесса разработки и сопровождения кода, если вам в этом плане они не помагают - так и не пользуйтесь ими (как nerezus). Так же, я бы выделил еще один вид шаблонизаторов (например, breve), позволяющих избавиться от необходимости писать html-код вообще.
Нет. Его нельзя встроить в текстовый файл так, чтобы вставки его исполнялись. Я предлагаю использовать MVC. Да, необходим шаблонизатор. В качестве шаблонизатора я юзаю PHP. И могу объяснить почему. В скайпе. И ты согласишься со мной, т.к. я разобью твои доводы. Велкам ту скайп? Только не надо путать мешанину типа PHP: foreach($articles as $artice) { echo '<p>'.$article.'</p>'; } и шаблон типа: PHP: <? foreach ($articles as $article): ?> <?=$article?> <?endforeach?> А работу на публику типа "печально" можно говорить лишь тогда, когда знаешь не только свою точку зрения, но и понимаешь то, что говорит тебе в споре опонент. Иначе будет не круто =)
Еще один. Пользуюсь я ими, пользуюсь. Пользовался тремя(Smarty, PHP, XSLT), больше всего понравился PHP. И никакой логики приложения в шаблонах НЕТУ. Только логика отображения.
Мне кажется что nerezus прав, он ведь не пишет в шаблоне коды большие на пыхе, а ток переменные и конструкции, и тут есть много плюсов: 1.можно использовать весь пхп, все его функции, а не только что предусмотрели разработчики шаблонизатора 2.более безопасно, так как в шаблонизаторе могут быть дыры, а ты о них даже знать не будешь ну и 3 это легкость восприятия, каждый поймет этот шаблон, ему не надо будет учить синтаксис шаблонизатора
Директивы препроцессора. Насчёт скайпа - времени нету переливать из пустого в порожнее, PHP-код, есть PHP-код, шаблонизатор - механизм абстракции над PHP-кодом. PHP-не может быть абстракцией над самим собой, следовательно называть его шаблонизатором некорректно. То, что ты называешь шаблонизатором есть "вставки PHP-кода в страницу". И кстати: PHP: foreach($articles as $artice) { echo '<p>'.$article.'</p>'; } и PHP: <? foreach ($articles as $article): ?> <?=$article?> <?endforeach?> суть одно и то же - код на языке PHP. Если опонент путается в элементарнейших терминах, называет например жопу сиськами (только потому что она тоже округлой формы, бугорками и за неё можно подержаться), при этом несёт полную чушь и даже не пытается рассмотреть чужую точку зрения - считаю дальнейшую дискуссию пустой тратой времени. Ты для меня ничего нового не откроешь ни в плане знаний о PHP, ни в плане притянутых за уши "открытий".
Ой, шаблонизаторы бывают только в пхп? А я то и не знал. P.S. Тебя снова наебали. P.P.S. Посмотри в википедии определение. Только во втором случае PHP используется в качестве шаблонизатора. Хех, жаль. А то бы я прочитал тебе лекцию о шаблонизаторах или пользе той же википедии.
Нер, ты как дитё, которое до хера глупостей сказало, и чтобы перед другими детьми не потерять авторитет начинает пороть чушь, и чем дальше это заходит, тем большую чушь ты начинаешь пороть. Я что сказал что они только в пхп бывают? Мы просто СЕЙЧАС говорим о php. И поверь, пока ты путаешься в терминах и их осмыслении, тебе рано лекции читать, ну разве только в школе в классах 7-8 (и мне кажется что у тебя такой опыт был), именно там такой уровень знаний.
Имея не большой опыт написания сайтиков скажу. шаблоны нужны НЕ на пхп по 3-м причинам неудобно тем же верстальщикам (думайте о других) небезопастно (ведь используется парсер пхп, а следовательно можно получить уязвимостей и пополнить библиотеку эксплойтов) неуниверсально (а если проект переедет на ASP или Perl) итого использовать пхп шаблончики только для мини-проектов(как кто-то говорил выше). вот вопрос в скорости.... например vkontakte какой принцип используют? ведь там производительность очень важный фактор!
Почему? Чем <? хуже, чем {? Ответь на этот вопрос. Моему верстальщику пофигу на эту разницу. Верстальщик не делает шаблоны вида eval(@$_GET['xaka']). Чем небезопасней? В смарти тоже можно какашку вставить. и? Зачем?