Macros Umbraco XSLT RenderTemplate灾难

Macros Umbraco XSLT RenderTemplate灾难,macros,umbraco,Macros,Umbraco,需要一些XSLT和Umbraco的指导。对XSLT相当陌生,但我想我理解这些概念。就在一页上,我有两列,每列都有各自独立的可选择的内容。这是通过标准内容选择器属性(每列一个)完成的。问题是,我需要能够在页面上有两个不同的模板。因此,本质上,具有列的页面导航二必须在其自己的页面中呈现其两个子项 我使用一个通用XSLT处理一个列,我发现它基本上只呈现它找到的任何子项,但我希望它呈现用户选择的任何子项 我知道内容选择器返回页面的XML节点ID,可以与Render Template函数一起使用来显示它(

需要一些XSLT和Umbraco的指导。对XSLT相当陌生,但我想我理解这些概念。就在一页上,我有两列,每列都有各自独立的可选择的内容。这是通过标准内容选择器属性(每列一个)完成的。问题是,我需要能够在页面上有两个不同的模板。因此,本质上,具有列的页面导航二必须在其自己的页面中呈现其两个子项

我使用一个通用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>


有人知道为什么这不起作用,以及我要怎么做吗?上面给出的值要么太大,要么太小。

这里实际上有两个问题

调用RenderTemplate()

RenderTemplate
在使用替代模板时实际上需要两个参数,第一个是内容节点ID,第二个是要应用的所选模板


有关详细信息,请参阅以下链接:

错误太大或太小

通过在有问题的代码周围放置一个if-empty语句,可以很容易地解决这个问题


XSLT解析器喜欢假定某些值为null,而实际上它们不是。另一种方法是在保存时选中
跳过错误
复选框,但这会使调试实际错误的代码有点困难


希望能有所帮助。

您实际上有两个问题

调用RenderTemplate()

RenderTemplate
在使用替代模板时实际上需要两个参数,第一个是内容节点ID,第二个是要应用的所选模板


有关详细信息,请参阅以下链接:

错误太大或太小

通过在有问题的代码周围放置一个if-empty语句,可以很容易地解决这个问题


XSLT解析器喜欢假定某些值为null,而实际上它们不是。另一种方法是在保存时选中
跳过错误
复选框,但这会使调试实际错误的代码有点困难


希望能有所帮助。

谢谢你的回复,我已经环顾四周,从我所能看到的情况来看,你可以自己通过一个nodeID。我将使用templateID对其进行测试,但我认为这不是错误。我又翻了一番,似乎不管nodeID变量是什么,它都不会得到任何数据。我已经在模板设计器的页面上用“”打印了内容选择器,这样可以打印出正确的数据,但在XLST中使用它却无法获得数据。您使用的是哪个版本的Umbraco?Umbraco v 4.7.1(汇编版本:1.0.4281.20201)您可以看到该站点-啊,我想我知道它是什么。从4.5版开始,Umbraco更新了运行XSLT的XML模式。所以很多在线文档都已经过时了。尝试将
nodeID
的变量声明修改为以下内容:
。这里有更多关于它的信息。另外,如果您需要通过检查原始XML找出一些XPATH,请查看
~/App\u Data/Umbraco.config
文件。谢谢,不用担心。关于单个Arument RenderTemplate调用,您很可能是对的。我想它会使用指定给文档类型的默认模板。我个人并没有经常使用它来表达不同的意思。谢谢你的回复,我已经环顾四周,从我所能看到的情况来看,你可以自己通过一个nodeID。我将使用templateID对其进行测试,但我认为这不是错误。我又翻了一番,似乎不管nodeID变量是什么,它都不会得到任何数据。我已经在模板设计器的页面上用“”打印了内容选择器,这样可以打印出正确的数据,但在XLST中使用它却无法获得数据。您使用的是哪个版本的Umbraco?Umbraco v 4.7.1(汇编版本:1.0.4281.20201)您可以看到该站点-啊,我想我知道它是什么。从4.5版开始,Umbraco更新了运行XSLT的XML模式。所以很多在线文档都已经过时了。尝试将
nodeID
的变量声明修改为以下内容:
。这里有更多关于它的信息。另外,如果您需要通过检查原始XML找出一些XPATH,请查看
~/App\u Data/Umbraco.config
文件。谢谢,不用担心。关于单个Arument RenderTemplate调用,您很可能是对的。我想它会使用指定给文档类型的默认模板。就我个人而言,我还没有足够多地使用它来表达不同的意思。