我有一个动态组件模板,它将XML发布到Broker数据库,然后使用组件表示工厂动态加载Broker数据库。
此Xml包含映像的URL。我需要一个缩略图和一个完整的图像可用。我已经设法使用图像大小调整器TBB来生成缩略图,然而,我希望这将添加单独的包项目和可以引用的二进制文件,但它似乎会覆盖全尺寸图像。
有没有一种方法可以在不编写自己的自定义TBB的情况下同时进入Xml和Package?
Tridion Content Delivery可以存储同一多媒体组件的多个变体。每个这样的变体都有一个标识它的ID,而没有ID的变体(在较新版本中为#def#作为其ID)被称为默认变体。
引用DWT中的图像时,渲染引擎执行DWT时会自动将其添加为要打包的项目。该项目随后由默认的"在包中发布二进制文件"TBB处理,TBB是默认完成操作的一部分。包TBB中的发布二进制文件通过调用AddBinary
来发布二进制文件-您可以通过查看Tridion论坛上发布的大多数默认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
)
- 组件Uri此项所指的多媒体组件
- 模板Uri在其上下文中执行此AddBinary调用的模板(用作变量id)
- targetLocation发布二进制文件的位置(如果为null,则发布到标准路径)
- 数据要发布的二进制数据
- 文件名发布文件的文件名
因此,正如您在对AddBinary
的最后一次调用中所看到的,Package TBB中的Publish Binaries使用一个属性(如果您从未听说过Item.Properties
,请查看此处)来确定要发布哪个变体(如果该属性不存在,则将二进制作为默认变体发布)。
掌握了所有这些知识,任务变得非常简单:您必须确保MMC的包中有两个二进制项,每个项都具有不同的Item.ItemPropertyTemplateUri
属性值。
默认的图像大小调整器TBB将替换它所调整大小的项目的二进制内容,并且不设置此属性。因此,您需要编写的最少代码要么是复制项目的预处理器TBB,要么是重新添加项目的后处理器TBB。在这两种情况下,TBB也必须设置"魔术"属性。
有用的链接:
- 默认模板构建块的原始C#源代码
- 描述Item.Properties以及如何查看它们在复合模板中的作用的页面
- SDL Tridion论坛上最近关于同一主题的帖子(需要登录)
基本上,图像调整器TBB所做的就是调整包中已经存在的图像的大小,因此默认完成操作TBB可以发布它(使用AddBinary()调用)。
因此,您需要的是对Resizer TBB的逻辑进行轻微更改(您需要自己在这里做一些事情),这样它就不会调整包中的原始项目的大小,而是发布它的变体。然后,您在交付端有两个可用的图像(例如,您可以通过将调整大小的图像发送到不同的结构组来区分它们)。