Sitecore - 获取项目的字段名称

时间:2016-01-11 10:54:06

标签: types sitecore field

我想获得一个项目的字段名称列表,但无法使其工作。

这是我到目前为止的尝试:

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();

我从字段中读取的这些字符串都没有给出项目的实际字段名称。该应用程序在Sitecore Desktop中作为模块运行。

我错过了什么?

2 个答案:

答案 0 :(得分:1)

我更新了我的答案。您需要以下一种方式执行操作:检查该字段是否为标准模板字段并检查字段的类型:

请执行以下操作:

   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);
    }

答案 1 :(得分:1)

使用它可以工作:

if ((FieldTypeManager.GetField(field) is HtmlField) || (FieldTypeManager.GetField(field) is TextField)) {
...
}