3

我有一个动态组件模板,它将 XML 发布到代理数据库,然后使用组件表示工厂动态加载。

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

有没有一种方法可以在不编写自己的自定义 TBB 的情况下同时进入我的 Xml 和包?

4

2 回答 2

9

Tridion Content Delivery 可以存储同一多媒体组件的多个变体。每个这样的变体都有一个标识它的 ID,没有 ID 的变体(在较新的版本中 #def# 作为其 ID)被称为默认变体。

当您从 DWT 引用图像时,它会在渲染引擎执行您的 DWT 时自动添加为要打包的项目。此项目随后由默认完成操作中的默认“在包中发布二进制文件”TBB 处理。Publish Binaries in Package 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
)
  • componentUri 本项所指的多媒体组件
  • templateUri 在其上下文中执行此 AddBinary 调用的模板(用作变体 ID)
  • targetLocation 将二进制文件发布到的位置(如果为 null,则发布到标准路径)
  • data 要发布的二进制数据
  • fileName 发布文件的文件名

因此,正如您在最后一次调用中看到的那样,AddBinary在包 TBB 中发布二进制文件使用一个属性(如果您从未听说过,请看这里Item.Properties)来确定要发布的变体(如果属性是,则将二进制文件作为默认变体发布)不存在)。

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

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

有用的链接:

于 2012-07-20T12:12:28.583 回答
1

基本上所有 Image Resizer TBB 所做的只是调整已经在包中的图像大小,因此 Default Finish Actions TBB 可以发布它(使用 AddBinary() 调用)。

因此,您需要对 Resizer TBB 的逻辑稍作更改(您需要在这里自己做一些事情),以便它不会调整包中原始项目的大小,而是发布它的变体。然后,您在交付端有两个可用的图像(例如,您可以通过将调整大小的图像发送到不同的结构组来区分它们)。

于 2012-07-20T12:18:46.843 回答