Sitecore,以防止删除组件

问题描述 投票:0回答:1

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

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

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

有一种完全禁止编辑组件渲染的方法,但是我仍然希望Web管理员根据需要自行插入组件。我只希望他们不要修改创建页面时附带的组件。

据我所知,可以在“ RenderingReference”级别上进行某些操作,但是我无法弄清楚该怎么做。你能给个小费吗?

sitecore sitecore8 sitecore8.1
1个回答
0
投票

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

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

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 image description here

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

<pipelines>
    <getChromeData>
             <processor type="CheckLockedComponentsHandler,MyLib" patch:after="*[last()]"/>
            </processor>
    <getChromeData>
</pipelines>
© www.soinside.com 2019 - 2024. All rights reserved.