我了解 C# 代码片段和 .NET 程序集为模块化模板开发提供相同的功能。我们管理 CME 中的代码片段和 Visual Studio 中的汇编代码,但在模板生成器中使用相同的方式。
在代码方面,我可以创建一个 C# Code Fragment Template Building Block (TBB),例如:
var timeStamp = DateTime.Now.ToString("d MMM yyyy");
package.PushItem("timeStamp from fragment", package.CreateHtmlItem(timeStamp));
我还可以通过如下实现 ITemplate 来使用相同的代码创建一个 .NET 程序集模板构建 block 。
using System;
using Tridion.ContentManager.Templating;
using Tridion.ContentManager.Templating.Assembly;
namespace CreateAndBreakTemplates
{
[TcmTemplateTitle("Add Date to Package")]
public class AddDateToPackage : ITemplate
{
public void Transform(Engine engine, Package package)
{
var timeStamp = DateTime.Now.ToString("d MMM yyyy");
package.PushItem("timeStamp from assembly",
package.CreateHtmlItem(timeStamp));
}
}
}
docs解释“SDL Tridion 将代码片段插入到预定义类的预定义方法中”。 看起来这个类实现了 ITemplate 并在下面添加了一些引用(我错过了什么吗?)。
assembly setup instructions至少提到这些dll。
片段和程序集之间还有其他区别吗?您将如何在两者之间进行选择?
最佳答案
当模板第一次被调用和修改后,C# 片段由 Tridion 编译成程序集。为了编译该片段,Tridion 将其包装在一些“地牢敷料”(那些知道该术语来自何处的人的奖励积分)中:
Tridion.ContentManager
, Tridion.ContentManager.CommunicationManagement
, Tridion.ContentManager.ContentManagement
和 Tridion.ContentManager.Templating
命名空间 Package
和 Engine
在名为 package
的字段中可用和 engine
分别log
的字段获得using
)编辑:鉴于其他答案,似乎很多人不知道如何在 C# 片段 TBB 中完成某些任务,所以我将在下面记录它们:
导入其他命名空间
要将其他命名空间导入/使用到您的 C# 片段中,您需要使用以下语法:
<%@ Import Namespace="Tridion.ContentManager.ContentManagement.Fields" %>
请注意,这只会从 Tridion 已引用的程序集中导入命名空间。没有机制让您显式添加对其他程序集的引用;因此,如果您需要第三方 DLL,则需要将其添加到 GAC。
定义自定义函数
您可以使用以下语法在 C# 片段中定义自定义字段和函数:
<%!
public static string GetDate()
{
return new DateTime().ToString("u").Replace(" ", "T");
}
%>
定义成员字段和(嵌套)类
定义自定义函数的语法还允许您定义嵌套类和/或成员字段:
<%!
public class MyLittleHelper
{
public MyLittleHelper(string param1)
{
}
}
%>
关于tridion - C# 代码片段和程序集 TBB 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11812553/