[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Холивар про шаблонизатор.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8
twin
Вчера в привате у меня опять был холивар о пользе/вреде шаблонизаторов. Это меня порядком разозлило и я решил все же разобраться, что, зачем и почему.

В итоге набросал на коленке скритптик, принцип которого отвечает моим требованиям к шаблонизатору. Хочется узнать мнение форумчан, почему в популярных шаблонизаторах не используется такой принцип. Или может используется, да я не знаю.

Но все по порядку.

Сначала хотелось бы уяснить, какие цели преследует шаблонизация. Вот два основных постулата:

1. Шаблонизатор служит для разделения бизнесс-логики и логики представления.
2. Шаблонизатор должен упростить задачу верстальщику, оградив его от PHP.

Исходя из этого можно нарисовать гипотетический идеальный шаблонизатор. По пунктам:

1. В идеале в нем не должно быть логической составляющей. Вообще.
2. Должна быть возможность открыть и отредактировать шаблон по физическому пути, вообще без сервера.

Теперь смотрим, что из этого есть в классических шаблонизаторах, таких как SMARTY, TWIG и иже с ними.

1. Логика никуда не делась. Более того, появился третий синтаксис, промежуточный между PHP и HTML.
2. Верстальщику задача наоборот усложнилась, ибо он теперь должен изучить этот синтаксис и еще разобраться с сервером. Ну или свешать задачу "натягивания" шаблона на программиста.

Я из религиозных соображений не пользуюсь шаблонизаторами. Но дело не в этом, мне не понятно, почему разработчики популярных продуктов идут по пути внедрения суррогатного синтаксиса, хотя на поверхности лежит очевидный и очень простой способ - использовать HTML комментарии.

Дальше я покажу скриптик, который отвечает всем вышеобозначенным требованиям сполна.
В шаблонах этой схемы совершенно нет логической составляющей (всячечких ифов, форечей и прочей лабуды). Я сейчас не рассматриваю разные фишки плана наследования шаблонов, компилляции и так далее, чем обычно привлекают шаблонизаторы. Это можно навоять при желании. Я хочу показать только принцип разбора шаблона.

Итак. Краткая документация.

Шаблон состоит из блоков. Все блоки, кроме одного, закомментированы. Шаблон можно открыть в браузере и делать с ним чё хош, открывая блоки по очереди, переставляя хвостик комментария (-->):

 
<div id="main_wrap" style="width:980px; margin:20px auto;">
<!--// enter_form -->
<div id="main_content" style="background:#F0EBD6;
margin-left:20px;
padding:20px;"
>
Тут к примеру форма входа<br />
<form
action="" method="post">
<input
name="login" type="text"/><br />
<input
name="ok" type="submit" value="Вход" />
</form>
</div>

<!--// enter_form end -->

<!-- Обычный комментарий -->

<!--// compliments
<div id="main_content" style="background:#5BFF85;
margin-left:20px;
padding:20px;">
Поздравляем <strong><?php echo $login ?></strong>, все прошло успешно.
<br />
<a href="/?page=exit">Выход</a>
</div>
<!--// compliments end -->
</div>



Я специально сделал маленький шаблончик для наглядности. Внимание нужно обратить только на одну вещь. Блоки должны находиться между комментариев с двумя слэшами:
<!--//

Внутри комментария нужно написать название блока. Любое, желательно без пробелов:
<!--// main -->

Завершающий комментарий должен заканчиваться словом end:
<!--// main end -->

Переменные вставляются обычным нативным синтаксисом
<?=$var; ?>

И всё! Больше от верстальщика ничего не требуется. Все остальное решает программист. Так как логика уходит туда, где ей и положено быть - в PHP.

Если нужны циклы, верстальщику нужно написать верстку только одного витка. Если нужна замена блоков от условий - все по порядку и ненужные в данный момент закомментить, чтобы не мешались. Это не важно для шаблонизатора.

При желании можно и извратиться с обычным нативным синтаксисом, вставить прямо в шаблон условия, или циклы. Хотя это подпортит идею. А вот функции (например вывести текущую дату) можно запросто. Это совсем не помешает, если открыть шаблон браузером напрямую. Он не отобразит вставки <?php ... ?>, так как воспринимает их как теги.

Прилеплю рабочий вариант (написан сегодня на коленке). Кому не лень, посмотрите как работает и что вы об этом думаете.

PS. Спасибо всем, кто принял участие в обсуждении. По итогам внес некоторые коррективы.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

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

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.