我们经常需要与Tridion相关的代码中的特定项目(模式,模板或组件)。模板,内容交付,工作流或业务连接器(核心服务)经常需要引用Tridion Content Manager URIs。我们可以链接到组件,但我通常会看到其他所有内容的硬编码值或WebDAV URL。
我理解硬编码Tridion Content Manager(Native)URI是一种不好的做法,除了几个场景:
我们尽可能使用给定的API或WebDAV URL来引用项目,否则我们必须避免在引用TCM URI的任何内容上使用Content Porter(或以某种方式使这些引用在Tridion之外“可配置”)。
WebDAV URLs似乎更好,原因如下:
除了具有与Content Porter兼容的模板之外,我还想在较低的出版物中本地化文件夹和/或结构组。这有助于:
为了使参考“内容易于使用”,至少对于模板构建模块,我知道我们可以在组件中使用WebDAV Url,确保将每条路径本地化到子出版物中的正确位置。例如:
只要我们设置发布元数据并将字段本地化为每个发布的正确路径,这将适用于大多数情况。
我相信我们也可以使用包含或map unmanaged URI in template code。
任何人都有#include
方法的示例?我是否在TBB和/或DWT的顶部使用它,并且无论模板介体如何都会替换引用(例如,这适用于XSLT Mediator,Razor Mediator等吗?)
包含的参考文献是否适用于较低的出版物,或仅适用于内容移植者?换句话说,如果我引用“tcm:5-123”,模板将正确引用“tcm” :17-123“出版物17?
答案 0 :(得分:6)
我倾向于遵循一些简单的规则......
Publication.WebDavUrl
或PublicationData.LocationInfo.WebDavUrl
来获取网址的其余部分xlink:href
内容。)我还倾向于使用“配置页面”进行内容交付,使用模板输出我可能需要从内容交付应用程序“知道”的TCM ID。然后在运行时将其作为一组配置变量加载,或者作为字典或作为一组常量加载(我想这取决于我当天的感受)。
答案 1 :(得分:2)
虽然我们通常将模板类型实现称为模板介体,但这不是全部。模板类型实现由模板介体和Template Content Handler组成,尽管后者是可选的。给定实现是否正确处理“包含”不取决于中介而是处理程序。
通过搜索AbstractTemplateContentHandler
可以找到文档中的一个很好的起点。
SDL Tridion自己的Dreamweaver模板实现有这样一个处理程序。我刚看了Razor implementation,它目前使用了Dreamweaver内容处理程序。显然,YMMV用于存在的各种XSLT模板类型实现。
由于这是SDL Tridion的可扩展性点,所以包含的引用是否在较低的出版物中“正确”起作用取决于实现者对这意味着什么的看法。
一个有趣的可能性是实现您自己的自定义处理程序,其行为符合您的意愿。模板类型配置(在Tridion Content Manager配置文件中)允许独立指定给定模板类型的介体和内容处理程序,这意味着您可以自定义现有模板类型的内容处理行为。