2012-07-31 50 views
6

我试图做实现由克里斯这里所描述的组件自定义解析: http://www.tridiondeveloper.com/the-story-of-sdl-tridion-2011-custom-resolver-and-the-allowwriteoperationsintemplates-attribute如何使用Tridion Resolver从发布中删除项目?

我想删除一些组件所使用的二进制文件(主要是PDF格式的),并防止他们出版。我能够使用item.GetListUsedItems方法获取使用的项目列表。我如何删除它们?使用

:2009年的tridion

+0

我们可以让你感兴趣的是承诺[51区Tridion特定提案](http://area51.stackexchange.com/proposals/38335/tridion?referrer=gPujQMxthNCNn9xqeeO2NA2)。如果您有时间,请使用同一个SO帐户注册。 – 2012-08-01 08:00:57

回答

9

在发布时的分解过程决定哪些项目应该被公布,当你发布一个结构组一样,默认的解析器将在结构组添加所有页面的发布交易。

解析器仅处理发布事务中可直接发布的项目,这些项目是页面和动态组件演示。因此,解析器不处理链接的多媒体组件,这些由模板代码通过调用AddBinary()方法发布。

如果您想要从发布操作中删除多媒体组件,您应该查看正在处理这些组件的组件模板(如果将它们添加到软件包中,TBB通常将其选中并发布它们)。但请记住,多媒体组件至少需要发布一次,否则您将永远无法在您的演示服务器上获取它。

+1

+1,以指出区别@Bart。 Frank van Puffelen在[TridionWorld](http://www.sdltridionworld.com/community/2011_extensions/binaryeventtracker)上绘制了两种方法(通过模板代码/ _ Add_inary()_和_explicit_通过多媒体发布和动态组件模板) ASPX)。 – 2012-08-02 00:42:42

3

检查下面的代码片段删除,您需要检查是否多媒体为PDF时或没有,但将让你去。这里是引用链接,很好地解释了示例代码(下面的代码来自同一篇文章)。

http://www.tridiondeveloper.com/a-custom-resolver-in-practice

 Component component = (Component)item; 
     if (component.ComponentType == ComponentType.Multimedia) 
     { 
      foreach (ResolvedItem resolvedItem in originalResolveItemList) 
      { 
       if (resolvedItem.Item.Id != item.Id) 
       { 
        resolvedItems.Remove(resolvedItem); // to remove .. 
       } 
      } 
     } 
+0

我认为resolveditems列表包含组件。我试图删除组件内的二进制文件 – user1373140 2012-07-31 14:04:36

+0

如何在组件内发布二进制文件?它是通过DWT代码吗?如果是通过DWT,那么为什么要使用解析器移除二进制文件,因为最终会导致破坏的二进制链接。如果您正在发布二进制文件,上面的代码将满足您的需求,并检查条件“ComponentType.Multimedia” – 2012-07-31 18:20:47