【问题标题】:Tridion 2009 - Publish another Component from a Component TemplateTridion 2009 - 从组件模板发布另一个组件
【发布时间】:2012-05-04 12:06:03
【问题描述】:

一、整体说明:

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

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

问题:

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

我对文档的访问权限有限,但就我所拥有的而言,我相信使用静态 PublishEngine.Publish 方法可以让我做我需要的事情。我相信第一个参数(项目)只是一个包含我更新的新闻列表的列表,第二个参数是一个新的 PublishInstruction,其中 RenderInstruction.RenderMode 设置为 Publish。我对 PublicationTargets 应该是什么有点迷茫。

我在正确的轨道上吗?如果是这样,对 Publish 方法调用的任何帮助表示赞赏,如果没有,有什么建议吗?

【问题讨论】:

    标签: tridion


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      使用 engine.Publish() 方法,你在正确的轨道上:

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

      您可以从模板的当前上下文中重复使用 PublishInstruction 和 Target。此示例显示了一个组件,但它也应该在页面中工作。

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

      【讨论】:

      • 完美,谢谢!我相信您会在 Tridion 网站上看到很多我。
      • 我会小心这种逻辑。假设您的 newslist.xml 包含 10 篇文章。如果您同时发布所有 10 个,则新闻列表页面将被放入队列 10 次。这个 xml 到底是干什么用的?如果只是创建所有新闻文章的列表,为什么不使用经纪人查询?该列表将始终保持最新状态,无需重新发布。
      猜你喜欢
      • 1970-01-01
      • 2012-07-01
      • 2017-04-19
      • 1970-01-01
      • 2012-04-29
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多