我正在开发一个基本上是构建工具的组件。我不能详细说明它是什么,但是我能得出的最大平行点是产品列表构建器。概念是作者想要创建自定义产品列表。这些列表将位于一个单独的位置,并从我们内容中的许多不同页面引用。
工作流程:
目前一切都很笨拙,工作正常。作者希望列表构建能够拖放,就像网站的其他部分一样。所以我创建了代表列表项的组件,他们可以打开一个新的构建器,并根据需要拖放/重新排序列表,它将在'specialListView'中刷新。
我的设计存在巨大缺陷,我想看看能不能克服它。这个缺陷是以我创建列表项组件的方式进行蚀刻的。基本上所有项目在结构上都是相同的(就标记而言),它们的内容不同。所以我所做的是创建了一个基本组件来控制标记和基本工作流程(对话框等)。然后我为每个列表项创建了一个新组件,这些组件除了包含其信息的cq:template节点之外什么都没有。
ex结构:
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个新项目,那就更糟了 - 遗憾的是这是我的现实。)
我建议的是找到一种方法将其归一化,以便我有一组数据(列表项)和1个组件作为我的结构。
类似的东西:
/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中。我猜我需要进入生成sidekick项目的JS部分,但我不确定如何从那里接近它(还没有搞乱定制sidekick)。如果有人事先处理过这样的事情,那就去寻找指导。
[旁注] 如果你很好奇我为什么要将它转移到第二个设计,那是因为最终作者想要一个允许他们自己创建项目的控制面板。如果系统改变单个节点及其属性而不是必须管理创建/更改完整组件结构的系统,那么它将更容易,更轻量级。它还将作者将从开发人员创建的实际组件中创建的“项目组件”分离。这很重要,因为我们创建的组件代码是版本化的/ etc,而这些虚假的组件将被取消选中,我们需要另一种方式来管理它们。
答案 0 :(得分:2)
正如您已经描述的那样,为每个产品创建一个新组件将导致很大的开销。除此之外,您将创建仅链接到一个资源的组件,因此不再可重复使用。
首先,您需要查看内容和组件之间的差异。在这种情况下,您的defaultItem是组件,产品是内容。在AEM中,创建内容查找器以显示,搜索,拖放内容到页面中。组件的搭档。
解决方案如下:
如何创建内容搜索选项卡: http://helpx.adobe.com/experience-manager/kb/CustomCFTab.html
注意:将产品从contentfindertab放入页面时,请使用ALT按钮