【发布时间】:2012-04-30 00:28:35
【问题描述】:
在最近从 Tridion 2009 升级到 2011 期间,部分 XSLT 组件模板停止工作。
组件模板从当前发布 XML 的 categoryXSD 部分读取子关键字。然后使用 webdav 加载每个关键字。
这部分的发布 XML 似乎已在 2011 年被删除。
有谁知道在使用 XSLT 模板时从 Category Tcm Id 获取子关键字的另一种方法?
【问题讨论】:
标签: tridion
在最近从 Tridion 2009 升级到 2011 期间,部分 XSLT 组件模板停止工作。
组件模板从当前发布 XML 的 categoryXSD 部分读取子关键字。然后使用 webdav 加载每个关键字。
这部分的发布 XML 似乎已在 2011 年被删除。
有谁知道在使用 XSLT 模板时从 Category Tcm Id 获取子关键字的另一种方法?
【问题讨论】:
标签: tridion
如果我在使用旧式 XSLT 组件模板时需要项目列表,我通常会创建一个“帮助”服务或 ASPX 页面,它会返回一个包含相关项目的 XML 文档。然后,您可以使用 XSLT 中的 Document() 函数调用该帮助程序。通常,这采用 ASPX 的形式存储在 CMS 服务上,例如 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,则没有必要这样做,因为内置了许多帮助程序。我强烈建议您考虑更新的模板技术,它们可以提供很多。
【讨论】:
我正在查看发布 XML,我认为您不走运。提到了<tcm:CategoriesXSD>,您可以从中获取类别 TcmUri,但如果您导航到类别 XML,则其中没有提及其子关键字。
因此,要么按照 Chris 的建议使用 XSLT Mediator,要么将此 XSLT 重写为 C# 模板。
【讨论】:
您没有提及您是使用 XSLT 中介器与模块化模板一起使用,还是使用普通的旧 XSLT 组件模板。你能澄清一下吗?
我使用 XSLT 中介器,并添加一个用 C# 编写的帮助器模板,该模板在执行 XSLT 之前将类别中的关键字添加到包中。然后可以使用参数将该列表作为 XML 文档进行访问。如果这对你有用,请告诉我,我会尝试挖掘我的代码示例。
【讨论】: