Sitecore更新占位符键(编程)

Sitecore更新占位符键(编程),sitecore,placeholder,Sitecore,Placeholder,我想更新分配到每个页面项的占位符(PH)键的值 问题是我在主模板中更改了PH键的值(实际上是将两个模板组合成一个模板),并且应该使用新分配的PH键更新许多页面 如何更新占位符键而无需单击每个项目并更改演示文稿中的值?如果我真的喜欢这样,那就要花很多时间 我想在项目中做的是: 设置初始路径(/sitecore/home/robot/) 检查初始路径中的每个项目(每个项目的子项目) 在演示文稿中检索每个项目分配的控件 如果存在带有“面包屑”键名的“面包屑”控件 然后,将该值更改为“/template

我想更新分配到每个页面项的占位符(PH)键的值

问题是我在主模板中更改了PH键的值(实际上是将两个模板组合成一个模板),并且应该使用新分配的PH键更新许多页面

如何更新占位符键而无需单击每个项目并更改演示文稿中的值?如果我真的喜欢这样,那就要花很多时间

我想在项目中做的是:

  • 设置初始路径(/sitecore/home/robot/)
  • 检查初始路径中的每个项目(每个项目的子项目)
  • 在演示文稿中检索每个项目分配的控件
  • 如果存在带有“面包屑”键名的“面包屑”控件
  • 然后,将该值更改为“/template/dynamic/breadcrumbs
  • 直到它检索初始路径中的所有项为止

  • 请参阅下面的代码。它的作用是,获取选定项目的渲染引用,检查它们的占位符和渲染名称,并根据选定渲染的唯一id更新选定项目的
    \u Renderings
    字段的xml值。然后它递归地为所有子体触发相同的代码

    此代码

    • 不更新从标准值继承的组件的占位符
    • 不会自动发布更改的项目
    • 是否区分大小写
    • 要求用户对要更改的项目具有写入权限
    public void Start()
    {
    字符串initialPath=“/sitecore/home/robot”;
    Item root=Database.GetDatabase(“master”).GetItem(initialPath);
    UpdatePlaceholderName(root,“Breadcrumbs”,“Breadcrumbs”,“/template/dynamic/Breadcrumbs”);
    }
    私有void UpdatePlaceholderName(项目项、字符串组件名称、字符串占位符名称、字符串新占位符名称)
    {
    如果(项!=null)
    {
    List renderings=item.Visualization.GetRenderings(Sitecore.Context.Device,false)
    .Where(r=>r.Placeholder==placeholderName&&r.RenderingItem.Name==componentName).ToList();
    if(renderings.Any())
    {
    string renderingsXml=item[“_Renderings”];
    item.Editing.BeginEdit();
    foreach(渲染中的渲染参考渲染)
    {
    
    string[]strings=renderingsXml.Split(新[]{"到目前为止,您得到了什么?如果您使用了模板标准值,您实际上可以通过简单地更新几个模板标准值项上的占位符设置来完成相当多的任务。是的,这是有意义的,因为我使用了插入选项。否则,每个页面都有不同的附加控件,这些控件不包括在标准值。更新string.Replace会导致此脚本出现问题。由于string.Replace!!!!您确实有if语句来阻止更新任何其他内容,但Replace仍会替换所有匹配的字符串(s:ph=\“”+占位符名)