2012-07-20 75 views
3

我有一个Dynamic XML模板,它将XML发布到Broker数据库,然后使用Component Presentation工厂动态加载。Tridion 2009 SP1:图像缩略图 - 如何发布原始图像?

此Xml包含图像的URL。我需要一个缩略图和一个完整的图像可用。我已经设法使用Image Resizer TBB生成缩略图,但是我希望这会添加单独的软件包和可引用的二进制文件,但似乎覆盖了全尺寸图像。

有没有一种方法可以让我的Xml和Package没有编写自己的自定义TBB?

+1

>>“没有写我自己定制的TBB?”No. – 2012-07-20 12:27:56

回答

9

外表套上内容传送可以存储多个变体同一多媒体组分。每个这样的变体都有一个标识它的ID,并且没有ID的变体(在新版本中#def#作为它的ID)被称为默认变体。

当您从DWT引用图像时,它会自动添加为渲染引擎执行DWT时打包的项目。此项目稍后由作为默认完成操作一部分的默认“发布二进制包”TBB进行处理。包中的发布二进制文件TBB通过调用AddBinary来发布二进制文件 - 您可以通过查看在Tridion论坛here(需要登录)上发布的大多数默认TBB的原始代码来验证这一点。

appliedTemplateUri = new TcmUri(item.Properties[Item.ItemPropertyTemplateUri]); 
... 
engine.AddBinary(itemUri, appliedTemplateUri, targetStructureGroup, 
       data, fileName); 

AddBinary方法被称为在TOM.NET CHM定义为:

public abstract string AddBinary(
    TcmUri componentUri, 
    TcmUri templateUri, 
    TcmUri targetLocation, 
    byte[] data, 
    string fileName 
) 
  • componentUri 多媒体成分这个项是指
  • te mplateUri 在其上下文这个AddBinary调用执行(作为变形ID)模板
  • targetLocation 位置发布二进制文件(如果为null,发布到标准的路径)
  • 数据 二进制数据公布
  • 文件名 文件名发布下

所以文件,你可以在最后一次通话看到AddBinary,在包装TBB发布二进制文件采用的是属性(看看here如果你从来没有听说过的Item.Properties所),以确定哪些变体发布(如果该属性不存在,则发布该二进制文件作为默认变体)。

掌握了所有这些知识后,任务变得非常简单:您必须确保MMC中包含两个二进制项目,每个项目具有不同的Item.ItemPropertyTemplateUri属性值。

默认的Image Resizer TBB替换它调整大小的项目的二进制内容,并且不设置此属性。因此,您必须编写的最少代码是重复项目的预处理器TBB或重新添加项目的后处理器TBB。在这两种情况下,TBB都必须设置“魔法”属性。

有用的链接:

+0

感谢您的全面解答。我会试试这个。 – 2012-07-20 13:23:22

1

基本上所有的图像调整TBB确实是已经调整图像中包,所以默认完成操作TBBcan发布它(使用AddBinary()调用)。

所以你需要的是Resizer TBB逻辑的轻微改变(你需要在这里自己做点什么),这样它就不会重新调整包中的原始项目,而是发布它的一个变体。然后在交付方有两个可用的图像(例如,通过将调整大小的图像发送给不同的结构组来区分它们)。