在项目中的所有模板之间设置Sitecore字段共享

本文关键字:设置 之间 Sitecore 字段 共享 项目 | 更新日期: 2023-09-27 18:15:48

我需要将许多模板字段的共享属性设置为false。有没有一种简单的方法在代码中做到这一点,而不改变字段id ?我已经写了下面的代码,但它似乎没有更新属性。

Sitecore.Data.Database masterDb = Sitecore.Configuration.Factory.GetDatabase("master");
using (new Sitecore.SecurityModel.SecurityDisabler())
{
    try
    {
        var templates = TemplateManager.GetTemplates(masterDb);
        foreach (var template in templates.Values)
        {
            if (template.FullName.StartsWith("FolderName"))
            {
                foreach (var field in template.GetFields(false))
                {
                    TemplateManager.ChangeFieldSharing(field, TemplateFieldSharing.None, masterDb);
                }
            }
        }
    }
    catch (Exception ex)
    {
    }
}

在项目中的所有模板之间设置Sitecore字段共享

TemplateManager.GetTemplates调用获得Template对象的集合时,您需要的是TemplateItem对象,以便能够编辑它。您可以使用该ID从现有的Database对象中获取该ID。

然后需要迭代到模板的每个TemplateSectionItem,然后才能得到TemplateFieldItem,在那里您可以到达InnerItem属性并对共享字段进行更改。您还需要标记BeginEdit()EndEdit(),以便您可以执行更改。

Sitecore.Data.Database masterDb = Sitecore.Configuration.Factory.GetDatabase("master");
using (new Sitecore.SecurityModel.SecurityDisabler())
{
    try
    {                     
        var templates = TemplateManager.GetTemplates(masterDb);
        foreach (var template in templates.Values)
        {                         
            if (template.FullName.StartsWith("FolderName"))
            {                             
                var tmpl = masterDb.GetTemplate(template.ID);
                foreach (var section in tmpl.GetSections())
                {                                 
                    foreach (var templateFieldItem in section.GetFields())
                    {
                        templateFieldItem.BeginEdit();
                        templateFieldItem.InnerItem[TemplateFieldIDs.Shared] = "0";
                        templateFieldItem.EndEdit();   
                    }    
                }
            }
        }
    }
    catch (Exception ex)
    {
        Response.Write("Error" + ex.Message);
    }
}

希望这对你有帮助