homepage Welcome to WebmasterWorld Guest from 54.205.254.108
register, free tools, login, search, pro membership, help, library, announcements, recent posts, open posts,
Become a Pro Member

Visit PubCon.com
Home / Forums Index / Code, Content, and Presentation / XML Development
Forum Library, Charter, Moderators: httpwebwitch

XML Development Forum

    
Choose Test for Parent Nodes Without Children
Choose Test for Parent Nodes Without Children
svoltmer




msg:4489232
 7:50 pm on Aug 28, 2012 (gmt 0)

Here is a link to the page with xslt navigation:
edit-www.rose-hulman.edu/.../alumni-affairs-2.aspx

I wanted ONLY the top root nodes, the ones on the tab navigation to be checked on this test for child nodes. If they have children they should not get a link assigned to them as parents, but I want all subsuquent parents that have children to have links.

Here is my 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>

[edited by: httpwebwitch at 5:04 pm (utc) on Aug 30, 2012]
[edit reason] removed smilies [/edit]

 

Global Options:
 top home search open messages active posts  
 

Home / Forums Index / Code, Content, and Presentation / XML Development
rss feed

All trademarks and copyrights held by respective owners. Member comments are owned by the poster.
Home ¦ Free Tools ¦ Terms of Service ¦ Privacy Policy ¦ Report Problem ¦ About ¦ Library ¦ Newsletter
WebmasterWorld is a Developer Shed Community owned by Jim Boykin.
© Webmaster World 1996-2014 all rights reserved