XSLT преобразование и "механизм блоков"

Scud

Новичок
XSLT преобразование и "механизм блоков"

Помогите "сумнящемуся", есть у меня идея как совместить XSLT преобразование и механизм блоков.

Предпосылки:
------------------
На страницах разных сайтов часто меняется только антураж, например, два интернет магазина, у каждого на странице подробного описания товара есть:
  • картинка товара
  • текст с описанием
  • таблица со спецификацией
  • цена
Но у одного магазина на странице с товаром также есть ссылки на три схожих товара и список новостей, а у другого 5 баннеров.

Таким образом код формирующий XML для вывода данных их списка и там и там одинаковый, а вот код для генерации XML для схожих товаров, списка новостей и баннеров может быть вынесен в отдельные классы, назовём их классы-блоков.

Как может быть реализовано:
---------------------------------------
Запрос пришедший на сервер обрабатывается классом-контроллером, отображение URL запроса на класс контроллер выполняется front-контроллерем фрэймворка, запрос отображается на связку Класс::метод, по этой связке система определяет имя файла xslt-трансформатора. После того как контроллер запроса закончил работу (для случая приведённого выше сгенерировал DOM с данными товара) система загружает трансформатор. После загрузки у нас получается два DOM'а, один с данными, другой с трансформатором. Далее система анализирует трансформатор и находит все узлы <xsl:import> у которых scheme в href = e7, а путь - имени класса блока и методу, например, <xsl:import href="e7:BlockClassName.method"/>. Система создаёт класс BlockClassName и вызывает method(). В этом методе DOM с данными дополняется данными блока, а <xsl:import> на базе которого был вызван BlockClassName::method() удаляется из DOM трансформатора, либо заменяется на <xsl:import> трансформатора который уже честно храниться там куда может добраться класс XSLTProcessor.

Иллюстрация:
------------------
- Запрос www.somesite.ru/shop/item/10
- Front-контроллер направляет запрос в ShopController::viewItem(10)
- Выполняется метод ShopController::viewItem() -> на выходе DOM с данными
- Система загружает трансформатор ShopController.viewItem.xsl
Код:
<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version="1.0"
                         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                         xmlns="http://www.w3.org/1999/xhtml">

 <xsl:import href="e7:NewsBlock.showLastNews"/>

 <xsl:apply-templates select="block[@name='NewsBlock.showLastNews']"/>

 <xsl:apply-templates/>
  ....
 <xsl:template match="shopData">
  ....
 </xsl:template>
</xsl:stylesheet>
- Система анализирует трансформатор, вызывает метод NewsBlock::showLastNews(), заменяет <xsl:import href="e7:NewsBlock.showLastNews"/> на <xsl:import href="NewsBlock.showLastNews.xsl"/>
- Запускается трансформация результат отдаётся пользователю

Вопросы:
------------
Как думаете жизнеспособно ;)?
 

Alexandre

PHPПенсионер
Далее система анализирует трансформатор и находит все узлы <xsl:import> у которых scheme в href = e7, а путь - имени класса блока и методу, например, <xsl:import href="e7:BlockClassName.method"/>
это противоречит принципам XSLT
шаблон он на то и шаблон, чтоб его не менять.
Задавай переменные данных либо через внешние параметры, либо через данные.

Как думаете жизнеспособно
возможно жизнеспособно, но концептуально не верно!
толь что говорили на эту тему http://www.phpclub.ru/talk/showthread.php?postid=658464#post658464
 
Сверху