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



首先,总体描述:

有两个组件模板,新闻文章和新闻列表。 新闻文章是 Dreamweaver 模板,用于显示新闻文章的内容。 新闻列表是一个 xml 文件,其中包含有关所有新闻文章的聚合信息。

目前,内容作者必须发布新闻文章,然后重新发布新闻列表以重新生成 xml。

问题:

我的任务是让新闻文章的发布也重新生成和发布新闻列表。 通过 C#,我能够检索新闻列表组件的内容,从新闻文章中生成更新的 xml,并将其合并到新闻列表中的 xml 中。 我在发布新闻列表时遇到了麻烦。

我对文档的访问有限,但从我所拥有的情况来看,我相信使用静态 PublishEngine.Publish 方法将允许我做我需要的事情。 我相信第一个参数(项目(只是一个包含我更新的新闻列表的列表,第二个参数是一个新的发布指令,其中 RenderInstruction .RenderMode 设置为发布。 我对出版物的目标应该是什么有点迷茫。

我走在正确的轨道上吗? 如果是这样,感谢对发布方法调用的任何帮助,如果没有,有什么建议吗?

就像 Quirijn 建议的那样,代理查询是最干净的方法。

在代理不可用的情况下(即仅静态发布模型(,我通常从TBB生成新闻列表XML,将XML添加为二进制文件,而不是开始发布另一个组件或页面。 可以通过在 C# TBB 中调用此方法来执行此操作:

engine.PublishingContext.RenderedItem.AddBinary(
  Stream yourXmlContentConvertedToMemoryStream, 
  string filename, 
  StructureGroup location, 
  string variantId, 
  string mimeType)

根据您创建的新闻列表 XML 文件,使 variantId 唯一,以便不同的组件可以覆盖/更新同一文件。

更好的是,在页面模板而不是组件模板中执行此操作,以便每个页面生成一次新闻列表,而不是每个组件(如果每页有多个文章(。

您使用引擎走在正确的轨道上。发布(( 方法:

PublishEngine.Publish(
    new IdentifiableObject[] { linkedComponent },
    engine.PublishingContext.PublishInstruction,
     new List() { engine.PublishingContext.PublicationTarget });

您可以从模板的当前上下文中重用发布指令和目标。此示例显示一个组件,但它也应该在页面中工作。

要记住的一点是,这在 SDL Tridion 2011 SP1 中是不可能的,因为由于安全限制,不允许开箱即用的发布操作。我这里有一篇关于这个的文章 http://www.tridiondeveloper.com/the-story-of-sdl-tridion-2011-custom-resolver-and-the-allowwriteoperationsintemplates-attribute

最新更新