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

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

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

最佳答案

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
)
  • componentUri
    多媒体组件此项指的是
  • 模板Uri
    在其上下文中执行此 AddBinary 调用的模板(用作变体 ID)
  • 目标位置
    将二进制文件发布到的位置(如果为 null,则发布到标准路径)
  • 数据
    要发布的二进制数据
  • 文件名
  • 下发布文件的文件名

    因此,正如您在对 AddBinary 的最后一次调用中所见,包 TBB 中的发布二进制文件使用一个属性(如果您从未听说过 Item.Properties ,请查看 here )来确定要发布的变体(如果属性不存在)。

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

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

    有用的链接:
  • the original C# source code of the default template building blocks
  • a page describing Item.Properties and how to see what they do in your compound template
  • a recent post on the SDL Tridion forum about the same topic(需要登录)
  • 关于Tridion 2009 SP1 : Image Thumbnails - How to publish the original image as well?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11578243/

    10-12 18:55