根据Parsys隐藏编辑栏中的删除按钮

时间:2014-04-30 12:34:18

标签: cq5

我在作者模式的编辑视图中有一个带有删除按钮的CQ5组件。现在有两种方法可以在页面中包含此组件:

  1. 静态通过cq:include标记
  2. 通过parsys组件动态地
  3. 如何在分析中显示组件时,如何将CQ5.5配置为仅在编辑栏中显示删除按钮。当通过cq静态包含组件时:include不应显示删除按钮,因为在这种情况下无法从页面中删除组件。

    有什么想法吗?

    我只发现以下CQ5文档如何从编辑栏中删除删除按钮: http://dev.day.com/docs/en/cq/5-5/developing/components/edit_config.html#cq:actions

    如果我不使用布局编辑栏,也会正确显示和隐藏删除按钮:/

3 个答案:

答案 0 :(得分:3)

根据上下文,没有OOTB方式动态配置editConfig,因此最简单的解决方案是创建一个扩展原始组件的新组件,该组件仅覆盖cq:editConfig节点。所以你最终得到了两个相同组件的风格:一个用于parsys,另一个用于静态包含,但没有任何代码重复,因为另一个是浅的'覆盖。

将原始组件复制到新组件,删除除.content.xml_cq_editConfig.xml之外的新组件中的所有文件,您需要从DELETE中删除cq:actions

例如,如果您的原始组件的resourceType为/apps/mysite/myoriginalteaser,那么您应该在新组件中设置.content.xml

.content.xml:

<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
    jcr:primaryType="cq:Component"
    sling:resourceSuperType="mysite/myoriginalteaser"/>
                             ^^^^^^^^^^^^^^^^^^^^^^^
_cq_editConfig.xml:

<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
    jcr:primaryType="cq:EditConfig"
    cq:dialogMode="floating"
    cq:actions="[text:My Fixed Teaser,-,EDIT]"
    cq:layout="editbar">

NB :如果您已经拥有原始资源类型的制作内容,那么您需要使用&#39; new&#39;来迁移该组件的资源类型。行为。这可以(1)在CRXDELite中手动完成,(2)使用Bulk Editor工具,或(3)通过Resource Type Updater中的ACS AEM Tools

答案 1 :(得分:0)

您可以使用ComponentContext.BYPASS_COMPONENT_HANDLING_ON_INCLUDE_ATTRIBUTE来完成此任务。查看Set a CQ5 component to editable or not editable。您必须在静态包含之前设置它,然后在之后将其删除,以便删除按钮可以在parsys中使用。但是,你也会失去编辑按钮,这可能是不可取的。

另一种选择是创建第二个组件,使用第一个组件作为其超类型(sling:resourceSuperType)。除编辑配置外,将继承所有功能(对话框,JSP)。您将更改第二个组件的编辑配置选项并将其用于静态包含,而第一个组件将在Sidekick中保留,以便在parsys中使用。

答案 2 :(得分:0)

Shawn的解决方案完全删除了编辑栏(虽然是以一种疯狂的hackish方式),但是我们中的许多人仍然希望在没有删除选项的情况下编辑组件。

在CQ中已经成为一个非常普遍的主题,事情根本不可能,所以我们花了很多时间寻找疯狂的黑客和变通方法,直到找到“我们能找到的最不可靠的解决方案”。许多配置都以非常糟糕的方式定义。这是其中之一,被认为是AEM最强大的功能之一(编辑栏)。另外一个旗舰功能(parsys)在许多方面也被打破了,因为他们构建了整个/ etc / designs 只是为了定义哪些类型的组件可以存在于parsys中,没有提供任何干净的方法来完成nested parsys,并强制静态定义容器类型。老实说,我可以花几个小时谈论CQ实施的所有疯狂方式,但我已经说了太多。

我的解决方案:复制组件,粘贴它,稍微更改名称,从编辑栏中删除删除选项。哎呀?是。无论您如何清晰地沟通和记录代码,它们都将不同步。但是你要问问自己,它是否比writing your own custom sling component filter更糟糕?嗯......不,不是:)