Press Ctrl / CMD + C to copy this to your clipboard.
This post will be reported to the moderators as potential spam to be looked at
Hi all,
I have witten an xslt to shoe a sub menu for level 3 of a menu...
<xsl:variable name="level" select="3"/><xsl:template match="/"><!-- The fun starts here --><div id="navSubMnu"> <ul><xsl:for-each select="$currentPage/ancestor-or-self::* [@level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']"> <li> <a href="{umbraco.library:NiceUrl(@id)}"> <xsl:if test="$currentPage/ancestor-or-self::*/@id = current()/@id"> <xsl:attribute name="class">current</xsl:attribute> </xsl:if> <xsl:attribute name="href"> <xsl:choose> <xsl:when test="count(./*[@isDoc]) > 1 and string(linkToSubpage) = '1'"> <xsl:value-of select="umbraco.library:NiceUrl(./*[@isDoc]/@id)" /> </xsl:when> <xsl:otherwise> <xsl:value-of select="umbraco.library:NiceUrl(@id)" /> </xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:value-of select="@nodeName"/> </a> </li></xsl:for-each></ul> </div></xsl:template>
I want to modify this to show the sub menu on level 2 also..that is depending on whiche level we are..show the sub menu.
My structure:
default Home About Menu 1 (level 2) Menu 2 (level 2) Menu 3 Sub-menu 1 (level 3) Sub-menu 2 (level 3)
Any help please.
//Sam
give you some code of my site. It will show you how to do it. notice that variable level can set which level you want to show.
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:umbraco.library="urn:umbraco.library"
exclude-result-prefixes="umbraco.library">
<xsl:output method="html" omit-xml-declaration="yes" />
<xsl:param name="currentPage"/>
<xsl:variable name="level" select="0"/>
<xsl:template match="/">
<ul>
<xsl:variable name="root" select="$currentPage/ancestor-or-self::*[@isDoc and @level=1]"/>
<xsl:for-each select="$root/*[@isDoc and navigator=1]">
<xsl:sort select="@sortOrder"/>
<li>
<a href="{umbraco.library:NiceUrl(@id)}">
<xsl:if test="$currentPage/ancestor-or-self::*[@level=2]/@id=@id">
<xsl:attribute name="class"> active</xsl:attribute>
</xsl:if>
<xsl:value-of select="@nodeName"/>
</a>
<xsl:call-template name="subMenu">
<xsl:with-param name="node" select="."/>
<xsl:with-param name="level" select="$level"/>
</xsl:call-template>
</li>
</xsl:for-each>
</ul>
</xsl:template>
<xsl:template name="subMenu">
<xsl:param name="node"/>
<xsl:param name="level"/>
<xsl:if test="$level=0 or $node/@level < $level">
<xsl:variable name="subItems" select="$node/*[@isDoc and navigator = 1]"/>
<xsl:if test="count($subItems)>0">
<xsl:for-each select="$subItems">
</xsl:stylesheet>
is working on a reply...
This forum is in read-only mode while we transition to the new forum.
You can continue this topic on the new forum by tapping the "Continue discussion" link below.
Continue discussion
Show sub menu when on corresponding level (2 or 3)
Hi all,
I have witten an xslt to shoe a sub menu for level 3 of a menu...
<xsl:variable name="level" select="3"/>
<xsl:template match="/">
<!-- The fun starts here -->
<div id="navSubMnu">
<ul>
<xsl:for-each select="$currentPage/ancestor-or-self::* [@level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']">
<li>
<a href="{umbraco.library:NiceUrl(@id)}">
<xsl:if test="$currentPage/ancestor-or-self::*/@id = current()/@id">
<xsl:attribute name="class">current</xsl:attribute>
</xsl:if>
<xsl:attribute name="href">
<xsl:choose>
<xsl:when test="count(./*[@isDoc]) > 1 and string(linkToSubpage) = '1'">
<xsl:value-of select="umbraco.library:NiceUrl(./*[@isDoc]/@id)" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="umbraco.library:NiceUrl(@id)" />
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:value-of select="@nodeName"/>
</a>
</li>
</xsl:for-each>
</ul>
</div>
</xsl:template>
I want to modify this to show the sub menu on level 2 also..that is depending on whiche level we are..show the sub menu.
My structure:
default
Home
About
Menu 1 (level 2)
Menu 2 (level 2)
Menu 3
Sub-menu 1 (level 3)
Sub-menu 2 (level 3)
Any help please.
//Sam
give you some code of my site. It will show you how to do it. notice that variable level can set which level you want to show.
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:umbraco.library="urn:umbraco.library"
exclude-result-prefixes="umbraco.library">
<xsl:output method="html" omit-xml-declaration="yes" />
<xsl:param name="currentPage"/>
<xsl:variable name="level" select="0"/>
<xsl:template match="/">
<ul>
<xsl:variable name="root" select="$currentPage/ancestor-or-self::*[@isDoc and @level=1]"/>
<xsl:for-each select="$root/*[@isDoc and navigator=1]">
<xsl:sort select="@sortOrder"/>
<li>
<a href="{umbraco.library:NiceUrl(@id)}">
<xsl:if test="$currentPage/ancestor-or-self::*[@level=2]/@id=@id">
<xsl:attribute name="class"> active</xsl:attribute>
</xsl:if>
<xsl:value-of select="@nodeName"/>
</a>
<xsl:call-template name="subMenu">
<xsl:with-param name="node" select="."/>
<xsl:with-param name="level" select="$level"/>
</xsl:call-template>
</li>
</xsl:for-each>
</ul>
</xsl:template>
<xsl:template name="subMenu">
<xsl:param name="node"/>
<xsl:param name="level"/>
<xsl:if test="$level=0 or $node/@level < $level">
<xsl:variable name="subItems" select="$node/*[@isDoc and navigator = 1]"/>
<xsl:if test="count($subItems)>0">
<ul>
<xsl:for-each select="$subItems">
<li>
<a href="{umbraco.library:NiceUrl(@id)}">
<xsl:value-of select="@nodeName"/>
</a>
<xsl:call-template name="subMenu">
<xsl:with-param name="node" select="."/>
<xsl:with-param name="level" select="$level"/>
</xsl:call-template>
</li>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
is working on a reply...
This forum is in read-only mode while we transition to the new forum.
You can continue this topic on the new forum by tapping the "Continue discussion" link below.