CQ5 / AEM:使用1 cq:component +多个数据节点创建sidekick组件

时间:2014-05-09 15:20:48

标签: cq5 aem

我正在开发一个基本上是构建工具的组件。我不能详细说明它是什么,但是我能得出的最大平行点是产品列表构建器。概念是作者想要创建自定义产品列表。这些列表将位于一个单独的位置,并从我们内容中的许多不同页面引用。

工作流程:

  1. 创造&& build / content / myproductList
  2. content / mySite / myPage / jcr:content / specialListView #property list指向/ content / myproductList
  3. 目前一切都很笨拙,工作正常。作者希望列表构建能够拖放,就像网站的其他部分一样。所以我创建了代表列表项的组件,他们可以打开一个新的构建器,并根据需要拖放/重新排序列表,它将在'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,而这些虚假的组件将被取消选中,我们需要另一种方式来管理它们。

1 个答案:

答案 0 :(得分:2)

正如您已经描述的那样,为每个产品创建一个新组件将导致很大的开销。除此之外,您将创建仅链接到一个资源的组件,因此不再可重复使用。

首先,您需要查看内容和组件之间的差异。在这种情况下,您的defaultItem是组件,产品是内容。在AEM中,创建内容查找器以显示,搜索,拖放内容到页面中。组件的搭档。

解决方案如下:

  1. 创建一个自定义内容搜索选项卡,用于加载所有产品; 可以通过创建返回的servlet来完成加载产品 所有相关产品均采用json格式
  2. 创建一个可以显示你的通用组件(例如,defaultItem) 通过设置产品的参考链接将产品放入页面;
  3. 配置contentfindertab以创建defaultitem组件 将产品拖入页面时 注意CQ.wcm.ContentfinderTab.getResultsBoxConfig。在itemsDDNewParagraph 您可以配置新的组件类型(defaultItem)和 将组件链接到产品的属性。
  4. 如何创建内容搜索选项卡: http://helpx.adobe.com/experience-manager/kb/CustomCFTab.html

    注意:将产品从contentfindertab放入页面时,请使用ALT按钮