![]() |
Виды шаблонизации
Недавий спор с одним знакомым толкнул меня на создание этого топика. Вопрос обычный - как вы считаете, что лучше? На данный момент я знаю 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, то работай с этим месивом... Умей комбинировать знания и опыт, не изобретать колёса, грамотно разобраться в узких местах проекта... |
Когда человек рассуждает на тему "сымый быстрый", то вместо ответа на свой вопрос он хочет услышать "дада, тот вариант, который ты назвал самым быстрым - самый лучший".
|
Ах да, чуть не забыл, мое мнение.
ИМХО PHP - лучший шаблонизатор. |
groundhog, мнение понятно. Я в принципе так и поступаю. Раньше был ярым приверженцем Smarty, но как столкнулся с HTML+PHP начал немного всё переосмысливать. Мне кажется что тут разницы то фактической нет. Или ты пишешь
Код:
{foreach from=$articles item=article}Код:
<?foreach($articles as $artice):?>Код:
<div ....> |
Вот... Ты умеешь понять необходимость использования той или иной технологии в разработке... Но есть и задачи, которые лучше будут смотреться на шаблонизаторе недели чем в кусках PHP-кода...
|
однозначно PHP и никто не докажет обратное..
|
Иногда проще спорить с голодным тигром, чем с сытым бараном...
|
Цитата:
|
Цитата:
|
имхо я пока не юзал нечего кроме хтемплате.. конкретно он меня не устраивает так как в нем нет возможности юзать такие конструкции
PHP код:
PHP код:
|
Я что-то не уловил разницы между 2-м и четвертым видомом. Не знаю как там в Smarty, но в шаблонизаторе Джанго, к примеру, можно и то и другое делать.
Кстати: любой нормальный шаблонизатор должен отделять бизнес-логику в коде веб-приложения от логики представления в коде шаблона. Шаблониазаторы нужны прежде всего для ускорения процесса разработки и сопровождения кода, если вам в этом плане они не помагают - так и не пользуйтесь ими (как nerezus). Так же, я бы выделил еще один вид шаблонизаторов (например, breve), позволяющих избавиться от необходимости писать html-код вообще. |
Цитата:
Цитата:
Да, необходим шаблонизатор. В качестве шаблонизатора я юзаю PHP. И могу объяснить почему. В скайпе. И ты согласишься со мной, т.к. я разобью твои доводы. Велкам ту скайп? Только не надо путать мешанину типа PHP код:
PHP код:
|
Цитата:
Пользуюсь я ими, пользуюсь. Пользовался тремя(Smarty, PHP, XSLT), больше всего понравился PHP. И никакой логики приложения в шаблонах НЕТУ. Только логика отображения. |
Мне кажется что nerezus прав, он ведь не пишет в шаблоне коды большие на пыхе, а ток переменные и конструкции, и тут есть много плюсов:
1.можно использовать весь пхп, все его функции, а не только что предусмотрели разработчики шаблонизатора 2.более безопасно, так как в шаблонизаторе могут быть дыры, а ты о них даже знать не будешь ну и 3 это легкость восприятия, каждый поймет этот шаблон, ему не надо будет учить синтаксис шаблонизатора |
Цитата:
Насчёт скайпа - времени нету переливать из пустого в порожнее, PHP-код, есть PHP-код, шаблонизатор - механизм абстракции над PHP-кодом. PHP-не может быть абстракцией над самим собой, следовательно называть его шаблонизатором некорректно. То, что ты называешь шаблонизатором есть "вставки PHP-кода в страницу". И кстати: PHP код:
PHP код:
Цитата:
|
Цитата:
P.S. Тебя снова наебали. P.P.S. Посмотри в википедии определение. Цитата:
Цитата:
|
Нер, ты как дитё, которое до хера глупостей сказало, и чтобы перед другими детьми не потерять авторитет начинает пороть чушь, и чем дальше это заходит, тем большую чушь ты начинаешь пороть. Я что сказал что они только в пхп бывают? Мы просто СЕЙЧАС говорим о php. И поверь, пока ты путаешься в терминах и их осмыслении, тебе рано лекции читать, ну разве только в школе в классах 7-8 (и мне кажется что у тебя такой опыт был), именно там такой уровень знаний.
|
Имея не большой опыт написания сайтиков скажу.
шаблоны нужны НЕ на пхп по 3-м причинам неудобно тем же верстальщикам (думайте о других) небезопастно (ведь используется парсер пхп, а следовательно можно получить уязвимостей и пополнить библиотеку эксплойтов) неуниверсально (а если проект переедет на ASP или Perl) итого использовать пхп шаблончики только для мини-проектов(как кто-то говорил выше). вот вопрос в скорости.... например vkontakte какой принцип используют? ведь там производительность очень важный фактор! |
Цитата:
Чем <? хуже, чем {? Ответь на этот вопрос. Моему верстальщику пофигу на эту разницу. Цитата:
Цитата:
|
Цитата:
|
Цитата:
Цитата:
-- - - - - но основная проблема проблема в безопастности. nerezus, ты чегото пытаешься обламать всех. Да, может ты имеешь много опыта и т.д. НО опытные люди тоже ошибаются (дороже других эти ошибки), а еще чаше когда зазнаются и леняться и неприслушиваются к другим, посмотри сколько крупных проектов были подержаны атакам. Тебя кто то обидел?) что ты такой агресивный?) тебя не заставляют и не навязывают, просто рассматриваем + и - |
Цитата:
Разница лишь в синтаксисе. |
Вам всё равно не переспорить Нерезуса, я уже говорил про сытого тигра... Нерезус похоже ещё не наелся...
З.Ы. Я тя обожаю, Нер. |
nerezus, аргументируй пожалуйста свой ответ. И я, и groundhog описали почему мы считаем именно так.
По теме. Мне кажется что здесь всё сводится к тому для каких целей всё это нужно. В принципе любой спор на тему программирования к этому и идёт - не что лучше, а что под какие задачи лучше =). Я думаю что первый вариант возможен для небольших проектиков т.к. если брать шаблоны с множеством вставок то на них смотреть просто нереально. Хотя с другой стороны, разбив эту "нереальность" на множество маленьких шаблонов, можно получить неплохой вариант. Тогда получается что готовые шаблонизаторы и XSLT нужно использовать в больших проектах. Я прав? Кстати давно читал про XSLT что при большом кол-ве шаблонов трудно в них разбираться и можно быстро запутаться. Никто с такой ситуацией не сталкивался? |
Я вообще считаю, что нормальный шаблонизатор это полное отделение программного кода от html. Поэтому очень давно юзаю шаблонизатор такого рода: tpl файл основного каркаса и множество tpl-файлов составляющих отдельные куски (менюшки всякие, таблицы, и т.д.). Далее небольшой класс шаблонизатора и весь php код заменяется на указанные теги ({TAG}) в шаблоне. Всё имхо до ужаса просто и удобно, что в общем делает его универсальным.
|
Итак, для начала разберемся в понятии шаблонизатор.
Читаем определение: http://en.wikipedia.org/wiki/Template_processor Перевод для двоечников: Шаблонизатор - программа(либо часть программы), предназначенная для объединения шаблоов с данными, в результате которого получаются целевые документы. Итак, чем пхп не шаблонизатор? В нем даже альтернативный синтаксис есть, который служит для этого дела. А теперь назовите отличия Smarty от PHP в роли шаблонизатора? Итак: вставка в текст, циклы, условия, модификаторы - все есть, причем в ~одинаковое количество кода. Они равны в этом. Минусы по сравнению со Smarty - их нет. Никаких новых ошибок нельзя добавить, возможности те же. Так почему некоторые не считают PHP шаблонизатором - загадка. Причем шаблонизатором уровня Smarty. Цитата:
Цитата:
Смотри: <?=$someVariable?> и {$someVariable}. Разницы нет. Цитата:
P.S. Повторю третий раз: я ЗА шаблонизаторы. В ЛЮБЫХ проектах. Но PHP - тоже шаблонизатор. Уровня Smarty, если хотите сравнение. |
Нер, не знаю, то ли это треш, то ли ты покурил.
В твоём понимании <?php echo 'Hello Word'; ?> это шаблонизатор? Как уже писалось выше, с таким взглядом можно сказать, что любой язык шаблонизатор. А не шаблонизаторами можно назвать ли программы под консоль получается? Тогда скоро темы будут не "Какой язык программирования учить?" а "Какой шаблонизатор поучить?". PHP прежде всего язык программирования. С таким же успехом можно назвать пылесос межпланетным космическим бомбардировщиком. ну это же бред чистой воды |
Нер, пора уже остановиться и не ебсти мозг людям. Чего ты добиваешься? Просто постебаться, так уже пора остановиться. Отстоять свою неверную точку зрения? Ты всё равно это не сможешь.
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Вот asp и jsp кстати тоже под шаблонизатор подходят. Цитата:
Цитата:
Ну блин, хочешь я тебе Smarty-style интерфейс дам? Цитата:
Цитата:
Цитата:
Когда мы его используем шаблонизатор, то мы не смешиваем логику и отображение. Мы используем его только для отображения. Когда мы его используем шаблонизатор, то мы не смешиваем логику и отображение. Мы используем его только для отображения. Когда мы его используем шаблонизатор, то мы не смешиваем логику и отображение. Мы используем его только для отображения. Вот. Цитата:
P.S. Посмотри Zend Framework View. О да, Zend Framework писали нубы, у них же шаблоны на PHP. P.P.S. О, что уж говорить о Symfony - как это самые крутые фреймворки, да нубами написаны. Тоже шаблоны на PHP. Совсем идиоты, ога ога. |
No comments... Весь инет написан на шаблонизаторе... Пойду набухаюсь...
|
Цитата:
|
PHP - это шаблонизатор. PHP - это шаблонизатор. PHP - это шаблонизатор. PHP - это шаблонизатор. PHP - это шаблонизатор. PHP - это шаблонизатор. Я тупой. Я тупой. Я тупой. Я тупой. Я тупой. Я тупой. Я тупой. Я тупой. Я тупой. Я тупой.
|
Цитата:
PHP может быть как ЯП, так и шаблонизатором. |
Цитата:
Цитата:
Цитата:
Ну к примеру другой код: PHP код:
Или приведи пример твоего понимания что "php это шаблонизатор"....простейший пример, в пару строк.. |
PHP код:
PHP код:
согласен это не верх эстетики.. но я считаю что такой вариант достоин жизни. Да и вообще шаблонизация ет дело вкуса, один может тащится от смарти второй свято верит в то что чистый пых это самое лучшее =) |
Цитата:
Тот код что ты привёл, это чистый php-код и никакой шаблонизации я тут не вижу. Цитата:
Цитата:
В этом посте: Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Другие ЯП нельзя юзать(за редким исключением) из-за особенности синтаксиса. |
кто ломал xoops тот знает, что шаблоны не на пхп залог безопастности.
еслиб там были пхп шаблоны залить шел несостовляло бы труда!!! так, что уважаемые гуру, вот вам пример положительной стороны не ПХП шаблонов. или Вы считаете что xoops пишут лохи? - - - таким образом, если в модуле к движку нашли иньекцию, шелл не залить! |
Цитата:
|
| Время: 23:43 |