一、整体描述:
有两个组件模板:NewsArticle 和 NewsList。 NewsArticle 是一个 Dreamweaver 模板,用于显示新闻文章的内容。 NewsList 是一个 xml 文件,其中包含有关所有新闻文章的聚合信息。
目前,内容作者必须发布新闻文章,然后重新发布新闻列表以重新生成 xml。
问题:
我的任务是在发布新闻文章的同时重新生成并发布新闻列表。通过 C#,我能够检索新闻列表组件的内容,从新闻文章生成更新的 xml,并将其合并到新闻列表中的 xml 中。我在发布新闻列表时遇到了麻烦。
我对文档的访问权限有限,但从我所拥有的情况来看,我相信使用静态 PublishEngine.Publish 方法将允许我做我需要的事情。我相信第一个参数(items)只是一个包含我更新的新闻列表的列表,第二个参数是一个新的 PublishInstruction,其中 RenderInstruction.RenderMode 设置为 Publish。我对 PublicationTargets 应该是什么有点迷失。
我走在正确的道路上吗?如果是这样,我们将不胜感激对 Publish 方法调用的任何帮助,如果不是,有什么建议吗?
最佳答案
就像 Quirijn 建议的那样,代理查询是最简洁的方法。
在代理不可用的情况下(即仅静态发布模型),我通常从 TBB 生成新闻列表 XML,并将 XML 添加为二进制文件,而不是开始发布另一个组件或页面。您可以通过在 C# TBB 中调用此方法来完成此操作:
engine.PublishingContext.RenderedItem.AddBinary(
Stream yourXmlContentConvertedToMemoryStream,
string filename,
StructureGroup location,
string variantId,
string mimeType)
使您创建的新闻列表 XML 文件的variantId 唯一,以便不同的组件可以覆盖/更新同一文件。
更好的是,在页面模板而不是组件模板中执行此操作,以便每个页面而不是每个组件生成一次新闻列表(如果每个页面有多篇文章)。
关于Tridion 2009 - 从组件模板发布另一个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10448539/