6

特别是,我想到的情况是:

@@RenderComponentPresentation(Component, "<vbs-legacy-ct-tcm-uri>")@@

我遇到的问题是,在我的情况下,VBS 代码在尝试访问组件字段时会中断,给出“错误 13 类型不匹配 ..”。

(所以,如果我要给出答案,我会说:“部分,没有实际用途”)

编辑 上面的 DWT 来自另一个 CT,因此它实际上是组件链接的渲染,这就是为什么按照 Nuno 的建议的无参数重载将无法正常工作的原因。顺便说一句,VBS 中的以下行不会中断并给出正确的值:

WriteOut Component.ID
WriteOut Component.Schema.Title

编辑 2

Dominic 是绝对正确的:这是一个缺失的依赖项。

使此信息普遍有用的更多见解:

假设,原始 CT 看起来像这样(“VBScript [Legacy]”类型):

[%
Call RenderComponent(Component)
%]

该 CT 是从 PT 调用的,也是基于 VBS 的。那个 PT 一开始就有一大块“#include”语句。

现在情况发生了变化:同一个 CT 被另一个基于 DWT 的 CT 调用。显然(感谢大家的宝贵帮助!),现在任何地方都没有包含依赖项。

使原始 CT 再次工作的解决方案是明确手工挑选并包含所有必要的 VBS TBB,因此原始 CT 变为:

[%
#include "tcm:<uri-of-vbs-tbb>"
Call RenderComponent(Component)
%]
4

3 回答 3

5

是的 - 混合和匹配旧模板和模块化模板是完全可能的。template building blocks也许很明显,你不能在这两种技术之间混搭。

在 VBScript 中,“错误 13 类型不匹配”有时用作密码,这实际上意味着“我不认识您的变量之一的名称,(包括函数和子的名称)”在 VBScript 模板引擎中,来自页面模板可能在您的组件模板的范围内;例如,将#includes 放在PT 中以便CT 可以使用它们是很常见的。我的猜测是您的组件模板正在尝试使用这样的功能,但没有找到它。

于 2012-10-24T16:00:22.910 回答
4

我知道您可以使用 VBScript 组件演示呈现模块化页面模板,并且 VbScript 页面模板也可以呈现模块化组件模板。

您的错误可能是由于其他原因?您是否尝试过只使用常规@@RenderComponentPresentation()@@调用而不指定哪个模板?

于 2012-10-24T15:19:41.740 回答
2

页面模板可以呈现不同风格的复合模板 - 例如 Razor、VBS 或 XSLT。

问题来自模板中包含的 TBB。Razor 模板通常需要调用仅存在于 VBScript 中的函数。因此,迁移模板的起点始终是从辅助函数和实用程序库开始。然后将您拥有的最通用的 PT / CT 迁移到新格式(Razor、XSLT、DWT 等)。这为您有时间迁移到新格式提供了一个很好的基础。

于 2012-10-24T15:45:06.593 回答