【问题标题】:How to remove items from publishing using a Tridion Resolver?如何使用 Tridion Resolver 从发布中删除项目?
【发布时间】:2012-08-01 15:48:33
【问题描述】:

我正在尝试为组件实现自定义解析器,如 Chris 所述: http://www.tridiondeveloper.com/the-story-of-sdl-tridion-2011-custom-resolver-and-the-allowwriteoperationsintemplates-attribute

我想删除组件中使用的一些二进制文件(主要是 pdf)并阻止它们发布。我可以使用 item.GetListUsedItems 方法获取使用过的物品列表。如何删除它们?

使用:tridion 2009

【问题讨论】:

标签: tridion resolver


【解决方案1】:

在发布时,解析器进程确定应该发布哪些项目,例如当您发布结构组时,默认解析器会将结构组中的所有页面添加到发布事务中。

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

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

【讨论】:

  • +1 指出差异,@Bart。 Frank van Puffelen 在TridionWorld 上绘制了两种方法(隐式通过模板代码/AddBinary()显式通过多媒体发布和动态组件模板)。
【解决方案2】:

检查下面的代码 sn-p 删除,你需要检查多媒体是否是 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 ..
                }
            }
        }

【讨论】:

  • 我认为已解决的项目列表有组件。我正在尝试删除组件内的二进制项
  • 如何在组件中发布二进制文件?是通过 DWT 代码吗?如果是通过 DWT,那么为什么要使用解析器删除二进制文件,因为最终会出现损坏的二进制链接。如果您要发布二进制文件,上面的代码将满足您对ComponentType.Multimedia的检查条件的需求
猜你喜欢
  • 2012-06-11
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 2019-09-26
  • 2019-08-21
  • 2012-03-19
  • 1970-01-01
  • 2013-04-24
相关资源
最近更新 更多