2012-02-07 2 views
1

XSLT 및 Umbraco에 대한 약간의 지침이 필요합니다. XSLT를 처음 접했을 때 나는 개념을 이해하고 있다고 생각한다. 오른쪽에는 한 페이지에 두 개의 열이 있습니다. 각 열은 각각 개의 고유 한 콘텐츠로 구성되어 있습니다. 이 작업은 표준 콘텐츠 선택기 속성 (각 열에 하나씩)을 통해 수행됩니다. 문제는 페이지에 두 개의 다른 템플릿을 가질 수 있어야한다는 것입니다. 따라서 본질적으로 열이있는 페이지를 탐색 한 두 페이지는 자체 페이지에서 하위 항목 두 개를 렌더링해야합니다.Umbraco XSLT RenderTemplate Woes

이 항목은 일반적인 XSLT를 사용하여 하나의 열을 사용하여 작업 한 것입니다.이 항목은 기본적으로 발견 한 하위 항목을 렌더링하지만, 사용자가 선택한 항목을 렌더링하려고합니다.

콘텐츠 선택기가 페이지의 XML 노드 ID를 반환하고이를 표시하기 위해 렌더링 템플릿 함수와 함께 사용할 수 있다는 것을 알고 있습니다. (예를 들어 있습니다.)하지만 내 자신의 속성을 추가 할 때는 그런 다음 RenderTemplate 함수로 전달하여 잃어 버리게됩니다. 이 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" 
    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"> 
    <xsl:output method="html" omit-xml-declaration="yes"/> 
<xsl:param name="currentPage"/> 
<xsl:variable name="nodeID" select="data[@alias='leftColumn']"/> 
<xsl:template match="/"> 
     <xsl:value-of select="umbraco.library:RenderTemplate($nodeID)" disable-output-escaping="yes"/> 
</xsl:template> 

</xsl:stylesheet> 

모든 일이 작동하지 않는 이유를 알고 어떻게 난 후 무엇을 할

? 위의 값은 너무 크거나 너무 작은 오류를 나타냅니다. RenderTemplate를 호출 당신은 실제로 여기에 두 가지 문제가

답변

1

...

(), 컨텐츠 노드 ID가되는 첫 번째, 두 번째 존재 대안 템플릿을 사용하는 경우

RenderTemplate 실제로 두 개의 인수가 필요합니다 선택한 템플릿을 적용합니다.

<xsl:value-of 
    select="umbraco.library:RenderTemplate($nodeID, $templateID)" 
    disable-output-escaping="yes" /> 

자세한 내용은 다음 링크를 참조하십시오 : http://our.umbraco.org/wiki/reference/umbracolibrary/rendertemplate

너무 크거나 너무 작은 오류

이 하나의 코드 주위에 경우 빈 문을 넣어 해결하기 위해 간단합니다 문제.

<xsl:if test="$nodeID != ''"> 
    <xsl:value-of 
     select="umbraco.library:RenderTemplate($nodeID, $templateID)" 
     disable-output-escaping="yes" /> 
</xsl:if> 

XSLT 파서는 특정 값이 실제로는 그렇지 않을 때 null이라고 생각하는 것을 좋아합니다. 이것에 의해 얻을 수있는 또 다른 방법은 저장시 Skip Errors 체크 박스를 체크하는 것이지만, 이것은 실제 에러 코드를 디버깅하는 데 약간의 고통을줍니다.

희망이 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 둥글게 보였으며 nodeID를 전달할 수있는 것으로 보았습니다. 나는 그것을 templateID로 테스트 할 것이지만, 나는 에러라고 생각하지 않는다. 나는 좀 더 자세히 살펴 보았고 nodeID 변수가 어떤 데이터도 가져 오지 않는다고 생각한다. ''를 사용하여 템플릿 디자이너의 페이지에 내용 선택기를 인쇄하고 올바른 데이터를 인쇄하지만 절대로 XLST에서 사용하지 않습니다. 자료. – Dilvid

+0

사용중인 Umbraco의 버전은 무엇입니까? –

+0

umbraco v 4.7.1 (어셈블리 버전 : 1.0.4281.20201) 사이트를 볼 수 있습니다 - http://priority.wireddotnet.co.uk/ – Dilvid