Adobe CQ:使两个<cq:include>具有相同的路径可编辑</cq:include>

时间:2014-11-29 07:40:00

标签: adobe cq5

我在同一个jsp中有两个"cq:include"具有相同的路径,我需要让它们都可编辑。但目前只有其中一个是可编辑的。

如果我更改了第二个显示的组件中的任何内容。但第二个本身不可编辑。我的要求是在保持包含路径相同的同时使两个组件都可编辑。

代码:

<cq:include path ="abc" resourceType="xyz"/>
<cq:include path ="abc" resourceType="xyz"/> # This one is not editable.

3 个答案:

答案 0 :(得分:1)

具有相同资源类型的两个组件将在给定路径上仅创建单个节点。因此,您在其中一个组件中所做的任何更改都将反映在它们中,因为两个组件都将从同一节点读取。

这也是无法编辑第二个组件的原因。尝试为不同的组件提供不同的路径,如下所示。

<cq:include path="abc" resourceType="xyz" />
<cq:include path="abc_0" resourceType="xyz" />

已提出类似问题herehere

答案 1 :(得分:0)

创作系统的工作方式是每个位置挂钩,所以如果你想在两个不同的地方创作,那么这两个不同的地方不应该在同一个页面上。这只是很好的可用性,因为它可能非常混乱。

INSTEAD,我建议页面上的第一个向slingRequest添加一个属性,注意它已被放置在页面上,并且具有相同路径的未来实例会在屏幕上显示一条消息,说明它是在别处编辑的。在不了解更多细节的情况下,很难为这种情况建议最佳可用性。

更新: 如果你必须这样做,这是一个解决方法 第1步:定义命名2个属性的约定。例如realTitle(String)和realTitleLastUpdated(日期/时间)。这些将是页面级属性,使用pageProperties可以轻松访问和检查它们。虽然您也可以通过子节点执行此操作,但这会变得更复杂。

步骤2:对于必须全部可模拟编辑的组件,允许他们创建自己的节点。然后,在EDIT环境中加载时,检查属性realTitle和realTitleLastUpdated中存储的lastUpdated时间

如果您对组件标题的最后修改,例如jcr:lastModified比realTitleLastUpdated更新,将title的本地值(例如jcr:title)更改为realTitle属性的值,并更新realTitleLastUpdated时间以反映组件中jcr:lastModified的时间。

如果相反,则realTitleLastUpdated比本地组件的最后一次修改时间更新,然后更新组件的jcr:title和要匹配的时间。

显然,如果上次更新时间匹配,则不执行任何操作。

这有点乱,但这会让一切都保持同步。

我意识到你可能没有意识到你可能需要保存状态。我相信你可以使用resource.getResourceResolver()。adaptTo(Session.class).save()

这样做(以及其他方式)

我以前做过这件事,但已经有一段时间了。如果您有问题,请告诉我,我是在记忆中工作。

答案 2 :(得分:0)

好吧,如果你不想让作者为编辑这两个组件而烦恼,那么你应该使用其中一个组件的javascript / jquery和onChange(),同时修改另一个组件的值。