Scud
Новичок
XSLT преобразование и "механизм блоков"
Помогите "сумнящемуся", есть у меня идея как совместить XSLT преобразование и механизм блоков.
Предпосылки:
------------------
На страницах разных сайтов часто меняется только антураж, например, два интернет магазина, у каждого на странице подробного описания товара есть:
Таким образом код формирующий 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
- Система анализирует трансформатор, вызывает метод NewsBlock::showLastNews(), заменяет <xsl:import href="e7:NewsBlock.showLastNews"/> на <xsl:import href="NewsBlock.showLastNews.xsl"/>
- Запускается трансформация результат отдаётся пользователю
Вопросы:
------------
Как думаете жизнеспособно ?
Помогите "сумнящемуся", есть у меня идея как совместить XSLT преобразование и механизм блоков.
Предпосылки:
------------------
На страницах разных сайтов часто меняется только антураж, например, два интернет магазина, у каждого на странице подробного описания товара есть:
- картинка товара
- текст с описанием
- таблица со спецификацией
- цена
Таким образом код формирующий 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>
- Запускается трансформация результат отдаётся пользователю
Вопросы:
------------
Как думаете жизнеспособно ?