关于sitecore8:Sitecore防止移除组件

Sitecore to prevent removing component

我有一个页面,当用户创建它时,它会在占位符中插入一些预定义的组件(例如画廊和标题)。

我还希望网站管理员可以自由地将其他可能的组件插入到预定义组件周围的占位符中,但我想禁止以某种方式从页面中编辑/删除预定义组件(图库和标题)。

但是,内容编辑器可以将另一个图库组件(技术上可行)添加到同一页面,并在需要时将其删除。但是不应该触摸预定义的组件(至少从占位符中删除。换句话说 - 我不想在体验编辑器中的预定义组件旁边有一个删除按钮)。

有一种方法可以完全禁止编辑组件渲染,但我还是希望站长自己插入组件。我只是希望他们不要修改页面创建时出现的组件。

据我所知,这可以在 RenderingReference 级别的某个地方完成,但我无法弄清楚如何。能给个小费吗?


好的,我找到了一种方法来做到这一点。
以防万一有人需要它。

首先,我们需要创建一个处理器来捕捉体验编辑器中的页面渲染。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class CheckLockedComponentsHandler : GetClientActionsChromeData
{
    public new void Process(GetChromeDataArgs args)
    {
        if (args.ChromeType =="rendering")
        {
            if (args.CustomData["renderingReference"] is RenderingReference rf && !string.IsNullOrEmpty(rf.Settings.Parameters))
            {
                var rmParams = WebUtil.ParseUrlParameters(rf.Settings.Parameters);
                args.ChromeData.Custom["editable"] = string.IsNullOrEmpty(rmParams["editable"]) ?"true" : rmParams["editable"];
            }
        }
    }
}

当,我们在创建锁定组件时添加一个属性editable = false。
enter

最后我们需要在配置中注册我们的处理器

1
2
3
4
5
6
<pipelines>
    <getChromeData>
             <processor type="CheckLockedComponentsHandler,MyLib" patch:after="*[last()]"/>
            </processor>
    <getChromeData>
</pipelines>