Преобразования данных, логика отображения. XSLT, template engines, альтернативы.
Вопрос во многом теоретический.
Постановка задачи такая. Предположим, у нас есть:
1. Набор данных в некотором структурированном сериализованном виде (XML, JSON, YAML - не суть важно), полученный из внешнего источника. Источнику можно сказать, в каком формате выводить данные (считаем, что он уже поддерживает любой непротиворечивый формат данных, какой нам придет в голову), но не более.
2. Текстовый шаблон, представляющий собой HTML с некоторой разметкой (валидный XHTML, обычный HTML с разметкой псевдокомментариями, еще что-то - не важно).
3. Некий набор инструкций, позволяющий задавать правила, по которым данные размещаются в шаблоне, по сути язык трансформации.
Задача - выбрать наиболее подходящие инструменты и разработать реализацию п.2 и п.3, то есть, по сути, "изолированный template engine".
Варианты реализации, перечисляю навскидку:
1. XSLT. Преимущество - стандарт, во многом универсальность, наличие множества готовых реализаций под разные платформы. Недостатки - низкая производительность (необходимость постоянно выполнять тяжелую операцию парсинга XML), нетривиальный синтаксис, требующий перестройки мышления (требуется обучение верстальщика, и не факт, что хватит мозгов).
2. Любой шаблонный движок + интерпретатор языка, на котором (или экстеншеном для которого ) он написан. Здесь два совершенно разных подхода:
2.1. Smarty или ему подобный движок. PHP-скрипт парсит полученный набор данных(1), делает ему assign, не вникая в структуру (т.е. для любого набора данных и любого шаблона код один и тот же); вся логика отображения размещается непосредственно в шаблоне. Преимущества и недостатки такого подхода уже были неоднократно озвучены; дополнительно лишь отмечу, что синтаксис Smarty все же ограничен, и, если все assign-ы у нас автоматические и делаются только исходя из структуры полученных данных, не всегда можно (по крайней мере, легко) получить необходимый результат.
2.2. Blitz, php-templates или ему подобный движок; каждый view состоит из 2-х частей - простого шаблона с блочной разметкой и php-скрипта, отвечающего за логику отображения. Вьюхи здесь разрабатывают два человека, находящиеся в прямом контакте - php-программист и верстальщик (ну либо один в двух лицах). Возможности, по сути, неограничены, но необходимо знание PHP.
2.3. Pure <language>, по сути разновидность п.2.1 (хотя можно сделать и по типу 2.2), с очевидным недостатком - легко отстрелить себе ногу.
В обоих случаях недостатком является использование полноценного интерпретатора универсального языка программирования для решения, в общем-то, узкой задачи.
3. Какой-то не перечисленный здесь подход, о котором вы мне расскажете, а я скажу вам спасибо . Может быть сколь угодно теоретическим и гипотетическим
Вопрос во многом теоретический.
Постановка задачи такая. Предположим, у нас есть:
1. Набор данных в некотором структурированном сериализованном виде (XML, JSON, YAML - не суть важно), полученный из внешнего источника. Источнику можно сказать, в каком формате выводить данные (считаем, что он уже поддерживает любой непротиворечивый формат данных, какой нам придет в голову), но не более.
2. Текстовый шаблон, представляющий собой HTML с некоторой разметкой (валидный XHTML, обычный HTML с разметкой псевдокомментариями, еще что-то - не важно).
3. Некий набор инструкций, позволяющий задавать правила, по которым данные размещаются в шаблоне, по сути язык трансформации.
Задача - выбрать наиболее подходящие инструменты и разработать реализацию п.2 и п.3, то есть, по сути, "изолированный template engine".
Варианты реализации, перечисляю навскидку:
1. XSLT. Преимущество - стандарт, во многом универсальность, наличие множества готовых реализаций под разные платформы. Недостатки - низкая производительность (необходимость постоянно выполнять тяжелую операцию парсинга XML), нетривиальный синтаксис, требующий перестройки мышления (требуется обучение верстальщика, и не факт, что хватит мозгов).
2. Любой шаблонный движок + интерпретатор языка, на котором (или экстеншеном для которого ) он написан. Здесь два совершенно разных подхода:
2.1. Smarty или ему подобный движок. PHP-скрипт парсит полученный набор данных(1), делает ему assign, не вникая в структуру (т.е. для любого набора данных и любого шаблона код один и тот же); вся логика отображения размещается непосредственно в шаблоне. Преимущества и недостатки такого подхода уже были неоднократно озвучены; дополнительно лишь отмечу, что синтаксис Smarty все же ограничен, и, если все assign-ы у нас автоматические и делаются только исходя из структуры полученных данных, не всегда можно (по крайней мере, легко) получить необходимый результат.
2.2. Blitz, php-templates или ему подобный движок; каждый view состоит из 2-х частей - простого шаблона с блочной разметкой и php-скрипта, отвечающего за логику отображения. Вьюхи здесь разрабатывают два человека, находящиеся в прямом контакте - php-программист и верстальщик (ну либо один в двух лицах). Возможности, по сути, неограничены, но необходимо знание PHP.
2.3. Pure <language>, по сути разновидность п.2.1 (хотя можно сделать и по типу 2.2), с очевидным недостатком - легко отстрелить себе ногу.
В обоих случаях недостатком является использование полноценного интерпретатора универсального языка программирования для решения, в общем-то, узкой задачи.
3. Какой-то не перечисленный здесь подход, о котором вы мне расскажете, а я скажу вам спасибо . Может быть сколь угодно теоретическим и гипотетическим