扩展 Sitecore 字段类型





0/5 (0投票)
一步一步描述如何扩展 Sitecore 字段类型
引言
Sitecore 字段类型具有预定义的行为,有时可能会限制解决方案以满足您的需求。 一个例子是列表类型的数据源,您可能需要根据所选项目设置不同的参数。
在我的例子中,我希望我的数据源将项目的父名称添加到路径中。 例如,如果我选择“/sitecore/content/home/products/product1”,我希望 GroupedDroplink
的数据源为“/sitecore/content/global/Types/products”,如果我选择“/sitecore/content/home/services/service1”,那么我希望数据源为“/sitecore/content/global/Types/services”。
为了做到这一点,我希望能够向路径添加一个新的关键字:@@parentname
。 所以我的数据源将是:“/sitecore/content/global/Types/@@parentname”。 然后,我的扩展类型应该用所选项目的实际父名称替换关键字。
幸运的是,Sitecore 允许以相对非常简单的方式扩展内置的 字段类型。 此技巧将以逐步方式向您展示如何执行此操作。
创建字段类型类
我们首先在我们的项目中创建一个新的扩展 字段类型 类。
在您的自定义和扩展的适当位置添加一个新类,并为其指定一个合适的名称,例如 ExtendedGroupedDroplink
,因为我将扩展 GroupedDroplink
类型。
此类必须继承自我们正在扩展的类型,因此在本例中为 GroupedDroplink
public class ExtendedGroupedDroplink : Sitecore.Shell.Applications.ContentEditor.GroupedDroplink
{
在我们的类中,重写基方法“DoRender
”并添加您想要的功能。 在我的例子中,我添加了以下逻辑
protected override void DoRender(System.Web.UI.HtmlTextWriter output)
{
//Get the selected item from the base.ItemID
var item = Sitecore.Context.ContentDatabase.GetItem(base.ItemID);
//Update the source of the field type by replacing the new keywords we added
//In this case only the @@parentname keyword with the selected item.Parent.Name
Source = Source.Replace("@@parentname", item.Parent.Name);
//Then let the DoRender function as normal
base.DoRender(output);
}
如果这是与主 Web 应用程序项目分开的项目,请确保添加对 System.Web
的引用。
注意:我建议您现在在此方法的开头添加一个断点,以在触发时对其进行测试。
将 ExtendedGroupedDropLink 添加到 Sitecore UI
完成所需的编码后,我们需要将此类作为新的字段类型添加到 Sitecore 中,为此,请按照以下说明进行操作
- 切换到
Core
数据库 - 从
Core
数据库的 内容编辑器 中,找到 '/sitecore/system/Field Types/',然后打开与要扩展的字段类型相关的文件夹。 在我的例子中,在 'List Types' 下。 - 在相关文件夹中,从模板 '/sitecore/templates/System/Templates/Template field type' 添加一个新项目,并为其指定一个适当的名称,例如
ExtendedGroupedDroplink
。 - 在“
Data
”部分下,在“Assembly
”字段中填写扩展类所在的项目的程序集名称,并在“Class
”字段中填写类的完整名称(带有命名空间)。 在我的示例中,我的程序集称为“Common
”,我的完整类名称为“Common.CustomFields.ExtendedGroupedDropLink
”。 - 保存新项目,然后返回到 Master 数据库。
此时,您的新字段应包含在 Sitecore 类型列表中。 如果您返回到您的模板,您应该找到一个新的 字段类型。
选择新的“
ExtendedGroupedDropLink
”并添加一个带有新添加的关键字的数据源,在我的例子中是“/sitecore/content/global/Types/@@parentname”,然后转到使用此模板创建的项目之一。 加载该项目后,应触发重写的方法。 如果您是从 VS 运行 Sitecore,则应触发断点。在执行该类之后,在将“
@@parentname
”替换为父项的实际名称后,列表应根据您的新数据源填充数据:例如“/sitecore/content/global/Types/products”。
注意:我使用 Sitecore v7.2 完成了上述操作,并且我使用升级包将我的 sitecore 一直升级到 v8.1,该控件仍然有效。