Tridion Content Delivery 可以存储同一多媒体组件的多个变体。每个这样的变体都有一个标识它的 ID,没有 ID 的变体(在较新的版本中 #def# 作为其 ID)被称为默认变体。
当您从 DWT 引用图像时,当渲染引擎执行您的 DWT 时,它会自动作为项目添加到包中。该项目随后由默认完成操作中的默认“在包中发布二进制文件”TBB 处理。 Publish Binaries in Package 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
此项所指的多媒体组件
-
templateUri
在其上下文中执行此 AddBinary 调用的模板(用作变体 ID)
-
目标位置
将二进制文件发布到的位置(如果为 null,则发布到标准路径)
-
数据
要发布的二进制数据
-
文件名
发布文件的文件名
因此,正如您在最后一次调用 AddBinary 中看到的那样,在包 TBB 中发布二进制文件使用一个属性(如果您从未听说过 Item.Properties,请查看 here)来确定要发布的变体(以及如果属性不存在,则将二进制文件作为默认变体发布)。
掌握了所有这些知识后,任务就变得非常简单:您必须确保 MMC 的包中有两个二进制项,每个项具有不同的 Item.ItemPropertyTemplateUri 属性值。
默认的 Image Resizer TBB 替换它调整大小的 Item 的二进制内容,并且不设置此属性。因此,您必须编写的最少代码是复制项目的预处理器 TBB 或重新添加项目的后处理器 TBB。在这两种情况下,TBB 都必须设置“魔法”属性。
有用的链接: