有没有办法更改Sitecore中为最终用户创建的所有页面的所有页面标题?可以通过数据库或Sitecore提供的任何设置吗?
修改
我在Sitecore管理员中创建了超过500个页面。
每个页面都有一个字段(我称之为页面标题),它显示为<title><.title>
的html页面标题。
现在我需要将所有页面中的标题更改为其他页面。
我需要更快地一次更改所有内容,而是打开每个页面,更改标题,保存并发布。
答案 0 :(得分:0)
最快的方法是使用Sitecore Powershell模块设置所有项目的值。类似的东西:
cd 'master:/sitecore/content'
Get-ChildItem -Recurse . | Where-Object { $_.TemplateName -match "{template name}" -and $_.Fields["Title"] -ne $null } | ForEach-Object {
$_.Editing.BeginEdit()
$_.Fields["Title"].Value = "{new value}";
$_.Editing.EndEdit()
""
}
如果您不想使用Sitecore Powershell,您可以使用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);
}
}
}
}
}
你可以这样调用这个函数:
const string parentNode = "/sitecore/content";
var database = Sitecore.Context.Database;
var parentItem = database.GetItem(parentNode);
UpdateAllFieldsRecursively(parentItem, "{template name}", "Title", "{new value}");