【问题标题】:How can I access the Component Template ID from within my Component DWT?如何从我的组件 DWT 中访问组件模板 ID?
【发布时间】:2012-04-13 20:57:31
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: tridion


    【解决方案1】:

    恐怕您必须编写 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", item);
    }
    

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

    【讨论】:

    • 不完全是“访问”,但如果 DWT 仅与某个模板一起使用,您可以对其进行硬编码吗?我在说什么,这是我们正在谈论的@Frank。
    • 这可能是弗兰克,但在这种情况下,他正在为一个有点现实的网站工作一次。所以不幸的是,硬编码它不是一种选择。不过,编写大量代码来解决问题是一种选择;所以我到目前为止接受了 Mihai 的建议,但随后将它放在我可以从我的 DWT @@GetComponentTemplate()@@ 调用的函数源中
    • 也许不需要大量的代码。显然@@ID@@ 在预览和发布中返回组件模板 ID,但不是模板生成器。例如,@@Component.ID@@ @@ID@@ 在模板生成器中给我tcm:6-1541 tcm:6-1541,但在预览中给我tcm:6-1541 tcm:7-81-32
    【解决方案2】:

    在复合模板中的模板调用中添加“ComponentTemplateID”参数。然后,您可以像访问包变量一样访问它。

    【讨论】:

    • 虽然是一个有趣的替代方案,但我仍然需要手动输入该参数值。因此,复制/粘贴、移植或本地化 CT 等操作将导致参数值不正确。
    • 确实是弗兰克。我经常更喜欢用配置而不是代码来做事,但也许我已经走得太远了。我不介意复制/粘贴的人必须修复它,我不介意有一个禁止本地化 CT 的技术设计,但移植问题太讨厌了。然后+1 米海的解决方案。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 2018-09-23
      • 2012-07-14
      • 2015-10-06
      • 2015-08-26
      相关资源
      最近更新 更多