Sitecore 字段 ID 与字段名称

本文关键字:字段 ID Sitecore | 更新日期: 2023-09-27 17:56:18

我在"专业 Sitecore 开发"一书中读到过它 - John West 说,在获取项目字段值时,最佳做法是使用字段 ID 而不是字段名称。

但是像 sc:text、sc

:link、sc:image 等 sitecore 控件有一个名为 field 的属性,它使用字段名称。因此,我现在很困惑是将整个项目更改为字段 ID,还是将其保留字段名称以与 sitecore 用法保持一致。

任何建议将不胜感激。

Sitecore 字段 ID 与字段名称

是的,Sitecore 允许您使用名称和 ID。此外,Sitecore 还允许您在同一模板中使用相同的字段名称,这可能会导致一些混淆。当然,ID 不能复制。

我相信使用 ID 而不是名称更可靠。在 Sitecore 上可以轻松更改名称,发生这种情况时很难找到错误。在有人注意到字段值不存在之前,您不会收到编译错误或类似错误。

一个好的方法是使用代码生成器(如 T4 或 TDS)来创建要在代码中使用的强类型类。像这样:

public static struct MyTemplate
{
    public static struct MyGroup1
    {
        public static readonly ID Foo = new ID("{1111111-1111-1231-1231-12312323132}");
    }
    public static struct MyGroup2
    {
        public static readonly ID Foo = new ID("{9999999-9999-xxxx-1231-12312323132}");
    }
}

然后你在控件上这样做:

@Html.Sitecore().Field(MyTemplate.MyGroup.Foo); //where foo returns the id.

希望有帮助..

仅供参考,作为@RobertoBr出色答案的补充,Sitecore 在内部使用 GUID 来访问众所周知的字段。如果您反编译Sitecore.Kernel.dll并查看静态类Sitecore.FieldIDs您将看到一个您非常熟悉使用的字段列表,例如

public static ID Created = new ID("{25BED78C-4957-4165-998A-CA1B52F67497}");
public static ID CreatedBy = new ID("{5DD74568-4D4B-44C1-B513-0AF5F4CDA34F}");
public static ID DisplayName = new ID("{B5E02AD9-D56F-4C41-A065-A133DB87BDEB}");

与RobertoBr的建议非常相似。

我建议您在所有情况下都使用字段 ID 而不是字段名称。

  1. 字段 ID 的使用可以防止很多潜在的错误、拼写错误等。

  2. 如果您决定重命名
  3. 某些字段(或者其他开发人员将决定重命名他的字段),则无需担心正确的行为。

  4. 如果使用模板的继承,则可能存在字段名称重复的潜在错误。

  5. 字段 ID 的使用可防止不必要的处理。因为当您使用字段名称时,Sitecore 会按字段名称解析字段 ID,然后按 ID 检索字段。