Liste menu
Jeg har en udfordring med min liste menu i XSLT, hvor jeg har behov for at tilføje forskellige klasser til det aktive <li> tags. Der skal være en differentiering, når menupunktet er aktivt og indeholder underpunkter, og når menupunktet er aktivt men ikke indeholder underpunkter. Illustreret således:Eksempel 1 (page 2 er valgt og har underpunkter):
<ul class="Level-1">
<li class="Level-1"><a href="#">page 1</a></li>
<li class="Level-1-actSub"><a href="#">page 2</a></li>
<li class="nextLevel">
<ul class="Level-2">
<li class="Level-2"><a href="#">page 2-1</a></li>
<li class="Level-2"><a href="#">page 2-2</a></li>
</ul>
</li>
<li class="Level-1"><a href="#">page 5</a></li>
</ul>
Eksempel 2 (page 5 er valgt og har ingen underpunkter):
<ul class="Level-2">
<li class="Level-1"><a href="#">page 1</a></li>
<li class="Level-1"><a href="#">page 2</a></li>
<li class="Level-1-act"><a href="#">page 5</a></li>
</ul>
Spørgsmålet er hvorledes jeg får lavet denne differentiering med XSLT???
Min XSLT indtil videre, som fungerer:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:Stylesheet [
<!ENTITY nbsp " ">
]>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxml="urn:schemas-microsoft-com:xslt"
xmlns:umbraco.library="urn:umbraco.library"
exclude-result-prefixes="msxml umbraco.library">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:param name="currentPage"/>
<xsl:variable name="level" select="2"/>
<xsl:variable name="documents" select="$currentPage/ancestor-or-self::node [@level=$level]/node [string(data [@alias='NavigationHide']) != '1']" />
<xsl:template match="/">
<xsl:if test="count($documents) > 0">
<ul class="Level-1">
<!-- Change li class for selected level 2 node -->
<xsl:for-each select="$documents">
<li class="Level-2">
<xsl:if test="$currentPage/ancestor-or-self::node/@id = ./@id">
<xsl:attribute name="class">Level-2-act</xsl:attribute>
</xsl:if>
<a href="{umbraco.library:NiceUrl(./@id)}"><xsl:value-of select="./@nodeName"/></a>
</li>
<!-- Select level 2 nodes and create a list -->
<xsl:if test="$currentPage/ancestor-or-self::node/@id = ./@id">
<xsl:if test="count(./child::node [string(data [@alias='umbracoNaviHide']) != '1']) > 0">
<li class="nextLevel">
<ul class="Level-2">
<xsl:for-each select="./child::node [string(data [@alias='NavigationHide']) != '1']">
<li class="Level-2">
<!-- change class if selected -->
<xsl:if test="$currentPage/ancestor-or-self::node/@id = ./@id">
<xsl:attribute name="class">Level-3-act</xsl:attribute>
</xsl:if>
<a href="{umbraco.library:NiceUrl(./@id)}"><xsl:value-of select="./@nodeName"/></a>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:if>
</xsl:if>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Mvh
Stig