在项目中的所有模板之间设置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)
{
}
}
当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);
}
}
希望这对你有帮助