Tridion 2009 - 从组件模板发布另一个组件

标签 tridion

一、整体描述:

有两个组件模板: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/

相关文章:

tridion - 根据旧版本模板发布 SDL Tridion 内容

tridion - 如何使用核心服务将外部文件导入 SDL Tridion 2011?

tridion - 创建新的 PublisherException 时如何获取 Tridion LocalizedMessage 的资源名称?

Tridion 2011 GUI 扩展,如何包含 css 文件?

installation - 是否可以强制 Tridion 2011 SP1 安装程序覆盖文件?

tridion - 预编译核心服务客户端与生成您自己的代理

tridion - 富文本字段的使用规则?

tridion - SDL Tridion 架构字段 "List of Links"选项

tridion - 访问组件内部组件模板中的字段

tridion - 在具有组件链接的组件上使用 SiteEdit/TridionUI 2012 启用内联编辑