Споры о шаблонизаторах: троллинг или умные мысли?

PHP*
причины родились в том, что в топах посвященных обзорам конкретных шаблонизаторов спорят на обобщенную тему:
Обзор шаблонизатора Quicky: Производительность и Гибкость.
MACRO — гибкий PHP шаблонизатор, с человеческим «лицом»
раследование проведено на основе данных, полученных в топе:
HolyWar: Шаблонизаторы. Нужны ли они? состоятельны ли они? Форум.
результаты расследования под катом

сначала результаты голосования:
HolyWar: Шаблонизаторы. Нужны ли они?
48,67% (128) я за использование шаблонизаторов и меня устраивает тот, которым я пользуюсь.
13,31% (35) я за использование шаблонизаторов, но меня не устраивает тот, которым я пользуюсь.
11,79% (31) я не пользуюсь шаблонизаторами, потому что нет «нормальных».
26,24% (69) я против использования шаблонизаторов вообще.
Проголосовало 263 человека. Воздержался 57 человек.

TOP 5 причин для споров на тему шаблонизаторов вообще:


1. Основой споров на тему нужны ли шаблонизаторы в подавляющем большинстве случаев лежит логическая ошибка, что «нужно разделять логику и вывод». Это утверждение не имеет отношения к теме шаблонизаторов и вообще разработчиками крупных проектов считается ошибочным.
Правильное утверждение таково:
Нужно разделить бизнес-логику и логику представления

Зачем это нужно? затем чтоб разделить разработку на части, чтоб локализовать ответственность и уменьшить трудозатраты на изменение одной из компонент.
Сделать это можно как с использованием шаблонизаторов, так и без их использования.
вот пример задачи логики представления: #
в этом вопросе обычно спорят самоучки у которых нет существенного опыта работы в больших проектах и люди которые сделали несколько крупных решений.

2. Второй популярный вопрос для следующей волны споров кроется в обсасывании такого утверждения:
квики и смартиобразные шаблонизаторы не запрещают смешивать бизнес-логику и логику представления, хотя препятствуют этому смешанию.#
тут чаще всего спорят на тему: а зачем же тогда эти шаблонизаторы, если они не запрещают этого разделения.
в этих спорах выходят на сцену сторонники блочных шаблонов и XSLT.

3. Приятно посмотреть как люди начинают усердно спорить на тему синтаксиса. Кому-то нравится смартиообразный синтаксис, кому-то PHP-native, кто-то полюбил блитз, особнячком, не принимающим участие в спорах, стоят сторонники XSLT.

4. Дальше происходит нечто удивительное и люди (как и самоучки-новички, так и профи) начинают спорить на тему скорости, удивительность состоит в том что при ближайшем рассмотрении большинству спорящих эта скорость оказывается не важна: у новичков и самоучек нет таких нагрузок, а у те люди, у корых есть эти нагрузки в большинстве случаев имеют узкие места вовсе не в шаблонизаторе. Как правило в таких спорах остаются 2-3 профи, которые имеют реальную заинтересованность в этом вопросе и неимоверное количество тех, кто хочет высказаться. Сторонники XSLT тут не спорят они верят в то, что скоро будут сделаны более быстрые библиотеки, и я почему-то верю вместе с ними, только не в слово «скоро».

5. также достаточно интересная причина споров — утверждение, что PHP —это и есть язык шаблонов Очень прикольный такой объектно-ориентированный язык-шаблонизатор с работой с сокетами и разделяемой памятью. Как правило сторонники такого утверждения знакомы с PHP на уровне PHP/FI, а человека, написавшего if ($obj instanceof Class) готовы отправить в психушку со словами: «это что за хрень?»

TOP 5 причин для споров на тему выбора шаблонизатора:


1. Стандартизированность и распространенность синтаксиса
2. Скорость!
3. Сложность внутреннего кода (удивительно, но спорят опять в основном те, кто ничего еще не дописывали полезного даже в смарти)
4. Сырость/поддержка
5. возможности (это мало кого интересует на самом деле)

Статьи по теме:
brodyaga.habrahabr.ru/blog/30767/

За сим я для себя тему эту закрываю и обещаю более не отягощать общественность хабрахабра спорами на тему шаблонизаторов, но на последок призываю всех холиварщиков отправлять по этой теме сюда HolyWar: Шаблонизаторы. Нужны ли они? состоятельны ли они? Форум.
+42
27 ноября 2008, 16:18
30
developer 15,4

комментарии (76)

+6
IntenT #
Как сторонник XSLT, стою в сторонке и не вмешиваюсь ))
0
pietrovich #
сторонник php_templates / blitz стоит в сторонке и курит. в его голове крутится мысль о том, что главное чтобы разработчику было удобно и проект работал как положено, а blitz он использует или смарти не так уж и важно :)
+3
ayavryk #
Как сторонник XSLT, я бы внес поправку в фразу «Сторонники XSLT тут не спорят они верят в то, что....»
Она должна звучать так:

Сторонники XSLT тут не спорят — они верят.


+1
irh #
… в производительность XSLT.
Потому что разделение логики с отображением — подразумевается. А чистота и ясность — прилагаются.
–3
ayavryk #
Низкий вы человек.

Производительность в шесть дырок вам на трех вокзалах любая блядь обеспечит за бутылку. Но нам же не это нужно. Мы к красоте стремимся. Она спасет мир. А не производительность, блин.
+4
ayavryk #
Ну вот обидел кого то. Здесь честное слово не хотел.

Я верю в то, что красота спасет мир. А XSLT — концептуально красиво.

При этом я понимаю реальные проблемы и вынужден использовать странные php-конструкции str_replace или тупое echo. Или не к ночи будет помянуто .NET Но это не красиво тупо и пошло как вокзальные девушки.
+1
Bygaga #
2) Как стороник XSLT, XSLT максимально позволяет выполнить требование:

Нужно разделить бизнес-логику и логику представления

Так как, ему даже не важно на чом написали бизнес-логику Будь-то PHP, ASP или любой другой язык…
+1
ibnteo #
Подвиньтесь, стану рядом :)
А то народу много, а сторонка маленькая.
+1
Zimyand #
Ну достаточно не маленькая) Нас уже вон сколько)
0
rumkin #
Присоединяюсь. XSLT — наше всё!
0
ionicman #
Как практикующий сторонник XSLT сказал бы, но воздержусь ибо сторонка вроде не вмешивается… она просто стоит и работает ;)
0
developer #
по XSLT вы бы собрались да с примерами все рассказали б в виде статьи
0
ionicman #
Я бы, с удовольствием, но, к сожелению, здесь опубликовать не могу из-за кармы — люблю поспорить ;)

Может быть я какнидь опубликую статейку в блоге и выложу сюда ссылку, я думаю кол-во приверженцев возрастет в разы :)

Вообще XSLT обаладет инетересной чертой — стоит пглядеть на него — как какжется что он какой-то «угловатый» и ограниченный, но стоит его попробовать на реальном проекте, попробывать всю мощь XPath и осей — как бесконечно в него влюбляешься. Есть у него главная черта, которой очень мало в других языках ( не в обиду будет никому сказано ) — это его лаконичность.
Вот люблю я лаконичные языки вроде регспов и xslt, хотя иногда конечно эта лаконичность заставляет понапрягать мозг — ну дак так даже интереснее, тем более что всеж таки большинство шаттных проблем решаются вполне без напрягов, да и большинство шаблонизаторов поддерживают вызов процедур внешнего языка, если уж вообще никак.
0
developer #
+ в карму так сказать авансом.
0
ionicman #
Благодарствую
0
Zimyand #
Есть отличный ресурс www.zvon.org/xxl/XSLTutorial/Output/
А вот отличный перевод www.raleigh.ru/XML/XSLTutorial/contents.htm
Зачем копипаст?
Хотя если кого-то интересует могу про основы написать.
0
ayavryk #
Примеры были на хабре.
Например: habrahabr.ru/blogs/webdev/22236/#habracut
Есть еще вот это: www.erum.ru/article/18
0
kibizoidus #
В Споре рождается истина. Зря тему закрыли ^_^
0
hrumcraft #
В Споре — действительно рождается.
А вот во флейме — нет.
0
vat #
я б перефразировал:
в разсуждении роздаится истина. спор и разсуждение(дискуссия etc) это немного разные вещи.
0
MikhailEdoshin #
Хорошо пишете :) А вы бы где провели границу между языком шаблонов и языком, я не знаю, общей направленности?
+2
zencd #
по 5-му пункту вы высказались весьма безосновательно
много резких слов, и ни одного факта
0
zencd #
«Как правило сторонники такого утверждения…» за факт не считаю, а наличие ООП, хоть и факт, не есть аргумент против шаблонизаторности.
0
developer #
это и есть причина споров. хотите отстоять свою точку зрения вам по последней ссылке. И я не говорю что те или иные плохие, я говорю: «как правило», то бишь подавляющее большинство
0
develop7 #
Как правило сторонники такого утверждения знакомы с PHP на уровне PHP/FI, а человека, написавшего if ($obj instanceof Class) готовы отправить в психушку со словами: «это что за хрень?»
По-моему, вы передёргиваете.
0
wayly #
По-моему, очень даже передергивает ;)
Я так понимаю, упрек на тему «шаблонизатора» — это в мою сторону камешек. Только человек не привел ответ — как был PHP шаблонизатором — так и оставил в себе все функции «шаблонизатора». Ибо встраивается в HTML и позволяет в себя «встраивать».
0
develop7 #
как был PHP шаблонизатором — так и оставил в себе все функции «шаблонизатора»
Именно. И это (встроенный шаблонизатор) — едва ли не единственное его преимущество перед конкурирующими языками. Недаром функционал шаблонизатора в PHP жив и здравствует поныне. И выбрасывать его за ненадобностью никто не собирается. Потому что в качестве general purpose языка PHP, мягко говоря, не ахти.
+2
valeraorg #
Чесно говоря не вижу проблем никаких. Лично я использую symfony и нативные шаблоны. У меня полное управление кешированием и все что мне нужно. Верстальщик разобрался с шаблонным синтаксисом за пару минут.
0
developer #
вы наверное не поняли: тут изложены причины споров, а вот отстаивать свою точку зрения я предлагаю вам тут: HolyWar: Шаблонизаторы. Нужны ли они? состоятельны ли они? Форум.

Цель всего этого показать, что люди всегда спорят, минусуют, вместо того чтоб просто оценить инструментарий в контексте ЕГО использования.
0
develop7 #
А у меня на предыдущем месте выбрали symfony + sfSmartyView. Верстальщик ммм… проявил осторожность, в общем. Как результат, количество костылей, привнеcённых в проект благодаря выбору Smarty, не поддаётся даже приблизительному исчислению (проект большой). Начать, хотя бы с того, что Smarty не умеет (не умел?) работать со вложенными объектами (а конкретно — {$product->getOrder()->getUser()->getFirstName()} срубало парсер Smarty уже на втором шаге цепочки). Как результат — вместо того, чтобы передавать в шаблон $product, приходилось передавать $product, $order, $user.
Как-то так.
0
developer #
вот вы в топике HolyWar: Шаблонизаторы. Нужны ли они? состоятельны ли они? Форум. задайте вопрос — я вам отвечу как решать эти проблемы.
0
develop7 #
0
cccc #
Между прочим, цепочки вызовов методов не есть хорошо в отображении. Как решение, лучше будет создать класс например productOrder и добавить туда необходимые для отображения методы: {$productOrder->getUserFirstName()}
+2
DYPA #
из mzz
* Smarty_Compiler.class.php:
метод Smarty_Compiler::_parse_attrs(), строки 1577-1579:
if (i18n::isName($trimmed = trim($token, '"'))) {
$token = '"'. smarty_prefilter_i18n('{'. $trimmed. '}', $smarty). '"';
}

строки 163-164:
$this->_obj_start_regexp = '(?:'. $this->_dvar_regexp. '(?:'. $this->_obj_ext_regexp. ')+)';
$this->_obj_call_regexp = '(?:'. $this->_obj_start_regexp. '(?:'. $this->_obj_params_regexp. ')?(?:'. $this->_dvar_math_regexp. '(?:'. $this->_num_const_regexp. '|'. $this->_dvar_math_var_regexp. ')*)?)';
заменены для поддержки вызова метода через другие объекты (*->*->*...) на:
$this->_obj_start_regexp = '(?:'. $this->_dvar_regexp. '(?:'. $this->_obj_ext_regexp. '(?:'.$this->_obj_params_regexp.')?)+)';
$this->_obj_call_regexp = '(?:'. $this->_obj_start_regexp. '(?:'. $this->_dvar_math_regexp. '(?:'. $this->_num_const_regexp .'|'. $this->_dvar_math_var_regexp. ')*)?)';
0
develop7 #
Хм, я так и думал, что изменить нужно пару строк. Надо понимать, это гуглится на раз?
0
DYPA #
вероятно
еще можно смотреть на аналоги:
dwoo.org/download
quicky.keeperweb.com/ru/download
0
developer #
сории сайт квика пока не доступен. Если нужен могу дать. Пишите в личку
+1
developer #
а за что минусуем? я чтоли владелец сайта?
+2
Covex #
А как люди начинают «верить» в XSLT? (я тоже хочу =)
+4
Leeb #
Когда им говорят: «А здесь у нас XSLT.» И вариантов не предлагают.
+1
FB3 #
А я просто начинал работать с XSLT, но не как с шаблонизатором.
А когда дошел до его использования шаблонизатором, очень даже понравилось удобство использования. А когда пришлось и с другими шаблонизаторами разбираться, еще больше понравилось удобство XSLT :) Верить/не верить, я об этом особо не парюсь, потому как в последнее время с ним работать не приходится, поэтому в данный момент он мне интересен просто как язык преобразований, а не как шаблонизатор. Иногда на нем прямо очень красивые решения можно написать, от создания которых получаешь удовольствие.
+1
ayavryk #
>Иногда на нем прямо очень красивые решения можно написать, от создания которых получаешь удовольствие.
Именно. XSLT — это не шаблонизатор. Это намного больше. А Smarty (PHP-native) — ну это Smarty и ничего больше.
–1
korzhik #
Какой прекрасный топик! Автор — спасибо что потратили на это свое время!
НЛО прилетело и опубликовало эту надпись здесь
0
denver #
Вот не таким уж и хорошим, не надо совсем идеализировать :) Так, например, поблочно кэшировать (т.е. занести в строковую переменную) без гемора (eval'а или ob_start) не получится. Да и вседозволенность для шаблонизатора не плюс.
Но так как в XSLT мы пока только верим, то лучше PHP в некоторых случаях (пока) конечно нет. Да и то, если грамотно (по MVC) это делать.
0
AgaFonOff #
Как-то обычно для кусочного блочного кеширования надо echo/print заменить на $block .=…
Вроде без гемора. Не?
0
developer #
не, переписывать все вызовы нада. не автоматизировано
0
denver #
Сам подход — использовать $block .=… — ущербный (и echo/print туда же). Для темплейт (где html кода обычно больше чем управляющих комманд) в php есть альтернативный синтаксис:

<? foreach($records as $record): ?>
<tr>
<td><?=$record['title']?></td>
<td><?=$record['text']?></td>
</tr>
<? endforeach ?>
0
developer #
масло масленное
0
denver #
И к чему эта тавтология?
0
developer #
к тому что <?=$record['text']?> тоже самое что и <? echo $record['text'];?> а то что вы говорите про ущербность означает что вы не понимаете проблематики буферизации вывода
0
denver #
Разумеется оба делают echo. Только такой синтаксис немножно все же отличается от:

foreach($records as $record) {
echo "";
echo "". $record['title']. "".
. "". $record['text']. "";
echo "";
}

Проблемы буферизации те же. Только проблем у верстальщика немного меньше.
И вообще, я с вами спорить не хочу, потому что не вижу о чем :)
0
developer #
я имел ввиду:
>Сам подход — использовать $block .=… — ущербный (и echo/print туда же)
это <?= стольже ущербно.

а спорить действительно неочем -) слава богам, что все больше людей это понимает
0
AmdY #
2 developer, ты бы ещё отделил шаблоны и view, а то смешно сравнивать смарти или Zend_view с кешированием и плагинами и str_replace
+1
developer #
вы не внимательный читатель. я не сравниваю (а что нужно сравнительный анализ сделать технологий и решений?) я рассказываю что на эту тему всегда есть люди, готовые поспорить и привожу топ причин для споров.
+1
AmdY #
Я не предлогал сравнивать, а пытался сказать, что есть одна большая причина спора, то, что не различают шаблонизаторы и view
пришлось писать много текста, но зато есть возможность попиарить своё начинание ;) amdy.su/?p=84
0
developer #
пункт первый это и есть такое утверждение тока другими словами
0
Koc #
А вот как при помощи шаблона вывести дерево ака Nested Sets.?

Желательно, что б не на смарти
0
developer #
вообще многие шаблонизаторы поддерживают рекурсивный инклюд под шаблона. В ZF и Quicky Есть хелперы — функции вывода.
0
PiSaiK #
Ни чего нет лучше Проверено жизненным опытом
–3
mayhem #
не все равно как дом строить? главное же чтобы стоял. все остальное от лукавого… :)
+3
ayavryk #
>не все равно как дом строить? главное же чтобы стоял.
Лучше если стоять будет подольше.
А лучше и дольше стоит у тех кто ведет правильный образ жизни. Следует Стандартам, паттернам проектирования, общим соглашениям, использует готовые решения.
Но если вы склоняетесь к беспорядочному образу жизни стоять будет недолго и плохо.
+2
maxic #
Вы так и не успокоились :)
Результаты голосований некорректны, по многим причинам. О некоторых из них я имхо промолчу.
Я даже спорить не буду. Этап споров по шаблонизаторах (в php) я прошел лет 5 назад. Даже пользовался ими, и даже писал. ;)
Кто как хочет так и заблуждается :)
Я еще раз повторю, верить «этому» голосованию нельзя ;)
0
developer #
нехорошо вы говорите.
С одной стороны говорите свое мнение, а с другой стороны не хотите аргументировать. Вы поймите, что для зрителя этой странички вы всеголиш зеленый квалратик (ну я индус с перьями, например), так вот если делаете утверждение — проявляйте уважение и аргументируйте и не смайлами пожалуйста.

это голосование показывает степень интереса к шаблонизаторам на хабра сообществе и в такойм констексте ИМХО оно верно
+1
CAH4A #
XSLT — магические слова! В них хочется верить!
–1
calg0n #
это мне напоминает холивары windows vs linux и xp vs vista :)
0
Aux #
Такие споры в среде PHP-кодеров возникают из-за того, что большинство спорящих кроме PHP ничего не видели. А PHP-таки ужос и приучает к раздолбайству, если с него начинать и им же заканчивать.
+1
romy4 #
язык ни к чему не приучает. раздолбайство можно найти в любом проекте на любом языке.
0
Aux #
Очень даже приучает. Люди начавшие свой программистский путь с паскаля в большинстве своём пишут более качественный и красивый код чем те, кто начал с PHP+HTML. Люди начавшие с Java и прошедшие через JSTL смотрят на все эти споры как на ссоры в детской песочнице, ибо все враждующие стороны, в большинстве случаев, пишут какой-то тупак.
+2
romy4 #
так правильно, дело не в языке, а в том, что их никто не обучает писать красивый код.

Jav’истов приучает писать красивый код среда разработки, а не сам язык Java. PHP-исты пишущие, например, в Eclipse/ZendStudio тоже будут иметь достаточно красивый код.
НЛО прилетело и опубликовало эту надпись здесь
0
developer #
вот вы очень хорошо сказали, что среда разработки стимулирует писать тот или иной код. Среди пхп программистов многие хвастаются например тем, что пишут в блокноте, ИМХО это недостаток. Недавно Нетбинс (родная IDE Java) анонсировала поддержку PHP не уверен что у них там лучше чем у зенд, но намерен проверить ведь круче чем в NetBeans IDE нигде нет возможностей для рефакторинга.
www.netbeans.org/features/php/index.html
0
jah #
имхо, единственный шаблонизатор, который мне понравился, и который по-моему, не доставляет хлопот дизайнеру, был PHPTal
–1
FanatPHP #
Блять. Опять этот мифический дизайнер. В фотошопе он теги расставляет.
Ты сначала узнай, что такое дизайнер, а потом рассуждай, что ему хлопоты доставляет.
0
developer #
=) улыбнуло. я уж представил просто такой средне статистический высоконагруженный проект, который делают экстраспецы:

первое: Наш проЙЭкт настолько HILoad, что мы реально замарачиваемся и меняем все принты на эхи, и никаких контенинаций!!! не дай бохИ! ведь все нужно через запятую передать в эхи-это жутко принципиально!

второе: интерфейсы для лохов, их запрещено использовать по идеалогическим выскоскоростным идеалам! Вот дайте нам множественное наследование и обязательно оператор goto тогда мы покажем вам супер пупер мега оптимизацию!

третье: нам обязательно нужен Дизайнер и он будет работать с шаблонизатором, но поскольку PHP это язык шаблонов, то мы будем использовать тока PHP-Native. А да так мы еще и получим супер оптимизацию ведь мы не придумываем лишних абстракций!

Задачи кеширования мы будем решать сразу и заранее! то что нет нагрузки не проблемма- закешируем так что будет! кешируй нафиг все и сразу. Кто сказал что затраты на поддержание кеша больше чем выйгрыш? да он ламер.

короче достаточно почитать топики/коменты и станет весело
0
chiaroscuro #
Неужели никто не упомянул StringTemplate от Terrence Parr? Самый лучший шоблойнезатор, разделяет содержимое от представление как котлеты от мух.

Лучше только HStringTemplate (порт с жабы на православный хаскель).

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.