我有一个动态组件模板,它将XML发布到代理数据库,然后使用组件表示工厂动态加载。
此Xml包含指向图像的URL。我需要一个缩略图和一个完整的图像可用。我已经设法使用Image Resizer TBB来生成缩略图,然而,我希望这将添加单独的包项目和可引用的二进制文件,但它似乎覆盖了完整大小的图像。
有没有一种方法,我可以在不编写自己的自定义TBB的情况下,将Xml和包都放入其中?
发布于 2012-07-20 20:12:29
Tridion Content Delivery可以存储同一多媒体组件的多个变体。每个这样的变体都有一个标识它的ID,没有ID的变体(在新版本中是#def#作为它的ID)被称为默认变体。
从DWT参照图像时,当渲染引擎执行DWT时,该图像将自动作为项目添加到包中。此项目随后由默认的“在包中发布二进制文件”TBB处理,该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
)多媒体组件此项引用执行此
下发布文件
因此,正如您在对AddBinary最后一次调用中所看到的,软件包TBB中发布的二进制文件使用一个属性(如果您从未听说过Item.Properties,请查看here )来确定要发布的变量(如果该属性不存在,则将二进制文件发布为默认变量)。
掌握了所有这些知识之后,任务就变得非常简单:您必须确保MMC的包中有两个二进制项,每个项都有不同的Item.ItemPropertyTemplateUri属性值。
默认的Image Resizer TBB替换它调整大小的项目的二进制内容,并且不设置此属性。因此,您需要编写的最少代码要么是复制项目的预处理器TBB,要么是重新添加项目的后处理器TBB。在这两种情况下,TBB也必须设置“魔术”属性。
有用的链接:
发布于 2012-07-20 20:18:47
基本上,Image Resizer TBB所做的就是调整包中已有图像的大小,因此默认的Finish Actions TBBcan会发布它(使用AddBinary()调用)。
因此,您需要对Resizer TBB的逻辑稍作更改(您需要在这里自己做一些事情),以便它不会调整包中原始项的大小,而是发布它的一个变体。然后,您在交付端有两个可用的图像(例如,您可以通过将调整大小的图像发送到不同的结构组来区分它们)。
https://stackoverflow.com/questions/11578243
复制相似问题