禁用CQ / AEM中的组件编辑

时间:2015-07-02 15:25:42

标签: cq5 aem sling

我有各种各样的情况,我有一个组件A使用cq:include来包含组件B.A和B都是可编辑的并且有对话框。但是,当B包含在A中时,我想禁用组件B的直接编辑 - 我将通过A的对话框管理创作。我已经看到了几种方法来实现这一目标。第一个是

<% IncludeOptions.getOptions(request, true).forceSameContext(true); %>

,第二个是

<% slingRequest.setAttribute(ComponentContext.BYPASS_COMPONENT_HANDLING_ON_INCLUDE_ATTRIBUTE, true); %>
<% slingRequest.removeAttribute(ComponentContext.BYPASS_COMPONENT_HANDLING_ON_INCLUDE_ATTRIBUTE);  %>

我的理解是,第一个强制子组件进入父级的编辑上下文,第二个只是根本不为子组件创建编辑上下文。但我不确定这些差异究竟意味着什么。据我所知,唯一的主要区别是第一个只影响下一个组件包括,而第二个影响两个线之间的所有包含。生成的标记也存在细微差别。但除此之外,对话框似乎表现得一样。我的POC可能太简单了,看不出差异...... cq:EditConfig节点中的值会受到影响吗?还有其他一些区别吗?

由于

1 个答案:

答案 0 :(得分:1)

您还可以使用WCMMode打开包含编辑模式:

<%WCMMode prevMode = WCMMode.DISABLED.toRequest(request);%>
    <cq:include path="b" resourceType="B" />
<%prevMode.toRequest(request);%>

这将呈现B,就像它将在没有任何编辑功能的发布服务器上呈现一样。