如果我们在XSLT TBB(XSLT Mediator)中有类别tcm id,如何获取关键字列表

时间:2012-06-26 12:48:48

标签: tridion tridion-2011

我正在使用SDL tridion 2011 SP1。

我想使用XSLT Mediator获取给定类别下的关键字列表。

有任何人遇到这种情况,如果是,请分享您的观点。

但是当我真正查看Category Item XML时,它没有任何与其关键字相关的信息。

1 个答案:

答案 0 :(得分:3)

您需要创建一个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>