2009-06-16 13 views
0

Ich habe eine Reihe von Sitecores Knoten:XSL-Gruppe Artikel

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

ich den Weg von diesem unter Verwendung einer Funktion sc erhalten: (.) ​​Weg, der so etwas wie ‚/ Artikel/item‘ liefert für der mit (1) markierte Punkt.

Ich möchte in der Lage sein, das Element basierend auf ihrem Pfad zu gruppieren.

So würde meine Ausgabe so etwas wie:

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

ich mit den vorhergehenden Achsen im Moment spielte, wie in dem folgenden Code:

<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> 

... aber sc: path (vorhergehend) gibt nichts zurück. Daher funktioniert mein Scheck nicht.

Was mache ich falsch?

+0

wo kommt $ processedResult kommen? Haben Sie Zugriff auf die s in Form eines Dokuments oder werden sie als RTF von einer Art Funktion zurückgegeben? – Tomalak

+0

Sorry, $ bearbeiteteResult ist die Struktur . Es ist das Ergebnis einer Knoten-Set-Operation. Das erzeugt beabsichtigtes XML. –

Antwort

1

Ich bin mir nicht sicher, was Sie mit

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

Dieses liest als „füttern die Kinder genannt <preceding> als Knotenmenge auf die sc:path() Funktion“ zu tun beabsichtigen.

Wenn Sie Ihre Eingabe betrachten, gibt es keine untergeordneten Elemente mit diesem Namen.

Könnte es Sie so etwas wie

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

bedeuten sein?

Zu wissen nichts über Sitecores, ich werde es versuchen mit:

<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

Ich bin mir jedoch nicht sicher, ob der Ansatz, den Sie wählen (wenn vorher! = Aktuell), in Bezug auf sinnvolle Gruppierung und Ausgabe erfolgreich sein wird. – Tomalak

+0

Das ist es. Ausgezeichnet, vielen Dank. –

+0

Gut zu hören. :) – Tomalak

Verwandte Themen