在SiteCore中创建的所有页面中更改页面标题

时间:2017-08-24 04:29:00

标签: sitecore sitecore8

有没有办法更改Sitecore中为最终用户创建的所有页面的所有页面标题?可以通过数据库或Sitecore提供的任何设置吗?

修改

  • 我在Sitecore管理员中创建了超过500个页面。

  • 每个页面都有一个字段(我称之为页面标题),它显示为<title><.title>的html页面标题。

  • 现在我需要将所有页面中的标题更改为其他页面。

  • 我需要更快地一次更改所有内容,而是打开每个页面,更改标题,保存并发布。

1 个答案:

答案 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}");