[英]Language selection with Umbraco and XSLT
我正在尝试使用XSLT在我的Umbraco网站(NL,ENG)上显示语言标记。 我的XSLT仅在该页面现在与另一个页面有关系时才显示标志,但是我也想在与另一个页面没有关系时显示这些标志(此标志需要导航到所选语言的索引页) 。
我的想法是使用变量,但我不知道您无法使用XSLT(XSLT的新名称)更改这些变量。
我的问题是:即使页面没有关系,有没有办法始终显示NL ENG标志。
这是我的XSLT代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
<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="xml" omit-xml-declaration="yes" />
<xsl:param name="currentPage" />
<xsl:template match="/">
<xsl:variable name="smallCase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:variable name="upperCase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<ul>
<xsl:for-each select="$currentPage/../../*">
<xsl:variable name="relations" select="umbraco.library:GetRelatedNodesAsXml($currentPage/@id)//relation [@parentId = $currentPage/@id]"/>
<xsl:variable name="nodeName" select="translate(@nodeName, $upperCase, $smallCase)" />
<xsl:for-each select="$relations">
<xsl:value-of select='@nodeName' />
<xsl:variable name="url" select="umbraco.library:NiceUrl(@childId)" />
<xsl:if test="contains($url, $nodeName)">
<li><a href="{$url}" class="{$nodeName}"><xsl:value-of select='$nodeName' /></a></li>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
我的三个结构如下所示(其中Startpagina与Home有关系,Algemeen与General有关系:
我不确定为什么要使用GetRelatedNodesAsXml方法。 我认为您在这里采用困难的方法。 我不确定是只显示当前语言的标志还是两个标志
这将显示当前语言的标志:
<xsl:variable name="languageNode" select="$currentPage/ancestor::*[@level = '1']" />
<ul>
<li>
<a href="{umbraco.library:NiceUrl($languageNode/@id)}" class="{$languageNode/@nodeName}">
<xsl:value-of select='$languageNode/@nodeName' /></a>
</li>
</ul>
如果您同时需要两个标志,请尝试以下操作:
<ul>
<xsl:for-each select="/root/*[@nodeType = 'add the nodeTypeID of your language items']">
<li>
<a href="{umbraco.library:NiceUrl(@id)}" class="{@nodeName}">
<xsl:value-of select='@nodeName' /></a>
</li>
</xsl:for-each>
</ul>
在第二种方法中,我使用@nodeType从内容树的第一级过滤掉不需要的项目。 确保对不同类型的内容项使用不同的文档类型。
我没有对此进行测试,但是它应该使您接近。 还要打开/ app_data /文件夹中的umbraco.config文件,它会显示您内容的XML模式。 使创建xpath查询更加容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.