Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tridion 2009-从组件模板发布另一个组件_Tridion - Fatal编程技术网

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

Tridion 2009-从组件模板发布另一个组件,tridion,Tridion,首先,总体描述: 有两个组件模板,NewsArticle和NewsList。NewsArticle是Dreamweaver模板,用于显示新闻文章的内容。新闻列表是一个xml文件,包含所有新闻文章的聚合信息 目前,内容作者必须发布新闻文章,然后重新发布新闻列表以重新生成xml 问题: 我的任务是发布一篇新闻文章,并重新生成和发布新闻列表。通过C#,我能够检索新闻列表组件的内容,从新闻文章生成更新的xml,并将其合并到新闻列表的xml中。我在发布新闻列表时遇到了麻烦 我对文档的访问有限,但从我现有的

首先,总体描述:

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

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

问题:

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

我对文档的访问有限,但从我现有的情况来看,我相信使用static PublishEngine.Publish方法将允许我做我需要的事情。我相信第一个参数(items)只是一个包含更新新闻列表的列表,第二个参数是一个新的PublishInstruction,RenderInstruction.RenderMode设置为Publish。我对宣传目标应该是什么有点迷茫


我走对了吗?如果是这样,我们非常感谢您对Publish方法调用的任何帮助,如果不是这样,我们将提供任何建议。

您使用engine.Publish()方法的思路是正确的:

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


需要记住的一点是,这在SDL Tridion 2011 SP1中是不可能的,因为由于安全限制,发布操作不允许开箱即用。我在这里有一篇关于这方面的文章

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

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

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


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

太好了,谢谢!我相信你会在Tridion网站上看到很多我。我会小心这种逻辑。假设您的newslist.xml包含10篇文章。如果一次发布全部10条新闻,新闻列表页面将被放入队列10次。这个xml到底是干什么的?如果只是创建所有新闻文章的列表,为什么不使用代理查询?该列表将始终是最新的,无需重新发布。
PublishEngine.Publish(
    new IdentifiableObject[] { linkedComponent },
    engine.PublishingContext.PublishInstruction,
     new List() { engine.PublishingContext.PublicationTarget });
engine.PublishingContext.RenderedItem.AddBinary(
  Stream yourXmlContentConvertedToMemoryStream, 
  string filename, 
  StructureGroup location, 
  string variantId, 
  string mimeType)