2012-02-07 58 views
1

孤男寡女XSLT和一把umbraco一些指导。对XSLT来说相当新颖,但我想我理解这些概念。右一个页面上我有两列,每一个都有自己独立的可拾取内容。这是通过标准内容选择器属性完成的(每列一个)。问题是我需要能够在页面上有两个不同的模板。所以本质上页面导航了两个列,它必须在它自己的页面中呈现它的两个子项。一把umbraco XSLT RenderTemplate困境

我有一个使用通用XSLT,我发现,基本上只是使得它发现什么都子项有一列这方面的工作,但我希望它使用户拿起什么都之一。

我知道内容选取器返回页面的XML节点ID,并且可以与Render Template函数一起使用来显示它(我有一个例子),但是当涉及到在我自己的属性中添加和然后将它们传递给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> 

任何一个知道为什么这不起作用怎么办我后?以上给出的值不是太大就是太小错误。

回答

1

实际上,你这里有两个问题...

调用RenderTemplate()使用另一种模板,第一个是内容节点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解析器喜欢假定某些值为空,实际上它们不是。此获得的另一种方法是检查在保存时的Skip Errors复选框,但是这使得调试实际的错误代码有点痛。

希望它有帮助。

+0

感谢您的答复,我环顾四周,从我能看到,你可以在它自己的一个节点ID通过。我会给它一个templateID的测试,但我不认为这是错误。我挖了一点,似乎无论nodeID变量从来没有获取任何数据。我打印的内容选择器缩小页面模板设计师“<一把umbraco:项目字段=‘leftColumn’RUNAT =‘服务器’/>”,并打印出正确的数据,但使用它在XLST它从来没有得到数据。 – Dilvid 2012-02-07 14:15:12

+0

你使用哪种版本的Umbraco? – 2012-02-07 14:17:39

+0

umbraco v 4.7.1(Assembly version:1.0.4281.20201) 你可以看到网站 - http://priority.wireddotnet.co.uk/ – Dilvid 2012-02-07 14:26:02