Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > MVC и XSLT


Автор: malefici 10.10.2011, 12:05
Есть некоторый MVC'шный backend собраный на коленке, он собирает XML'ку из данных, что проходит обработку моделями контроллеров. В качестве шаблонизатора я использую XSLT, это удобно по многим причинам. 
Теперь пару слов о архитектуре backend'а. Backend собирает XML из hash'а. Из чего состоит hash:
  • данные роутера (локаль, контроллер, метод, алиас объекта)
  • данные контроллера (обработанные нужными моделями, естественно)
  • данные хуков
Так как это панель управления (хитрая админка), то там используюется большое количество методов каждого из контроллеров. Было бы очень удобно реализовать шаблонирование метода в шаблоне (сорри за тавтологию). Я не совсем представляю как это сделать. Вызывать шаблон по имени метода? Разносить шаблоны по методам контроллеров? Инклудить темплейты? Подскажите, пожалуйста.

UPD
Cам вопрос возник из-за структуры XML документа, я не имею представления о том, как здесь можно воспользоваться конструкцией
Код

<xsl:template match="method" />

так-как структура XML
Код

<root>
<router-data />
<controller-data /> <!-- тут данные для отображения страницы -->
<hooks-data />
<additional-data />
</root>

Автор: magelan 10.10.2011, 14:31
Задача не очень ясна.
Подходов может быть много.
например у вас есть некая псевдоструктура, которую вы вычитываете перед трансформацией:
Код

<tree>
    <page url="/" template="main.xsl"/>
    <page url="/adm" template="admin.xsl"/>
    <!-- ... -->
</tree>


либо вы модернизируете свой XML как-то так:
Код

<root>
    <router-data />
    <controller-data for="main-page" /> <!-- тут данные для отображения страницы -->
    <hooks-data />
    <additional-data />
</root>

тогда ваш XSL примет понятный вид
Код

<xsl:template match="/root/controller-data[@for='main-page']" />
<xsl:template match="/root/controller-data[@for='other-page']" />
<xsl:template match="/root/controller-data[@for='admin-page']" />
<!-- etc -->


в CMS обычно делают связь шаблонов на уровне страниц, где управляют как XML который будет получен при вызове страницы так и шаблоном для ее обработки.

Автор: malefici 10.10.2011, 14:57
Ага, буду пробовать. 
Задачу пытался изложить максимально точно, как смог smile 
Цитата

в CMS обычно делают связь шаблонов на уровне страниц, где управляют как XML который будет получен при вызове страницы так и шаблоном для ее обработки.

Не понял. Можно поподробнее? Речь идет о том, что у контроллера есть определенный темплейт, и весь контент, что генерируется этим контроллером, обрабатывается этим самым определенным темплейтом? Я правильно понял?

Автор: magelan 11.10.2011, 00:48
правильно.

мы немного в других терминах живем.

у нас есть "шаблоны" это микс из "элементов" - каждый из которых провайдер контента (новостная лента, документы, банеры, цсс и т.д.) и собственно XSL.
Разработчик сам решает, что нужно для страницы такого типа, набирая элементы из репозитория или заставляя программистов дописать ему те, что не хватает, пишет XSL их обрабатывающий.

После этого в неком другом вью накидывает "карту сайта", где ставит страницам соответствие шаблонов и настраивает провайдеры контента, т.е. указывает новостные линии, говорит, сколько новостей хочет на странице, за какой период, если это необходимо и тому подобное.

но начинали мы с файлика соответствий странице шаблона.

Автор: malefici 11.10.2011, 16:26
Ну, не с файлика, я хотел узнать, как в шаблоне сделать конструкцию для обработки XML'я различными xsl:template в зависимости от метода контроллера. Вопрос решен. Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)