gpt4 book ai didi

c# - 在项目中的所有模板中设置 Sitecore 字段共享

转载 作者:行者123 更新时间:2023-11-30 14:16:06 25 4
gpt4 key购买 nike

我需要将很多模板字段的 Shared 属性设置为 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 对象中获取它。

然后,您需要遍历模板的每个 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);
}
}

希望这有帮助:)

关于c# - 在项目中的所有模板中设置 Sitecore 字段共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8269464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com