Недавий спор с одним знакомым толкнул меня на создание этого топика. Вопрос обычный - как вы считаете, что лучше? На данный момент я знаю 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.