SDL tridion2011SP1を使用しています。
XSLT Mediatorを使用して、特定のカテゴリのキーワードのリストを取得したいと思います。
誰かがこの状況に遭遇しましたか?はいの場合、あなたの意見を共有してください。
しかし、実際にカテゴリアイテムXMLを調べたところ、キーワードに関連する情報はありません。
SDL tridion2011SP1を使用しています。
XSLT Mediatorを使用して、特定のカテゴリのキーワードのリストを取得したいと思います。
誰かがこの状況に遭遇しましたか?はいの場合、あなたの意見を共有してください。
しかし、実際にカテゴリアイテム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メディエーターを呼び出すときに、「パッケージパラメーターを含める」の値を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>