![]() |
Виды шаблонизации
Недавий спор с одним знакомым толкнул меня на создание этого топика. Вопрос обычный - как вы считаете, что лучше? На данный момент я знаю 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 и никто не докажет обратное..
|
Иногда проще спорить с голодным тигром, чем с сытым бараном...
|
Цитата:
|
Цитата:
|
| Время: 12:18 |