Can you please post the markup that is generated when the problem ocurrs?
I have something that does this sort of thing but it's so specific to the site it was used on that it would take me a long time to strip it back to basics. I'm pretty sure I'll be able to fix this though.
Submenu with 3 levels
Hi,
I am building a site with 4 levels in navigation. I have a top menu for the first level, and the rest should be in a submenu.
I got an XLST file from another post: http://forum.umbraco.org/yaf_postst3421_Creating-a-3rd-and-dare-I-say-4th-level-navigation.aspx
And i works almost as it should - the only thing wrong, is that is moves the 2nd level down to 3rd level, when you are on a 3rd level link!
My navigation is like this:
Home
- About
- - organisation
- - - Chart
- - - People
- - History
- - - 1987
if i go to the People site, the History site "moves down" in the list so that it looks like a 3rd level link.
It is maybe easier to explain in pictures: http://www.pado.dk/menustructure.jpg
My XLST file looks like this:
<?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" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets"
exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets ">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:param name="currentPage"/>
<xsl:param name="startLevel" select="2"/>
<xsl:template match="/">
<xsl:if test="count($currentPage/ancestor-or-self::node [@level = $startLevel]/node) > 0">
<ul id="nav">
<xsl:for-each select="$currentPage/ancestor-or-self::node [@level = $startLevel]/node">
<xsl:call-template name="drawnode">
<xsl:with-param name="level" select="1"/>
</xsl:call-template>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:template>
<xsl:template name="drawnode">
<xsl:param name="level"/>
<li>
<xsl:choose>
<xsl:when test="@id=$currentPage/@id">
<xsl:attribute name="class">level<xsl:value-of select="$level"/>selected</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="class">level<xsl:value-of select="$level"/></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<a href="{umbraco.library:NiceUrl(@id)}">
<xsl:value-of select="@nodeName"/>
<xsl:if test="count(descendant-or-self::node [@id=$currentPage/@id]) > 0">
<ul id="nav">
<xsl:for-each select="node">
<xsl:call-template name="drawnode">
<xsl:with-param name="level" select="number($level)+1"/>
</xsl:call-template>
</xsl:for-each>
</ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>
Hope to get some help, as i think it is probably just a little error somewhere.
Best Regards,
Brian
If it is easier, then the original code, by hoehler, looks like this:
<?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:param name="startLevel" select="2"/>
<xsl:template match="/">
<xsl:if test="count($currentPage/ancestor-or-self::node [@level = $startLevel]/node) > 0">
<div id="nav">
<xsl:for-each select="$currentPage/ancestor-or-self::node [@level = $startLevel]/node">
<xsl:call-template name="drawnode">
<xsl:with-param name="level" select="1"/>
</xsl:call-template>
</xsl:for-each>
</div>
</xsl:if>
</xsl:template>
<xsl:template name="drawnode">
<xsl:param name="level"/>
<div>
<xsl:choose>
<xsl:when test="@id=$currentPage/@id">
<xsl:attribute name="class">level<xsl:value-of select="$level"/>selected</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="class">level<xsl:value-of select="$level"/></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<a href="{umbraco.library:NiceUrl(@id)}">
<xsl:value-of select="@nodeName"/>
</div>
<xsl:if test="count(descendant-or-self::node [@id=$currentPage/@id]) > 0">
<xsl:for-each select="node">
<xsl:call-template name="drawnode">
<xsl:with-param name="level" select="number($level)+1"/>
</xsl:call-template>
</xsl:for-each>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Hi,
Can you please post the markup that is generated when the problem ocurrs?
I have something that does this sort of thing but it's so specific to the site it was used on that it would take me a long time to strip it back to basics. I'm pretty sure I'll be able to fix this though.
Thanks,
Kevin
When the problem occurs, the html markup looks like this: class</span>=<span class="attribute-value">"level1"</span>><<span class="start-tag">a</span><span class="attribute-name"> href</span>=<span class="attribute-value">"/about-bw/organisation.aspx"</span>>Organisation</<span class="end-tag">a</span>><<span class="start-tag">ul</span><span class="attribute-name"> id</span>=<span class="attribute-value">"nav"</span>><<span class="start-tag">li</span><span class="attribute-name"> class</span>=<span class="attribute-value">"level2selected"</span>><<span class="start-tag">a</span><span class="attribute-name"> href</span>=<span class="attribute-value">"/about-bw/organisation/organisation-chart.aspx"</span>>Organisation Chart</<span class="end-tag">a</span>><<span class="start-tag">ul</span><span class="attribute-name"> id</span>=<span class="attribute-value">"nav" </span><span class="error"><span class="attribute-name">/</span></span>></<span class="end-tag">li</span>></<span class="end-tag">ul</span>></<span class="end-tag">li</span>><<span class="start-tag">li</span><span class="attribute-name"> class</span>=<span class="attribute-value">"level1"</span>><<span class="start-tag">a</span><span class="attribute-name"> href</span>=<span class="attribute-value">"/about-bw/history.aspx"</span>>History</<span class="end-tag">a</span>></<span class="end-tag">li</span>></<span class="end-tag">ul</span>>
I hope this is what you mean?
There was a problem with the code, sorry! Here it is again:
When the problem occurs, the html markup looks like this:
<ul id="nav"><li class="level1"><a href="/about-bw/organisation.aspx">Organisation<ul id="nav"><li class="level2selected"><a href="/about-bw/organisation/organisation-chart.aspx">Organisation Chart<ul id="nav" /></li></ul></li><li class="level1"><a href="/about-bw/history.aspx">History</li></ul>
I hope this is what you mean?
There was a problem with the code, sorry! Here it is again:
When the problem occurs, the html markup looks like this:
<ul id="nav"><li class="level1"><a href="/about-bw/organisation.aspx">Organisation<ul id="nav"><li class="level2selected"><a href="/about-bw/organisation/organisation-chart.aspx">Organisation Chart<ul id="nav" /></li></ul></li><li class="level1"><a href="/about-bw/history.aspx">History</li></ul>
I hope this is what you mean?
Suddenly a solution popped up, the Cogworks Flexible Navigation! Great Package!
The link: http://our.umbraco.org/projects/cogworks---flexible-navigation
Thank you Tim Saunders! Your package was the solution, so how do i set a solution to this thread?
best regards,
Brian
is working on a reply...