CQ5/AEM:使用1个cq:component+创建sidekick组件;多数据节点
我正在开发一个基本上是建筑工具的组件。我不能详细说明它是什么,但是我能得出的最大的相似之处是产品列表生成器。其概念是作者想要创建定制的产品列表。这些列表将位于一个单独的位置,并从我们内容中的许多不同页面引用 工作流程:CQ5/AEM:使用1个cq:component+创建sidekick组件;多数据节点,aem,Aem,我正在开发一个基本上是建筑工具的组件。我不能详细说明它是什么,但是我能得出的最大的相似之处是产品列表生成器。其概念是作者想要创建定制的产品列表。这些列表将位于一个单独的位置,并从我们内容中的许多不同页面引用 工作流程: 创建并生成/content/myproductList content/mySite/myPage/jcr:content/specialListView#属性列表指向/content/myproductList 目前一切都很好,运行良好。作者希望列表的构建是拖放式的,就像站点的
components/lists
| defaultItem
| defaultItem.jsp
| dialog.xml
| customeItem1
| .content.xml (resourceSuperType = components/lists/defaultItem)
| _cq_template.xml (has custom information)
| customeItem2
| .content.xml (resourceSuperType = components/lists/defaultItem)
| _cq_template.xml (has custom information)
...etc for 25+ items
通过这样设置,我们现在有了一个工作流,作者可以将组件直接拖放到页面上,而不需要配置它们或打开对话框并选择正确的数据集/等等。然而,这似乎非常冗长和庞大。可伸缩性也是一个问题(如果他们明天想创建100个新项目怎么办——遗憾的是,这是我的现实)
我的建议是找到一种方法来规范化它,这样我就有一组数据(列表项)和一个组件作为我的结构
比如:
/etc/data/lists/items
item 1
- nt:unstructured
- label=foo
- type=defaultItem
...etc
... etc, etc for all 25+ items
/apps/myapp/components/lists
defaultItem
| defaultItem.jsp
| dialog.xml
这就是我被卡住的地方。如果我有一个这样的结构,那就很难让item1、item2、item3……等作为拖放元素出现在sidekick中。我猜我需要进入JS中生成sidekick项的部分,但我不确定如何从那里开始(还没有搞乱sidekick的定制)。如果有人曾经处理过类似的事情,我只是想寻求指导
[旁注]
如果你想知道为什么我想把它移到第二个设计中,那是因为最终作者想要一个控制面板,允许他们自己创建项目。如果有一个系统可以改变单个节点及其属性,而不是一个必须管理创建/更改完整组件结构的系统,那么会更容易、更轻量级。它还将作者制作的“项目组件”与开发人员创建的实际组件分离。这一点很重要,因为我们创建的组件代码是版本控制的/etc,而这些人造组件将被取消检查,我们需要另一种方法来管理它们。正如您已经描述的,为每个产品创建一个新组件将导致巨大的开销。除此之外,您将创建组件,这些组件仅链接到一个资源,因此不再可重用 首先,您需要看到内容和组件之间的差异。在这种情况下,defaultItem是组件,产品是内容。在AEM中,contentfinder用于显示、搜索、将内容拖放到页面中。组件的伙伴 解决方案如下:
注意:将产品从ContentFinder选项卡放入页面时,请使用ALT按钮我从未想过使用ContentFinder选项卡。作为开发人员,我们不断地隐藏这个东西,因为它目前被不正确地使用,所以看起来就像是一堆随机的图像扔在页面上。但有一个问题:如果我说“defaultitem”是一个表单输入,而自定义项只是每个字段输入(即国家、名字等)的配置,您还会建议这样做吗?我在考虑创建一个自定义的侧踢,所以我很好奇,从CF的角度来看,这是否是一个类似的方法。如果我很了解你,国家、名字等都是内容类型。您可以肯定地将这些添加到列表中,因为您自己处理servlet。在contentfinder上,甚至可以配置一些过滤器。执行过滤器时,将再次调用servlet以返回过滤后的请求。