[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

[xsl] XSL Navigation Choose Test


Subject: [xsl] XSL Navigation Choose Test
From: "Voltmer, Steve T" <voltmer1@xxxxxxxxxxxxxxx>
Date: Mon, 27 Aug 2012 21:01:01 +0000

I have a navigation set up and using a "choose statement" I added a href's to
all nodes except those where the parent nodes have children, in which case the
parent of the child nodes gets the generic "[CDATA[ javascript://]]" added to
it which of course goes no where. Problem is, as my unordered list navigation
gets deeper I would like the parents of the nodes with children to have a link
on them as well. How could I apply the correct choose statement to only the
root nodes of my navigation?
Here is a link to my page:
https://edit-www.rose-hulman.edu/offices-services/alumni-affairs-2.aspx
Thanks!

Here is the xslt :

<?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"
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:template match="/">
  <xsl:variable name="home"
select="$currentPage/ancestor-or-self::Category2HomePage" />
  <xsl:variable name="nav" select="$home/*[@isDoc and
string(umbracoNaviHide)!='1']" />
  <ul>
    <xsl:if test="string($home/useAlternateNavigation) = '1'">
      <xsl:attribute name="class">alt-nav</xsl:attribute>
    </xsl:if>
    <xsl:for-each select="$nav">
      <li>
        <!-- this craziness allows IE to lay subnavs on top of top nav
elements if they break onto two lines -->
        <xsl:attribute name="style">z-index:<xsl:value-of
select="count($nav)-position()+1" />;</xsl:attribute>
        <xsl:attribute name="class">
          <xsl:if test="$currentPage/ancestor-or-self::*[@isDoc and
name()!='Category2HomePage' and @id=current()/@id]">
            <xsl:text>active</xsl:text>
          </xsl:if>
          <xsl:text> </xsl:text>
          <xsl:if test="count($nav)=position()">
            <xsl:text>last</xsl:text>
          </xsl:if>
        </xsl:attribute>
        <xsl:call-template name="node-link-with-span">
          <xsl:with-param name="node" select="current()" />
        </xsl:call-template>

        <xsl:variable name="subnodes" select="* [@isDoc and
string(umbracoNaviHide)!='1']" />
        <xsl:if test="$subnodes">
          <ul>
            <xsl:for-each select="$subnodes">
              <li>
                <xsl:if test="position()=1">
                  <xsl:attribute name="class">first</xsl:attribute>
                </xsl:if>
                <xsl:call-template name="node-link-with-span">
                  <xsl:with-param name="node" select="current()" />
                </xsl:call-template>
              </li>
            </xsl:for-each>
          </ul>
        </xsl:if>
      </li>
    </xsl:for-each>
  </ul>

  <xsl:if test="string($home/useAlternateNavigation) != '1'">
    <img src="/static/phase2/tabNavBorderBottom.jpg" class="tabBorder" />
  </xsl:if>
</xsl:template>

<xsl:template name="node-link-with-span">
  <xsl:param name="node" />

  <xsl:if test="string($node) != ''">
   <a>
          <xsl:attribute name="href">
            <xsl:choose>
              <xsl:when test="count($node/* [@isDoc and
string(umbracoNaviHide) != '1'])">
                <![CDATA[javascript://]]>
              </xsl:when>
              <xsl:when test="$node[name() = 'ExternalLink']">
                <xsl:value-of select="$node/url" />
              </xsl:when>
              <xsl:otherwise>
                <xsl:value-of select="umbraco.library:NiceUrl($node/@id)" />
              </xsl:otherwise>
            </xsl:choose>
          </xsl:attribute>

          <span>
            <xsl:call-template name="node-name">
              <xsl:with-param name="node" select="$node" />
            </xsl:call-template>
          </span>
        </a>
  </xsl:if>
</xsl:template>

<!-- A template to output the correct name for a given node. Better than
copy/pasting this code all over the place -->
<xsl:template name="node-name">
  <xsl:param name="node" />

  <xsl:if test="string($node) != ''">
    <xsl:choose>
      <xsl:when test="$node/pageTitle != ''">
        <xsl:value-of select="$node/pageTitle"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$node/@nodeName"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:if>
</xsl:template>

</xsl:stylesheet>

Steve Voltmer
Web Assistant
Marketing and Communications
PHONE:    812-877-8644
FAX:         812-877-8362


Room 121
5500 WABASH AVENUE
TERRE HAUTE, IN  47803-3920
www.rose-hulman.edu



Steve Voltmer
Web Assistant
Marketing and Communications
PHONE:    812-877-8644
FAX:         812-877-8362
                    

Room 121
5500 WABASH AVENUE
TERRE HAUTE, IN  47803-3920
www.rose-hulman.edu


Current Thread
Keywords