9

有谁知道是否可以在复合模板中使用包中的字符串项并像 Dreamweaver 模板一样执行它?以及您是否将相同的方法应用于其他中介(如剃刀)?

谢谢马克

4

2 回答 2

5

恐怕在 中的任何项目上都不可能Package,因为Engine期望Templates 基于 Tridion 项目。

如果您的模板项目基于 Tridion 项目,您可能会从该Engine.GetMediator方法开始走得很远。如果不是,则必须找到某种方法将其变成有效Template对象。

Template template = ...
IMediator mediator = engine.GetMediator(template);
mediator.Transform(engine, template, package);

Component当我必须从包中基于 Tridion 的项目创建对象时,我通常会执行以下操作:

Component component = new Component(item.GetAsXmlDocument().DocumentElement, 
                                    engine.GetSession);

我没有尝试过,但希望你可以对Template- 做同样的事情,因为你从包中代表模板的有效项目开始。您可能可以从现有项目中克隆 XML 或找到其他方法来伪造它。

如果你让它工作,它将适用于所有注册的模板类型。对EngineTridion 附带的类型没有提供特殊处理。

于 2012-06-13T14:21:04.260 回答
5

我怀疑这是不可能的。

Package.EvaluateExpression可能有用,但顾名思义,它只适用于表达式,而不适用于嵌入表达式的大型代码片段(即 TEL)

Engine.GetMediator期望 aTemplate并返回适合Mediator它的值。那么你的问题是IMediator接口只定义了Transform方法,它需要一个Engine,一个Template和一个Package

我想不出任何优雅的方式来解决这些问题。也许编写您自己的调解器,但仍然需要一个包,而不是字符串,因此您必须首先存储来自另一个 TBB 的基于字符串的项目。

我的建议:听起来你需要回到绘图板并找到解决问题的替代方案。

于 2012-06-13T19:42:36.767 回答