Adobe CQ:Make two<;cq:包括>;同一路径可编辑

Adobe CQ:Make two<;cq:包括>;同一路径可编辑,adobe,aem,Adobe,Aem,我有两个“cq:include”在同一个jsp中,路径相同,我需要使它们都可编辑。但目前只有一个是可编辑的 如果我改变了一个组件中显示在第二个组件上的任何内容。但是第二个本身是不可编辑的。我的要求是使这两个组件都可编辑,同时保持包含路径相同 代码: #这个是不可编辑的。 拥有两个具有相同资源类型的组件只会在给定路径上创建一个节点。因此,您在其中一个组件中所做的任何更改都将反映在这两个组件中,因为这两个组件都将从同一节点读取 这也是无法编辑第二个组件的原因。尝试为不同的组件提供不同的路径,如下所

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


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

代码:


#这个是不可编辑的。

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

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

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


类似的问题也曾被问过,而且创作系统的工作方式是每个位置挂钩的,因此如果你想在两个不同的地方创作,那么这两个不同的地方不应该在同一页上。这是一个很好的可用性,因为它可能会非常混乱

相反,我建议页面上的第一个实例向slingRequest添加一个属性,注意它已被放置在页面上,并且具有相同路径的未来实例会在屏幕上显示一条消息,说明它已在其他地方编辑。如果不了解更多细节,就很难为这个场景推荐最佳可用性

更新: 如果必须这样做,这里有一个解决方法。
步骤1:定义命名2个属性的约定。e、 g.不动产(字符串)和不动产日期(日期/时间)。这些将是页面级属性,便于使用pageProperties访问和检查。虽然你也可以通过一个子节点来实现,但这会变得更复杂

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

如果组件标题的最后一次编辑(例如jcr:lastModified)比RealTitleLastModified更新,请将标题的本地值(例如jcr:title)更改为realTitle属性的值,并更新RealTitleLastModified时间,以反映组件上jcr:lastModified中的时间

如果相反的情况为true-realTitleLastUpdated的时间比本地组件的上次修改的时间要新,则更新组件的jcr:title和要匹配的时间

显然,如果上次更新时间匹配,则什么也不做

这有点绕圈子,但这会让一切保持同步

我意识到你可能没有意识到你可能需要拯救国家。我相信您可以使用resource.getResourceResolver().adapto(Session.class.save())实现这一点(以及其他方法)


我以前做过,但已经有一段时间了。如果您有问题,请告诉我,我正在使用内存工作。

如果您不想让作者费心编辑这两个组件,那么您应该使用javascript/jquery和其中一个组件的
onChange()
,同时修改另一个组件的值

添加了两个有问题的组件!我真的认为这是不可能的。JavaScript需要一个DIV作为覆盖的引用。因此,它可能会使在DOM中找到的第一个路径可编辑,而忽略第二个,因为路径是相同的。@Thomas::(是的,可能是这样。让我们尝试一些更多的答案。谢谢你的宝贵建议。嗨@rakhi4110,我的基本需要是在保持包含路径相同的情况下使两个组件都可编辑。请建议一种方法。@Aneeshharma我想保持包含路径相同吗。正如我所说的,保持路径相同意味着有一个两个组件都使用单一配置。我的要求是使两个包含路径相同,以便其中一个中的任何更改都会反映在另一个上。但同时,作者可以选择编辑其中任何一个。因此需要使两个组件都可编辑。这对不同的路径非常有效,但作者需要在两个位置编辑相同的内容。请建议场景是:我有这个(“说标题”)页面中两个位置的组件。然后每个标题组件下面都有一个rte。rte中的内容将动态提供,但在这两种情况下标题保持不变。现在的问题是:作者可以选择编辑任何一个标题组件,因此在任何标题组件中输入的文本都应该反映在这两个组件中。这就是为什么我需要两个组件都可以编辑,同时保持include路径不变。此外,这还需要在无JS模式下工作。因此不能使用JS触发器。请建议--@Aneesharma我仍然认为这是不好的可用性,但我也认识到,有时由于商业法令的原因,你没有选择。我将作为单独的线程回复,我将在这里是f房间。@Aneeshharma我已经更新了我的答案来描述一个解决方案。如果你需要进一步的帮助,请告诉我。这将是一个不好的做法。UI通常在Ext.js中完成,因此你需要在由不同js框架更新的东西上运行onChange处理程序。这是一个长期的解决方案。此外,这种更改必须保留到JCR可以正常工作,这意味着提前知道所有链接组件的节点名称/位置,以便向这些节点位置发送适当的JSON帖子。这样做需要大量额外的工作,或者您可以编写一个servlet来接受该更新,并将其挂接到一个Ext.js事件中发送到该servlet,但这仍然有些过分马尔基尔。
<cq:include path="abc" resourceType="xyz" />
<cq:include path="abc_0" resourceType="xyz" />