gpt4 book ai didi

templates - 如何更新特定 Sitecore 模板的多个现有项目的字段值?

转载 作者:行者123 更新时间:2023-12-02 22:38:32 25 4
gpt4 key购买 nike

在 Sitecore 7.2 中,我有一个文件夹,其中包含许多需要转换为存储桶的项目。我在该模板的标准值中检查了可存储桶(根据官方文档),因此所有新项目都将进入存储桶,但我还需要在近百个现有项目中更新该字段。有什么聪明的方法吗?

此外,之前我遇到过类似的情况,当我需要更新某个模板的所有现有项目的禁用字段时,所以可能有一些通用的解决方案吗?

最佳答案

据我所知,有两种方法可以做到这一点 - 直接使用代码,以及使用 PowerShell 模块(如果您安装了的话)进行智能操作。不幸的是,我认为 Sitecore Desktop 中没有用于执行此操作的特定界面。

1.从C#代码进行批量更新:

private void UpdateAllFieldsRecursively(Item parentItem, string templateName, string fieldName, string newValue)
{
if (parentItem != null)
{
using (new SecurityDisabler())
{
foreach (Item childItem in parentItem.Children)
{
if (childItem.Fields[fieldName] != null && childItem.TemplateName == templateName)
{
using (new EditContext(childItem))
{
childItem[fieldName] = newValue;
}
}

if (childItem.HasChildren)
{
UpdateAllFieldsRecursively(childItem, templateName, fieldName, newValue);
}
}
}
}
}

// and below there is the call to recursive mehod
const string parentNode = "/sitecore/content";
var database = Sitecore.Context.Database;
var parentItem = database.GetItem(parentNode);

UpdateAllFieldsRecursively(parentItem, "Article", "Bucketable", "1");

2.PowerShell ISE。执行以下代码(您可能需要根据您的场景稍微修改一下):

cd 'master:/sitecore/content'
Get-ChildItem -Recurse . | Where-Object { $_.TemplateName -match "Article" -and $_.Fields["Bucketable"] -ne $null } | ForEach-Object {

$_.Editing.BeginEdit()
$_.Fields["Bucketable"].Value = "1";
$_.Editing.EndEdit()
""
}

此脚本从/sitecore/content 递归进行,并更新所有文章模板的 Bucketable 字段。将这些值替换为您需要的值。

这里有一篇博客文章描述了这一点:http://blog.martinmiles.net/post/mass-update-of-field-value-for-all-existing-items-of-certain-template-two-ways-of-achieving-result

关于templates - 如何更新特定 Sitecore 模板的多个现有项目的字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31954048/

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