XSLT. Включение шаблонов.

XtremallyPurpur

Новичок
XSLT. Включение шаблонов.

Добрый день.

Есть "каркасный" шаблон с дизайном, в него хочу включать "контентные" шаблоны, которые трансформируют xml в html.

По причине того, что динамический import (include) в XSLT шаблоне сделать нельзя

<code>
<xsl:variable name="content_template" select="//page/content_template/@href" />

<xsl:include href="{$content_template}" />
</code>

Такое не работает.

Приходится городить кучу xsl:choose'ов, которые выбирают, какой тип страницы выводить; какую форму, соответствующую данной странице показать и т.д.

<code>
<xsl:template name="content">
<xsl:choose>
<xsl:when test="$type='login_form'">
<xsl:call-template name="login_form" />
</xsl:when>
<xsl:when test="$type='что-то еще'">
....
....
</xsl:when>
....
....
<xsl: otherwise>
....
....
</xsl: otherwise>
</xsl:choose>
</xsl:template>
</code>

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

Нет ли более элегантного решения?
 

XtremallyPurpur

Новичок
Т.е. принцип такой, для построения страницы нам понадобятся три файла:
1. Каркас страницы, т.н. layot - структура страницы.
2. Дизайн и элементы страницы - условно - page.
3. XSLT-преобразование, которое собирает по структуре саму страницу.

Только все равно не понятно, как это решает проблему...
Придется вместе с контентом в XML тягать каждый раз представление страницы в этом же XML файле.

Получится нечто вроде:
1. XSLT преобразование
2. Каркас страницы в XML + общие для каждой страницы элементы
3. ПХПСкрипт собирает данные для страницы, прилепляет к нему представление страницы и формирует XML файл, типа такого:
Код:
<page>
  <page_title>TITLE</page_title>
  <header>HEADER</header>
  <!-- Пошло представление -->
  <presentation>
     <!-- Дальше html теги -->
    <table ....>
      <tr>
        <td>CONTENT GOES HERE</td>
      <tr>
    </table>
  </presentation>
  <!-- Закончилось представление -->
</page>
Получается, что элемент "presentation" также нужно будет формировать XSLT, тогда раздувается все:
1. <page>
<page_title>TITLE</page_title>
<header>HEADER</header>
</page> - это сформировали php-скриптом

2. У нас есть представление контента страницы в XSLT и ее контент. Запускаем XSLT процессор - и трансформируем наш контент накладывая XSLT - получаем элемент "presentation".

3. DOMoм вставляем элемент "presentation" к дереву <page>.

Я не слишком усложнил все?
 

chameleon

Новичок
Трансформация одна.
Layout'ы - подключаются динамически через document(), поэтому есть возможность переключения от параметра.
Можешь придумать какого угодно размера taglib (твои выдуманные тэги), на которые будут написаны соотв XSLT-template, выбирающие данные из $page и формирующие их представление, и эти элементы будут в ключаться хоть в общий каркас хоть куда.
У тетбя была проблема переключения "типов страниц" от параметра - этот пример ее решает. Хотя taglib будет по-прежнему содержать все возможные шаблоны, но это будет не в каркасе.
 

slach

Новичок
Chameleon
спасибо за ссылку

кстати у тебя сейчас XSLT преобразование как делаются ?
Sablotron ?
или уже по человечески libxslt ?
php5.0 ? или php5.1.1 ?
 
Сверху