一,整体说明:
有两个组件模板,NewsArticle和NewsList.NewsArticle是一个Dreamweaver模板,用于显示新闻文章的内容.NewsList是一个xml文件,其中包含有关所有新闻文章的汇总信息.
目前,内容作者必须发布新闻文章,然后重新发布新闻列表以重新生成xml.
问题:
我的任务是发布新闻文章也重新生成并发布新闻列表.通过C#,我能够检索新闻列表组件的内容,从新闻文章中生成更新的xml,并将其合并到新闻列表中的xml中.我在发布新闻列表时遇到了麻烦.
我对文档的访问权限有限,但据我所知,我相信使用静态PublishEngine.Publish方法可以让我做我需要的.我相信第一个参数(items)只是一个包含我更新的新闻列表的列表,第二个参数是一个新的PublishInstruction,RenderInstruction.RenderMode设置为Publish.我对pubTgets应该是什么感到有点迷茫.
我是在正确的轨道上吗?如果是这样,感谢发布方法调用的任何帮助,如果没有,任何建议?
像Quirijn建议的那样,经纪人查询是最干净的方法.
如果代理不可用(即仅静态发布模型),我通常会从TBB生成新闻列表XML,将XML添加为二进制文件,而不是启动另一个组件或页面的发布.您可以通过在C#TBB中调用此方法来执行此操作:
engine.PublishingContext.RenderedItem.AddBinary(
Stream yourXmlContentConvertedToMemoryStream,
string filename,
StructureGroup location,
string variantId,
string mimeType)
Run Code Online (Sandbox Code Playgroud)
根据您创建的新闻列表XML文件使variantId唯一,以便不同的组件可以覆盖/更新同一文件.
更好的是,在页面模板而不是组件模板中执行此操作,以便每页生成一次新闻列表,而不是每个组件(如果每页有多篇文章).
你在这里使用engine.Publish()方法在正确的轨道上:
PublishEngine.Publish(
new IdentifiableObject[] { linkedComponent },
engine.PublishingContext.PublishInstruction,
new List() { engine.PublishingContext.PublicationTarget });
Run Code Online (Sandbox Code Playgroud)
您可以从模板的当前上下文中重用PublishInstruction和Target.此示例显示了一个Component,但它也应该在页面中工作.
需要记住的一件事是,这在SDL Tridion 2011 SP1中是不可能的,因为出于安全限制,不允许发布操作开箱即用.我在这里有一篇关于此的文章http://www.tridiondeveloper.com/the-story-of-sdl-tridion-2011-custom-resolver-and-the-allowwriteoperationsintemplates-attribute
| 归档时间: |
|
| 查看次数: |
365 次 |
| 最近记录: |