Umbraco XSLT-exempel

Modified on 2011/04/09 17:07 by Jovall — Categorized as: Uncategorized

Examples showing changes in XSLT

Getting the Document Type for $currentPage

New version:
 <xsl:value-of select="local-name($currentPage)" />
Replaces old version:
<xsl:value-of select="$currentPage/@nodeTypeAlias" />

Selecting a certain document type

New version, simple form:
 <xsl:for-each select="$currentPage/subPage">
or using an if-test:
 <xsl:for-each select="$currentPage/*">
    <xsl:if test="self::subPage">.......</xsl:if>
</xsl:for-each>
or testing against a variable:
 <xsl:for-each select="$currentPage/*">
    <xsl:if test="local-name() = $subPageName">.......</xsl:if>
</xsl:for-each>
Replaces old version:
<xsl:for-each select="$currentPage/node [@nodeTypeAlias = 'subPage']">

For Each child node

New version using /* to select all nodes below this and @isDoc to select documents only:
 <xsl:for-each select="$currentPage/* [@isDoc]">
</xsl:for-each>
Replaces old version:
<xsl:for-each select="$currentPage/node">
</xsl:for-each>

For Each child node of a specfic Document Type Alias

New version:
 <xsl:for-each select="$currentPage/NewsItem">
</xsl:for-each>
Or if you have a property with the same name, use @isDoc to get document:
 <xsl:for-each select="$currentPage/NewsItem [@isDoc]">
</xsl:for-each>
Replaces old version:
<xsl:for-each select="$currentPage/node [@nodeTypeAlias='NewsItem']">
</xsl:for-each>

For Each child node excluding a specfic Document Type Alias

New version:
 <xsl:for-each select="$currentPage/*[not(self::NewsItem)]">
</xsl:for-each>
Replaces old version:
<xsl:for-each select="$currentPage/node [@nodeTypeAlias!='NewsItem']">
</xsl:for-each>

For Each child node via a selectable source

This example shows you how to list childnodes from the nodeID of the contentpicker.
New version:
 <xsl:param name="Source" select="$currentPage/mySource" />
<xsl:for-each select="umbraco.library:GetXmlNodeById($Source)/DocType">
</xsl:for-each>
Replaces old version:
<xsl:param name="Source" 
           select="umbraco.library:GetXmlNodeById($currentPage/data 
           [@alias='mySource'])" />
<xsl:for-each select="$Source/node"></xsl:for-each>

For Each node of a specfic Document Type Alias

This example walks upto the top level node and then looks through all child nodes. Expensive!
New version:
 <xsl:for-each select="$currentPage/ancestor-or-self::Home//MyDocumentType [@isDoc]">
</xsl:for-each>
Replaces old version:
<xsl:for-each select="$currentPage/ancestor-or-self::node 
                      [@nodeTypeAlias='Home']//node [@nodeTypeAlias='MyDocumentType']">
</xsl:for-each>

Using a macro parameter to get a document type property

New version:
 <xsl:value-of select="$currentPage/* [name() = $myMacroParameter and not(@isDoc)]" />
Replaces old version:
<xsl:value-of select="$currentPage/data [@alias=$myMacroParameter]" />