我正在使用 SDL tridion 2011 SP1。
我想使用 XSLT Mediator 获取给定类别下的关键字列表。
有没有人遇到过这种情况,如果有,请分享您的看法。
但是当我实际查看 Category Item XML 时,它没有任何与其关键字相关的信息。
我正在使用 SDL tridion 2011 SP1。
我想使用 XSLT Mediator 获取给定类别下的关键字列表。
有没有人遇到过这种情况,如果有,请分享您的看法。
但是当我实际查看 Category Item XML 时,它没有任何与其关键字相关的信息。
您将需要创建一个 C# TBB 以将类别关键字插入包中,然后将其作为 XSLT 中的参数进行访问。
您可以使用一段 c#,如下所示:
class GetCategoryKeywords : TemplateBase
{
public override void Transform(Engine engine, Package package)
{
Initialize(engine, package);
String webDavPathCategory = package.GetValue("CategotryWebDavPath");
Category cat = (Category)engine.GetObject(webDavPathCategory);
XmlDocument keywordsXml = new XmlDocument();
keywordsXml.LoadXml(cat.GetListKeywords().OuterXml);
Item output = package.CreateXmlDocumentItem(ContentType.Xml, keywordsXml);
package.PushItem("CategoryKeywords", output);
}
}
这将在包含关键字的名为 CategoryKeywords 的包中放置一个 XML 文档。然后,当您调用 XSLT 中介时,将“Include Package Paramters”值设置为 true,并将参数添加到 XSLT 的顶部,如下所示:
<xsl:param name="CategoryKeywords"/>
然后,您可以将新参数作为变量进行循环,对它执行所需的任何 XPath 查询。以下示例可能会有所帮助:
<xsl:variable name="URI" select="$CategoryKeywords//tcm:ListUsedItems/tcm:Item[@Title=$VALUE]/@ID" />
<xsl:for-each select="$CategoryKeywords//tcm:ListItems/tcm:Item">
Do something
<xsl:for-each>