I have been tasked with 'fixing' a bug in Umbraco whereby 'folder' pages are being shown as hyperlinks in the sitemap page. I have had a crack at both the razor and xslt versions of these sitemap pages but for the life of me I cannot get it to work. All I want to simpy do is if the page in the sitemap tree is a folder type then show it's name as text and if it is a page type then show it's name with a link to the page. I even tried using a custom propert instead called showAsLinkInSitemap with a true/false value to for each node (folder/page) but even this does not work, I just get nothing!
I am a complete amateur when it comes to xslt so no idea how to check for a null value using this language. If anyone could help, at all, I would greatly appreciate it as this has got me totally stumped with what I thought would be such a simple thing to do!
So if the property showAsLinkInSitemap is set to true for the page (or folder) it will show as a hyperlink otherwise it will just show as text in a span tag.
Customising sitemap.xslt
I have been tasked with 'fixing' a bug in Umbraco whereby 'folder' pages are being shown as hyperlinks in the sitemap page. I have had a crack at both the razor and xslt versions of these sitemap pages but for the life of me I cannot get it to work. All I want to simpy do is if the page in the sitemap tree is a folder type then show it's name as text and if it is a page type then show it's name with a link to the page. I even tried using a custom propert instead called showAsLinkInSitemap with a true/false value to for each node (folder/page) but even this does not work, I just get nothing!
Anyway, here's what I've tried:
<xsl:template name="drawNodes">
<xsl:param name="parent"/>
<xsl:if test="umbraco.library:IsProtected($parent/@id, $parent/@path) = 0 or (umbraco.library:IsProtected($parent/@id, $parent/@path) = 1 and umbraco.library:IsLoggedOn() = 1)">
<ul><xsl:for-each select="$parent/* [@isDoc and string(umbracoNaviHide) != '1' and @level <= $maxLevelForSitemap]">
<li>
<xsl:if test="string(showAsLinkInSitemap) = '1' or string(showAsLinkInSitemap) = 'null'">
<a href="{umbraco.library:NiceUrl(@id)}">
<xsl:value-of select="@nodeName"/></a>
<xsl:if test="count(./* [@isDoc and string(umbracoNaviHide) != '1' and @level <= $maxLevelForSitemap]) > 0">
<xsl:call-template name="drawNodes">
<xsl:with-param name="parent" select="."/>
</xsl:call-template>
</xsl:if>
</xsl:if>
<xsl:if test="string(showAsLinkInSitemap) = '0'">
<xsl:value-of select="@nodeName"/>
<xsl:if test="count(./* [@isDoc and string(umbracoNaviHide) != '1' and @level <= $maxLevelForSitemap]) > 0">
<xsl:call-template name="drawNodes">
<xsl:with-param name="parent" select="."/>
</xsl:call-template>
</xsl:if>
</xsl:if>
</li>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:template>
I am a complete amateur when it comes to xslt so no idea how to check for a null value using this language. If anyone could help, at all, I would greatly appreciate it as this has got me totally stumped with what I thought would be such a simple thing to do!
Hi. If your "showAsLinkInSitemap" property is defined as a "True/false" property then "showAsLinkInSitemap = 1" should be enough.
Hi Rodion,
Tried what you suggested and just get an xslt error:Unexpected token '=' in the expression.
It does not seem to like the double equals ==. With just one equal = I do not get ann error but also get nothing else.
I've now worked it out as I've discovered the use of xsl:choose, xsl:when and xsl:otherwise. Here's the new code (put between the li tags):
<xsl:choose>
<xsl:when test="string(showAsLinkInSitemap) = '1'">
<a href="{umbraco.library:NiceUrl(@id)}">
<xsl:value-of select="@nodeName"/></a>
</xsl:when>
<xsl:otherwise>
<span><xsl:value-of select="@nodeName"/></span>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="count(./* [@isDoc and string(umbracoNaviHide) != '1' and @level <= $maxLevelForSitemap]) > 0">
<xsl:call-template name="drawNodes">
<xsl:with-param name="parent" select="."/>
</xsl:call-template>
</xsl:if>
So if the property showAsLinkInSitemap is set to true for the page (or folder) it will show as a hyperlink otherwise it will just show as text in a span tag.
is working on a reply...