65.9K
CodeProject 正在变化。 阅读更多。
Home

扩展 Sitecore 字段类型

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2016年1月5日

CPOL

3分钟阅读

viewsIcon

10411

一步一步描述如何扩展 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 中,为此,请按照以下说明进行操作

  1. 切换到 Core 数据库

    Image: Switching to Core DB

  2. Core 数据库的 内容编辑器 中,找到 '/sitecore/system/Field Types/',然后打开与要扩展的字段类型相关的文件夹。 在我的例子中,在 'List Types' 下。
  3. 在相关文件夹中,从模板 '/sitecore/templates/System/Templates/Template field type' 添加一个新项目,并为其指定一个适当的名称,例如 ExtendedGroupedDroplink

    Image: ExtendedGDL quick info

  4. 在“Data”部分下,在“Assembly”字段中填写扩展类所在的项目的程序集名称,并在“Class”字段中填写类的完整名称(带有命名空间)。 在我的示例中,我的程序集称为“Common”,我的完整类名称为“Common.CustomFields.ExtendedGroupedDropLink”。

    Image: Custom Field Type Data Section

  5. 保存新项目,然后返回到 Master 数据库

    此时,您的新字段应包含在 Sitecore 类型列表中。 如果您返回到您的模板,您应该找到一个新的 字段类型

    Image: Field Types List

    选择新的“ExtendedGroupedDropLink”并添加一个带有新添加的关键字的数据源,在我的例子中是“/sitecore/content/global/Types/@@parentname”,然后转到使用此模板创建的项目之一。 加载该项目后,应触发重写的方法。 如果您是从 VS 运行 Sitecore,则应触发断点。

    在执行该类之后,在将“@@parentname”替换为父项的实际名称后,列表应根据您的新数据源填充数据:例如“/sitecore/content/global/Types/products”。

 

注意:我使用 Sitecore v7.2 完成了上述操作,并且我使用升级包将我的 sitecore 一直升级到 v8.1,该控件仍然有效。

© . All rights reserved.