【问题标题】:Language selection with Umbraco and XSLT使用 Umbraco 和 XSLT 进行语言选择
【发布时间】:2013-07-04 15:03:33
【问题描述】:

我正在尝试使用 XSLT 在我的 Umbraco 网站(NL、ENG)上显示语言标志。我的 XSLT 仅在页面现在与另一个页面有关系时显示标志,但我也想在与另一个页面没有关系时显示标志(此标志需要导航到所选语言的索引页面) .

我的想法是使用变量,但我不知道您不能使用 XSLT 更改这些(对于 XSLT 来说有点新)。

我的问题是:有没有办法始终显示 NL ENG 标志,即使页面没有关系。

这是我的 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"
    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 有关系:

【问题讨论】:

    标签: xslt umbraco


    【解决方案1】:

    我不确定您为什么使用 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 查询变得更加容易。

    【讨论】:

    • 我需要显示两个标志。我正在使用 GetRelatedNodesAsXml,因为我想导航到相关页面。因此,如果我的“Algemeen”与“General”相关,并且用户在“Algemeen”页面上并单击英文标志,他将被导航到“General”。如果“Algemeen”没有相关页面并且用户单击英文标志,他将导航到 /eng/index.aspx 或其他内容。
    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多