Sitecore - 获取项目的字段名称
Sitecore - Get the field names of an item
我想获取项目字段名称的列表,但无法正常工作。
这是我目前的尝试:
if (pathItemInLanguage.Versions.GetVersions().Length == 0)
{
Item newItemLangVersion = pathItemInLanguage.Versions.AddVersion();
//Populate the new language version with values:
newItemLangVersion.Editing.BeginEdit();
newItemLangVersion.Fields.ReadAll();
foreach (Field field in newItemLangVersion.Fields)
{
string dn = "nix";
dn = field.DisplayName;
string n = "nix";
n = field.Name;
string k = "nix";
k = field.Key;
string xy = "nix";
xy = field.ToString();
if ((FieldTypeManager.GetField(Sitecore.Context.Item.Fields[field.DisplayName]) is HtmlField) ||
(FieldTypeManager.GetField(Sitecore.Context.Item.Fields[field.DisplayName]) is TextField))
{
newItemLangVersion.Fields[field.Name].Value = "new";
}
}
newItemLangVersion.Editing.EndEdit();
我从字段中读取的那些字符串中的 None 给出了项目的实际字段名称。该应用程序作为 Sitecore 桌面中的模块运行。
我错过了什么?
我更新了我的回答。您需要通过下一种方式进行:检查该字段是否为标准模板字段并检查该字段的类型:
请这样做:
if (pathItemInLanguage.Versions.GetVersions().Length == 0)
{
Item newItemLangVersion = pathItemInLanguage.Versions.AddVersion();
//Populate the new language version with values:
//Populate the new language version with values:
newItemLangVersion.Editing.BeginEdit();
newItemLangVersion.Fields.ReadAll();
foreach (Field field in newItemLangVersion.Fields)
{
if (!IsStandardTemplateField(field) && (field is HtmlField || field is TextField))
newItemLangVersion.Fields[field.Name].Value = "new";
}
newItemLangVersion.Editing.EndEdit();
}
并且您有一种方法来检查是否是模板字段,因为您不需要修改那种字段
public bool IsStandardTemplateField(
Field field)
{
Sitecore.Data.Templates.Template template = Sitecore.Data.Managers.TemplateManager.GetTemplate(
Sitecore.Configuration.Settings.DefaultBaseTemplate,
field.Database);
Sitecore.Diagnostics.Assert.IsNotNull(template, "template");
return template.ContainsField(field.ID);
}
使用这个让它工作:
if ((FieldTypeManager.GetField(field) is HtmlField) || (FieldTypeManager.GetField(field) is TextField)) {
...
}
我想获取项目字段名称的列表,但无法正常工作。
这是我目前的尝试:
if (pathItemInLanguage.Versions.GetVersions().Length == 0)
{
Item newItemLangVersion = pathItemInLanguage.Versions.AddVersion();
//Populate the new language version with values:
newItemLangVersion.Editing.BeginEdit();
newItemLangVersion.Fields.ReadAll();
foreach (Field field in newItemLangVersion.Fields)
{
string dn = "nix";
dn = field.DisplayName;
string n = "nix";
n = field.Name;
string k = "nix";
k = field.Key;
string xy = "nix";
xy = field.ToString();
if ((FieldTypeManager.GetField(Sitecore.Context.Item.Fields[field.DisplayName]) is HtmlField) ||
(FieldTypeManager.GetField(Sitecore.Context.Item.Fields[field.DisplayName]) is TextField))
{
newItemLangVersion.Fields[field.Name].Value = "new";
}
}
newItemLangVersion.Editing.EndEdit();
我从字段中读取的那些字符串中的 None 给出了项目的实际字段名称。该应用程序作为 Sitecore 桌面中的模块运行。
我错过了什么?
我更新了我的回答。您需要通过下一种方式进行:检查该字段是否为标准模板字段并检查该字段的类型:
请这样做:
if (pathItemInLanguage.Versions.GetVersions().Length == 0)
{
Item newItemLangVersion = pathItemInLanguage.Versions.AddVersion();
//Populate the new language version with values:
//Populate the new language version with values:
newItemLangVersion.Editing.BeginEdit();
newItemLangVersion.Fields.ReadAll();
foreach (Field field in newItemLangVersion.Fields)
{
if (!IsStandardTemplateField(field) && (field is HtmlField || field is TextField))
newItemLangVersion.Fields[field.Name].Value = "new";
}
newItemLangVersion.Editing.EndEdit();
}
并且您有一种方法来检查是否是模板字段,因为您不需要修改那种字段
public bool IsStandardTemplateField(
Field field)
{
Sitecore.Data.Templates.Template template = Sitecore.Data.Managers.TemplateManager.GetTemplate(
Sitecore.Configuration.Settings.DefaultBaseTemplate,
field.Database);
Sitecore.Diagnostics.Assert.IsNotNull(template, "template");
return template.ContainsField(field.ID);
}
使用这个让它工作:
if ((FieldTypeManager.GetField(field) is HtmlField) || (FieldTypeManager.GetField(field) is TextField)) {
...
}