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 不能复制。
我相信使用 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 而不是字段名称。
-
字段 ID 的使用可以防止很多潜在的错误、拼写错误等。
如果您决定重命名 某些字段(或者其他开发人员将决定重命名他的字段),则无需担心正确的行为。
如果使用模板的继承,则可能存在字段名称重复的潜在错误。
字段 ID 的使用可防止不必要的处理。因为当您使用字段名称时,Sitecore 会按字段名称解析字段 ID,然后按 ID 检索字段。