2013-07-04 2 views
0

XSLT를 사용하여 Umbraco 웹 사이트 (NL, ENG)에 언어 플래그를 표시하려고합니다. 내 XSLT는 페이지가 다른 페이지와 관계가있는 경우에만 플래그를 표시하지만 다른 페이지와 관계가없는 경우 플래그를 표시하려고합니다 (이 플래그는 선택한 언어의 인덱스 페이지로 이동해야 함) .Umbraco 및 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 집과의 관계를 가지고있는 곳 (모양과 Algemeen 일반과의 관계가 있습니다

Tree view

답변

0

I을 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> 

을 seconde 방식에서 내가 원하지 않는 필터링 할 수 @nodeType를 사용 콘텐츠 트리의 첫 번째 수준에있는 항목 다른 유형의 컨텐트 항목에 대해 서로 다른 문서 유형을 사용해야합니다.

테스트하지는 않았지만 가까운 시일 내에 보내 주시기 바랍니다. /app_data/폴더에서 umbraco.config 파일을 열면 콘텐츠에 대한 XML 스키마가 표시됩니다. xpath 쿼리를보다 쉽게 ​​만들 수 있습니다.

+0

두 플래그를 모두 표시해야합니다. 나는 관련 페이지로 이동하기를 원하기 때문에 GetRelatedNodesAsXml을 사용하고있다. 그래서 내 "Algemeen"이 "General"과 관련이 있고 사용자가 "Algemeen"페이지에 있고 영어 플래그를 클릭하면 "General"로 이동합니다. "Algemeen"과 관련된 페이지가없고 사용자가 영어 플래그를 클릭하면 /eng/index.aspx 또는 다른 것으로 이동합니다. – Marcel