在最近从Tridion 2009升级到2011年期间,部分XSLT组件模板停止工作。
组件模板从当前发布XML的categoryXSD部分读取子关键字。然后使用webdav加载每个关键字。
出版物XML的这一部分似乎已于2011年删除。
有没有人知道在使用XSLT模板时从类别Tcm Id获取子关键字的另一种方法?
答案 0 :(得分:3)
我正在查看Publication XML,我认为你运气不好。有一个提到<tcm:CategoriesXSD>
,你可以从中获得Category TcmUri,但如果你导航到Category XML,那里就没有提到它的子关键字。
因此,要么像Chris建议的那样使用XSLT Mediator,要么将此XSLT重写为C#模板。
答案 1 :(得分:3)
如果我在使用旧式XSLT组件模板时需要项目列表,我通常会创建一个“帮助程序”服务或ASPX页面,它返回包含相关项目的XML文档。然后,您可以使用XSLT中的Document()函数调用该帮助程序。通常,这采用存储在CMS服务上的ASPX的形式,如http://tridion.local.url/web/helpers/GetListXml.aspx?uri=SomeOrgItemURI
您可以使用GetListXml.aspx中的TOM API使用GetListItem查询项目并将响应写入输出。
然后在您的XSLT中,您可以使用类似<xsl:variable name="KEYWORDS" select="document('http://tridion.local.url/web/helpers/GetListXml.aspx?uri=$CAT_URI')"/>
的内容。然后,您可以遍历新变量中的关键字节点。
然而,如果您使用模块化模板和SDL Tridion World上的XSLT Mediator,因为内置了许多帮助程序,所以这些都不是必需的。我强烈建议考虑更新的模板技术,它们有很多可供选择。
答案 2 :(得分:1)
您没有提及是否使用XSLT介体与模块化模板一起使用,或者您使用的是普通的旧XSLT组件模板。你能说清楚吗?
我使用XSLT Mediator,并添加一个用C#编写的帮助器模板,它在执行XSLT之前将类别中的关键字添加到包中。然后可以使用参数将该列表作为XML文档进行访问。如果这对您有用,请告诉我,我会尝试挖掘我的代码示例。