Цикличность в XSL-шаблоне

#
Цикличность в XSL-шаблоне
Пол дня голову ломаю, как сделать чтобы «на выходе» на сайте не повторялся тег <ul>?
То есть, если я выношу его за рамки XSL-шаблона, в макет сайта:
<ul id="portfolio-list" class="gallery three-cols">
<?php
$kernel->show_current_template();
?>
</ul>  

то вроде все нормально, но он эти стили применяет везде где только можно, в данном случае во всей структуре Портфолио, а нужно только в Данных об инф. элементах.
Если же данный класс маркированного списка (UL) внести в XSL-шаблон, то появляется цикличность тега
<xsl:template match="blocks/items/item">
   <ul id="portfolio-list" class="gallery three-cols">
      <li class="pink">
         <xsl:if test="item_small_image!=''">
            <a href="{item_image}" rel="group1" class="fancybox" title="{item_description}"><img src="{item_small_image}" /></a>
         </xsl:if></li>
   </ul>
</xsl:template>


на выходе типа:
<ul id="portfolio-list" class="gallery three-cols"></ul>
<ul id="portfolio-list" class="gallery three-cols"></ul>
<ul id="portfolio-list" class="gallery three-cols"></ul>

а нужно
<ul id="portfolio-list" class="gallery three-cols">
   <li class="pink">...</li>
</ul>


в общем как обернуть правильно тег UL? надеюсь не запутал
#
Re: Цикличность в XSL-шаблоне
Sibirskiy,
из тела темплейта
<xsl:template match="blocks/items/item">
   <ul id="portfolio-list" class="gallery three-cols">
      <li class="pink">
         <xsl:if test="item_small_image!=''">
            <a href="{item_image}" rel="group1" class="fancybox" title="{item_description}"><img src="{item_small_image}" /></a>
         </xsl:if></li>
   </ul>
</xsl:template>

нужно вынести теги ul в то место, где этот темплейт вызывается. что-нибудь типа
<ul>
<xsl:apply-template select="item"/>
</ul>

Выражение в select может быть немного другим, но должно оканчиваться на item
Заказов не беру. Консультирую редко.
#
Re: Цикличность в XSL-шаблоне
пробовал, если же я выношу за пределы:
<ul id="portfolio-list" class="gallery three-cols">
<xsl:template match="blocks/items/item">
      <li class="pink">
         <xsl:if test="item_small_image!=''">
            <a href="{item_image}" rel="group1" class="fancybox" title="{item_description}"><img src="{item_small_image}" /></a>
         </xsl:if>
      </li>
</xsl:template>
</ul>

то возникают ошибки, типа:
… compilation error: file …
… element template only allowed as child of stylesheet в файле …
… Found a top-level element ul with null namespace URI в файле …
… No stylesheet associated to this object в файле …
#
Re: Цикличность в XSL-шаблоне
ух-ты, попробовал отдельно:
<!-- Отображение записи информационной системы -->
<ul id="portfolio-list" class="gallery three-cols">
     <xsl:apply-templates select="blocks/items/item[item_status=1]"/>
</ul>

и в Данных об инф. элементах:
<xsl:template match="blocks/items/item">
      <li class="pink">
         <xsl:if test="item_small_image!=''">
            <a href="{item_image}" rel="group1" class="fancybox" title="{item_description}"><img src="{item_small_image}" /></a>
         </xsl:if>
      </li>
</xsl:template>

вроде заработало, спасибо Kotoff
#
Re: Цикличность в XSL-шаблоне
Sibirskiy писал(а):
пробовал, если же я выношу за пределы:
<ul id="portfolio-list" class="gallery three-cols">
<xsl:template match="blocks/items/item">
      <li class="pink">
         <xsl:if test="item_small_image!=''">
            <a href="{item_image}" rel="group1" class="fancybox" title="{item_description}"><img src="{item_small_image}" /></a>
         </xsl:if>
      </li>
</xsl:template>
</ul>

Потому что так нельзя. Вы нарушаете структуру XSL-файла.
Смотрите: в общем случае, XSL-файл состоит из заголовка (там несколько служебных строк) и набора темплейтов xsl:template. Кроме самих темплейтов, непосредственно внутри тега xsl:stylesheet после заголовков ничего другого быть не может (ну то есть на самом деле еще могут быть объявления глобальных переменных, но об этом не сейчас). Темплейты вызывают друг-друга по цепочке, с помощью команды xsl:apply-templates
И чтобы создать нужные вам теги ul вокруг набора тегов li, вам нужно прописать эти ul в том темплейте, который из себя вызывает другой темплетей, строящий нужные вам теги li, и прописать их именно вокруг этого вызова.
А вы, вместо того чтобы окружить тегами ul _вызов_ темплейта, попытались окружить ими сам темплейт, строящий список li, и естественно нарушили всю структуру XSL-документа.

Ниже я накидал немного абстрактный и очень упрощенный примерчик того, как надо делать. Он больше для наглядности, чем для реального использования.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" encoding="UTF-8" indent="yes"/>

   <xsl:template match="/">
      <xsl:apply-templates select="document/blocks"/>
   </xsl:template>

   <xsl:template match="document/blocks">
      <h2>
         <xsl:value-of select="name"/>
      </h2>

      <ul>
         <xsl:apply-templates select="items/item"/>
      </ul>
   </xsl:template>

   <xsl:template match="items/item">
      <li class="pink">
         <xsl:if test="item_small_image!=''">
            <a href="{item_image}" rel="group1" class="fancybox" title="{item_description}"><img src="{item_small_image}" /></a>
         </xsl:if>
      </li>
   </xsl:template>
</xsl:stylesheet>

Заказов не беру. Консультирую редко.
Авторизация