2013-02-16 76 views
0

我正在使用umbraco cms。在这里,我在多语种网站的导航菜单中遇到问题。我的xslt文件代码如下。它只会呈现英文菜单。我是umbraco的新手。所以任何人都可以告诉我,我必须在这段代码中改变它,使它根据不同的语言正确工作。我的代码是umbraco中的导航菜单

<?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" indent="yes"/> 

    <xsl:param name="currentPage"/> 
    <xsl:variable name="rootPage" select="$currentPage/ancestor-or-self::root"/> 
    <xsl:variable name="siteRoot" select="$currentPage/ancestor-or-self::*[@level = 1]" /> 
    <xsl:variable name="propertyAlias" select="/macro/PropertyAlias"/> 

    <xsl:template match="/"> 

    <xsl:variable name="homepage" select="$currentPage/ancestor-or-self::Homepage"/> 
    <xsl:variable name="nodeIds" select="umbraco.library:Split($homepage/*[name()=$propertyAlias],',')" /> 


     <ul class="navigation fc"> 
     <xsl:for-each select="$nodeIds/value"> 
     <xsl:variable name="linkNone" select="$rootPage//*[@isDoc][@id = string(current()/.)]"/> 
     <xsl:if test="string-length($linkNone/@id)> 0"> 
     <li> 
      <xsl:attribute name="class"> 
       <xsl:if test="$currentPage/ancestor-or-self::*[@level &gt; 1]/@id = $linkNone/@id"> 
      <xsl:text>selected</xsl:text> 
       </xsl:if> 
       <xsl:if test="position() = last()"> 
       <xsl:text> last</xsl:text> 
       </xsl:if> 

      </xsl:attribute> 

      <xsl:choose> 
      <xsl:when test="string-length($linkNone/umbracoUrlAlias) > 0"> 
       <a href="{$linkNone/umbracoUrlAlias}"> 
       <xsl:value-of select="$linkNone/@nodeName"/> 
       </a> 
       <xsl:if test="position() != last()"> 
       <xsl:text> | </xsl:text> 
       </xsl:if>    
      </xsl:when> 
      <xsl:otherwise> 
       <a href="{umbraco.library:NiceUrl($linkNone/@id)}"> 
       <xsl:value-of select="$linkNone/@nodeName"/> 
       </a> 
       <xsl:if test="position() != last()"> 
       <xsl:text> | </xsl:text> 
       </xsl:if>  
      </xsl:otherwise> 
      </xsl:choose> 

     </li> 
     </xsl:if> 
     </xsl:for-each> 

     </ul> 
    </xsl:template> 

</xsl:stylesheet>​ 
+0

在这种情况下,“正常工作”是指什么?什么不适合你? – MiMo 2013-02-16 15:10:30

回答

0

你不应该永远使用$ rootPage。对于多语言或多站点,您希望停止在当前内容上方的主页($ siteRoot)。

看起来您的导航是由主页上的选取器选择的。为什么不让内容树结构决定导航?在这种情况下可能会更简单。

如果这没有帮助,请发布您的内容树结构示例。