2009-06-16 11 views
0

У меня есть набор узлов Sitecore:XSL к пункту группы

<item> 
    <item> 
    <item />  
    </item> 
    <item /> <!-- (1) --> 
    <item /> 
</item> 
<item> 
    <item /> 
    <item /> 
</item> 

Я могу получить путь их, используя функцию СБН: (.) ​​Путь, который возвращает что-то вроде «/ пункт/пункт» для точка отмечена (1).

Что я хочу, чтобы сделать, это группировать элемент на основе их пути.

Так что мой результат будет что-то вроде:

<ul> 
    <li>in item 
    <ul> 
... 
    </ul> 
    </li> 
    <li>in item/item 
    <ul> 
... 
    </ul> 
    </li> 
</ul> 

Я играл с предыдущими осями в данный момент, как показано в следующем коде:

<xsl:for-each select="exsl:node-set($processedResult)/item"> 
    <xsl:sort 
    select="substring-before(substring-after(sc:path(.),'/sitecore/media library/'),'.aspx')" 
    data-type="text" 
    order="ascending" /> 
    <xsl:variable 
    name="path" 
    select="search:GetFriendlyPath('/sitecore/media library/',sc:path(.))" /> 
    <!-- returns: item/item from /sitecore/media library/item/item/item.aspx -->      
    <xsl:variable name="lastPath"> 
    <xsl:choose> 
     <xsl:when test="sc:path(preceding)"> 
     <xsl:value-of 
      select="search:GetFriendlyPath('sitecore/media library',sc:path(preceding))" /> 
     </xsl:when> 
     <xsl:otherwise>none</xsl:otherwise> 
    </xsl:choose> 
    </xsl:variable>    
    <xsl:if test="$path != $lastPath"> <!-- grouping test --> 
    <li> 
     <strong>in <xsl:value-of select="$path" /></strong> 
    </li> 
    </xsl:if> 
    <li> 
    <!-- render detail --> 
    </li> 
</xsl:for-each> 

... но СБН: путь (previous) ничего не возвращает. Поэтому мой чек не работает.

Что я делаю неправильно?

+0

откуда $ processedResult взялось? У вас есть доступ к s в виде документа или они возвращаются как RTF с помощью какой-либо функции? – Tomalak

+0

Извините, $ обработанный результат - структура . Это результат операции с набором узлов. Это создает целевой XML. –

ответ

1

Я не уверен, что вы собираетесь делать с

<xsl:when test="sc:path(preceding)"> 

Это читается как «кормить детей имени <preceding> в виде набора узлов в функции sc:path()».

Глядя на ваш вход, нет дочерних элементов с таким именем.

Может быть, вы имеете в виду что-то вроде

<xsl:when test="sc:path(preceding-sibling::item[1])"> 

? не

Зная ничего о Sitecore, я дам ему выстрел с:

<xsl:for-each select="exsl:node-set($processedResult)/item"> 
    <xsl:sort select=" 
    substring-before(
     substring-after(sc:path(.), '/sitecore/media library/'), 
     '.aspx' 
    )" 
    data-type="text" 
    order="ascending" 
    /> 
    <xsl:variable name="path" select=" 
    search:GetFriendlyPath(
     '/sitecore/media library/', sc:path(.) 
    ) 
    " /> 
    <xsl:variable name="lastPath"> 
    <xsl:choose> 
     <xsl:when test="preceding-sibling::item[1]"> 
     <xsl:value-of select=" 
      search:GetFriendlyPath(
      'sitecore/media library', sc:path(preceding-sibling::item[1]) 
     )" 
     /> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:text>none</xsl:text> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:variable> 

    <!-- grouping test --> 
    <xsl:if test="$path != $lastPath"> 
    <li> 
     <strong> 
     <xsl:text>in </xsl:text> 
     <xsl:value-of select="$path" /> 
     </strong> 
    </li> 
    </xsl:if> 

    <li> 
    <!-- render detail --> 
    </li> 
</xsl:for-each> 
+0

Однако я не уверен, что подход, который вы принимаете (если предыдущий! = Текущий), будет успешным с точки зрения значимой группировки и вывода. – Tomalak

+0

Вот и все. Отлично, спасибо большое. –

+0

Приятно послушать. :) – Tomalak

Смежные вопросы