xsl-list
[Top] [All Lists]

[xsl] XSL Navigation Choose Test

2012-08-27 16:01:15
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



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


<Prev in Thread] Current Thread [Next in Thread>
  • [xsl] XSL Navigation Choose Test, Voltmer, Steve T <=