Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Baldy 20 posts 40 karma points
    Apr 11, 2011 @ 17:35
    Baldy
    0

    Intermittent Navigation Issue

    I have implemented the superfish menu into umbraco, and notice that sets of sub items do not load intermittently.

    the site is here - http://lsfitcouk00.eweb701.discountasp.net

    sometimes personal training has sub items, sometimes it doesnt - this is evident by inspecting the markup, its not a javascript issue.

    the same kind of problem happens for the health & fitness menu item too.

    Ive read an re-read my xlst file, but cannot see anything that may cause this...

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
    <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="html" omit-xml-declaration="yes"/>

    <xsl:param name="currentPage" />

    <!--This sets the level that the nav starts at and tells us if we should recurse through child elements-->
    <xsl:variable name="startDepth" select="/macro/startingLevel" />
    <xsl:variable name="recurse" select="/macro/recurse" />
    <xsl:variable name="selectBranches" select="/macro/selectBranches"></xsl:variable>
    <xsl:variable name="maxMenuDepth" select="/macro/maxMenuDepth"></xsl:variable>
    <xsl:variable name="forceNode" select="/macro/forceNode"></xsl:variable>
    <xsl:variable name="walkChildren" select="/macro/expandChildren"></xsl:variable>
    <xsl:variable name="forceHome" select="/macro/forceHome"></xsl:variable>
    <xsl:variable name="securityTrimming" select="/macro/securityTrimming"></xsl:variable>
    <!--Alternate page title variable in here-->
      
    <!--Styles for the navigation-->
    <xsl:variable name="ulBaseClass" select="/macro/ulBaseClass"></xsl:variable>
    <xsl:variable name="branchClass" select="/macro/branchClass"></xsl:variable>
    <xsl:variable name="selectedClass" select="/macro/selectedClass"></xsl:variable>

    <xsl:variable name="startLevel">
      <xsl:choose>
        <xsl:when test="$startDepth >= 0">
          <xsl:value-of select="$startDepth"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="$currentPage/@level"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

      <!--This calls first iteration of the navigation, sending the first node at the correct depth found in the ancestors of the current page-->
    <xsl:template match="/">
      <xsl:choose>
        <xsl:when test="$forceNode">
          <xsl:variable name="currentNode" select="umbraco.library:GetXmlNodeById($forceNode)"></xsl:variable>
          <xsl:call-template name="nodeIterator">
            <xsl:with-param name="parentNode" select="$currentNode/ancestor-or-self::*[@isDoc][@level=$startLevel]
                            [
                              string(umbracoNaviHide) != '1'
                              and ($securityTrimming != '1'
                                or umbraco.library:IsProtected(@id, @path) = false()
                                or umbraco.library:HasAccess(@id, @path) = true())
                            ]" />
            <xsl:with-param name="pseudoCurrentPage" select="$currentNode" />
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
          <xsl:variable name="currentNode" select="$currentPage"></xsl:variable>
          <xsl:call-template name="nodeIterator">
            <xsl:with-param name="parentNode" select="$currentNode/ancestor-or-self::*[@isDoc][@level=$startLevel]
                            [
                              string(umbracoNaviHide) != '1'
                              and ($securityTrimming != '1'
                                or umbraco.library:IsProtected(@id, @path) = false()
                                or umbraco.library:HasAccess(@id, @path) = true())
                            ]" />
            <xsl:with-param name="pseudoCurrentPage" select="$currentNode" />
          </xsl:call-template>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>

    <xsl:template name="nodeIterator">
        <xsl:param name="parentNode" />
        <xsl:param name="pseudoCurrentPage" />
        <!-- do not show info doc node types-->
      <xsl:variable name="calculatedMenuDepth" select="($parentNode/@level - $startLevel)+1" />

      <xsl:if test="$parentNode/*[@isDoc] or ($calculatedMenuDepth = 1 and $forceHome)">
        <ul>

          <xsl:attribute name="class">
            <xsl:choose>
              <xsl:when test="$calculatedMenuDepth = 1">
                <xsl:value-of select="$ulBaseClass" />
              </xsl:when>
              <!--<xsl:when test="$calculatedMenuDepth = 1">
                <xsl:value-of select="concat($ulBaseClass, ' lv', $calculatedMenuDepth)" />
              </xsl:when>
              <xsl:when test="$calculatedMenuDepth > 1">
                <xsl:value-of select="concat('lv', $calculatedMenuDepth)" />
              </xsl:when>-->
            </xsl:choose>
          </xsl:attribute>

          <xsl:if test="$forceHome = 1 and $calculatedMenuDepth = 1">
            <!-- Create the class for the li element-->
            <li>
              <xsl:variable name="isHomeSelected">
                <xsl:choose>
                  <xsl:when test="$currentPage/ancestor-or-self::*[@isDoc][@level=1]/@id = $currentPage/@id">1</xsl:when>
                </xsl:choose>
              </xsl:variable>

              <xsl:call-template name="cssClassConstructor">
                <xsl:with-param name="isSelected" select="$isHomeSelected" />
                <xsl:with-param name="isSelectedBranch" select="0" />
                <xsl:with-param name="hasChildren" select="1" />
                <xsl:with-param name="selectedClass" select="$selectedClass" />
                <xsl:with-param name="branchClass" select="$branchClass" />
              </xsl:call-template>

              <href="{umbraco.library:NiceUrl($currentPage/ancestor-or-self::*[@isDoc][@level=1]/@id)}">

                <xsl:call-template name="cssClassConstructor">
                  <xsl:with-param name="isSelected" select="$isHomeSelected" />
                  <xsl:with-param name="isSelectedBranch" select="0" />
                  <xsl:with-param name="hasChildren" select="0" />
                  <xsl:with-param name="selectedClass" select="$selectedClass" />
                  <xsl:with-param name="branchClass" select="$branchClass" />
                </xsl:call-template>

                <!--set the innerText for the a element-->
                <xsl:value-of select="$currentPage/ancestor-or-self::*[@isDoc][@level=1]/text()"/>

                <xsl:if test="string($currentPage/ancestor-or-self::*[@isDoc][@level=1]/text()) = ''">
                  <xsl:value-of select="$currentPage/ancestor-or-self::*[@isDoc][@level=1]/@nodeName"/>
                </xsl:if>
              </a>
            </li>
          </xsl:if>
          <!--End force home-->


          <!--for each node in the parent node that is not hidden by Umbraco-->
          <xsl:for-each select="$parentNode/*[@isDoc][
                              string(umbracoNaviHide) != '1'
                              and ($securityTrimming != '1'
                                or umbraco.library:IsProtected(@id, @path) = false()
                                or umbraco.library:HasAccess(@id, @path) = true())
                            ]">

            <!--Set the current node id i.e. the node we have looped to not the current page-->
            <xsl:variable name="currentNodeID" select="@id" />

            <!--Is the node a branch? i.e. are there children and is it in the colletion of ancestor nodes -->
            <xsl:variable name="isBranch">
              <xsl:choose>
                <xsl:when test="$currentPage/ancestor-or-self::*[@isDoc][@id = $currentNodeID]/child::*[@isDoc]">1</xsl:when>
              </xsl:choose>
            </xsl:variable>

            <!--Is the node selected? i.e. is it the same as the currentPage node-->
            <xsl:variable name="isSelected">
              <xsl:choose>
                <xsl:when test="$currentPage/@id = $currentNodeID">1</xsl:when>
                <!-- parent selected -->
                <xsl:when test="$pseudoCurrentPage/@id = $currentNodeID">1</xsl:when>
                
              </xsl:choose>
            </xsl:variable>

            <xsl:variable name="isSelectedBranch">
              <xsl:choose>
                <xsl:when test="$isBranch = 1 and $selectBranches = 1">1</xsl:when>
              </xsl:choose>
            </xsl:variable>

            <xsl:variable name="hasChildren">
              <xsl:choose>
                <xsl:when test="./*[@isDoc]">1</xsl:when>
              </xsl:choose>
            </xsl:variable>

            <li>

              <!-- Create the class attribute for the element-->
              <xsl:call-template name="cssClassConstructor">
                <xsl:with-param name="isSelected" select="$isSelected" />
                <xsl:with-param name="isSelectedBranch" select="$isSelectedBranch" />
                <xsl:with-param name="hasChildren" select="$hasChildren" />
                <xsl:with-param name="selectedClass" select="$selectedClass" />
                <xsl:with-param name="branchClass" select="$branchClass" />
              </xsl:call-template>

              <href="{umbraco.library:NiceUrl(@id)}">

                <xsl:call-template name="cssClassConstructor">
                  <xsl:with-param name="isSelected" select="$isSelected" />
                  <xsl:with-param name="isSelectedBranch" select="$isSelectedBranch" />
                  <xsl:with-param name="hasChildren" select="0" />
                  <xsl:with-param name="selectedClass" select="$selectedClass" />
                  <xsl:with-param name="branchClass" select="$branchClass" />
                </xsl:call-template>

                <!--set the innerText for the a element-->
                <xsl:value-of select="./pageTitle/text()"/>
                <xsl:if test="string(./pageTitle/text()) = ''">
                  <xsl:value-of select="@nodeName"/>
                </xsl:if>
              </a>
      
              <!-- if it's a branch recurse through it's children-->
              <xsl:if test="((($isBranch = 1 and $recurse = 1) or ($walkChildren = 1 and $pseudoCurrentPage/descendant-or-self::*[@isDoc][@id = $currentNodeID]/child::*[@isDoc])) and $maxMenuDepth &gt; $calculatedMenuDepth)">
                <xsl:call-template name="nodeIterator">
                  <xsl:with-param name="parentNode" select="." />
                  <xsl:with-param name="pseudoCurrentPage" select="$pseudoCurrentPage" />
                </xsl:call-template>
              </xsl:if>

            </li>

          </xsl:for-each>

        </ul>
      </xsl:if>
      </xsl:template>
     
      <xsl:template name="cssClassConstructor">
        <xsl:param name="isSelected"></xsl:param>
        <xsl:param name="isSelectedBranch"></xsl:param>
        <xsl:param name="hasChildren"></xsl:param>
        <xsl:param name="selectedClass"></xsl:param>
        <xsl:param name="branchClass"></xsl:param>

        <xsl:variable name="class">
          <xsl:if test="$isSelected = 1">
            <xsl:value-of select="concat($selectedClass,' ')"/>
          </xsl:if>
          <xsl:if test="$isSelectedBranch = 1">
            <xsl:value-of select="concat($branchClass,' ')"/>
          </xsl:if>
          <xsl:if test="$hasChildren = 1">
            <xsl:value-of select="'hasChildren '"/>
          </xsl:if>
        </xsl:variable>

        <xsl:if test="string-length($class) > 0">
          <xsl:attribute name="class">
            <xsl:value-of select="normalize-space($class)"/>
          </xsl:attribute>
        </xsl:if>
        
      </xsl:template>
    </xsl:stylesheet>

     

     

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

Please Sign in or register to post replies