有谁知道是否可以在复合模板中使用包中的字符串项并像 Dreamweaver 模板一样执行它?以及您是否将相同的方法应用于其他中介(如剃刀)?
谢谢马克
有谁知道是否可以在复合模板中使用包中的字符串项并像 Dreamweaver 模板一样执行它?以及您是否将相同的方法应用于其他中介(如剃刀)?
谢谢马克
恐怕在 中的任何项目上都不可能Package
,因为Engine
期望Template
s 基于 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 或找到其他方法来伪造它。
如果你让它工作,它将适用于所有注册的模板类型。对Engine
Tridion 附带的类型没有提供特殊处理。
我怀疑这是不可能的。
Package.EvaluateExpression
可能有用,但顾名思义,它只适用于表达式,而不适用于嵌入表达式的大型代码片段(即 TEL)
Engine.GetMediator
期望 aTemplate
并返回适合Mediator
它的值。那么你的问题是IMediator
接口只定义了Transform
方法,它需要一个Engine
,一个Template
和一个Package
。
我想不出任何优雅的方式来解决这些问题。也许编写您自己的调解器,但仍然需要一个包,而不是字符串,因此您必须首先存储来自另一个 TBB 的基于字符串的项目。
我的建议:听起来你需要回到绘图板并找到解决问题的替代方案。