Tridion 如何从组件DWT中访问组件模板ID?

Tridion 如何从组件DWT中访问组件模板ID?,tridion,Tridion,在我的组件的HTML模板中,我需要写出组件模板的TCM URI: <!-- Start Component Presentation: {"ComponentID" : "@@Component.ID@@", "ComponentTemplateID" : "@@ComponentTemplate.ID@@" } --> 但不幸的是,ComponentTemplate.ID不存在 如何从我的组件DWT中访问组件模板ID?恐怕您必须

在我的组件的HTML模板中,我需要写出组件模板的TCM URI:

<!-- Start Component Presentation: {"ComponentID" : "@@Component.ID@@",
                        "ComponentTemplateID" : "@@ComponentTemplate.ID@@" } -->

但不幸的是,
ComponentTemplate.ID
不存在


如何从我的组件DWT中访问组件模板ID?

恐怕您必须编写一个C#TBB(片段或程序集):

TcmUri templateId=engine.PublishingContext.ResolvedItem.Template.Id;
if(templateId.ItemType==ItemType.ComponentTemplate){
Item Item=package.CreateStringItem(ContentType.Text,templateId.ToString());
package.PushItem(“ComponentTemplateID”,项目);
}

只能从页面DWT布局中访问ComponentTemplate.ID…

向复合模板中的模板调用添加“ComponentTemplateID”参数。然后,您可以用与包变量相同的方式访问它。

@@ID@@
将在预览(在CME中,而不是在模板生成器中)或发布时为您提供组件模板TCM URI。

不完全是“访问”,但如果DWT仅用于某个模板,您可以硬编码它吗?我想说的是,这是我们在谈论的@Frank。这可能是Frank,但在这个例子中,他只在一个有点现实的网站上工作了一次。不幸的是,硬编码并不是一种选择。不过,编写大量代码来解决这个问题是一种选择;因此,到目前为止,我接受了Mihai的建议,但将其放入一个可以从DWT中调用的函数源中@@GetComponentTemplate()@@可能不需要大量代码。显然,@ID@@在预览和发布中返回组件模板ID,但不返回模板生成器。例如,
@@Component.ID@@@ID@
在模板生成器中为我提供了
tcm:6-1541 tcm:6-1541
,但在预览中提供了
tcm:6-1541 tcm:7-81-32
。尽管这是一个有趣的选择,但我仍然必须手动键入该参数值。因此,复制/粘贴、移植或定位CT之类的操作将导致参数值不正确。我通常更喜欢用配置而不是代码来做事情,但也许我做得有点过头了。我不介意复制/粘贴的人必须对其进行修复,我也不介意有一个禁止CT本地化的技术设计,但是移植问题太严重了+那我就去米海的解决方案。