Sitecore 以防止删除组件

Sitecore to prevent removing component

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

我也希望网络管理员能够自由地将其他可能的组件插入到预定义组件周围的占位符中,但我想以某种方式禁止 edit/delete 预定义组件(图库和 header ) 来自页面。

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

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

据我所知,这可以在 RenderingReference 级别上完成,但我不知道如何做。可以给个小费吗?

好的,我已经找到方法了。 以防万一有人需要它。

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

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。

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

<pipelines>
    <getChromeData>
             <processor type="CheckLockedComponentsHandler,MyLib" patch:after="*[last()]"/>
            </processor>
    <getChromeData>
</pipelines>