0

我正在关注有关如何通过在经典 UI 中添加新列来自定义 AEM Console的教程。一切正常,我可以看到显示数据的新列。只有一件事困扰着我:

在覆盖之前,OOTB 列列表是这样的:

在此处输入图像描述

叠加后:

在此处输入图像描述

知道如何保留 OOTB 列列表吗?

4

1 回答 1

2

列的 OOTB 列表来自SiteAdmin.js/libs/cq/ui/widgets/source/widgets/wcm

覆盖此文件apps以添加您的自定义列,同时保留其他 OOTB 列 -

  • SiteAdmin.js从 复制/libs/cq/ui/widgets/source/widgets/wcm/apps/cq/ui/widgets/source/widgets/wcm。文件夹属于jcr:primaryType- nt:folder

在此处输入图像描述

  • 编辑此文件。我的版本(AEM 6.2 - 无关紧要,因为这与经典 UI 相关)的第 173 行列出了呈现的列。将您的自定义列添加到列表中。例如

                "columns": [
                    CQ.wcm.SiteAdmin.COLUMNS["numberer"],
                    CQ.wcm.SiteAdmin.COLUMNS["thumbnail"],
                    CQ.wcm.SiteAdmin.COLUMNS["title"],
                    CQ.wcm.SiteAdmin.COLUMNS["name"],
                    CQ.wcm.SiteAdmin.COLUMNS["published"],
                    CQ.wcm.SiteAdmin.COLUMNS["modified"],
                    CQ.wcm.SiteAdmin.COLUMNS["scene7Status"],
                    CQ.wcm.SiteAdmin.COLUMNS["status"],
                    CQ.wcm.SiteAdmin.COLUMNS["impressions"],
                    CQ.wcm.SiteAdmin.COLUMNS["template"],
                    CQ.wcm.SiteAdmin.COLUMNS["workflow"],
                    CQ.wcm.SiteAdmin.COLUMNS["locked"],
                    CQ.wcm.SiteAdmin.COLUMNS["liveCopyStatus"],
                    CQ.wcm.SiteAdmin.COLUMNS["starred"]
               ],
    
  • 您现在应该定义这个新列的逻辑('starred')。从第 2006 行开始(搜索CQ.wcm.SiteAdmin.COLUMNS = {),您将找到上一点中列出的每一列的逻辑。为自定义列添加逻辑。

    "mime": { "header":CQ.I18n.getMessage("Kind"), "id":"mime", "hidden":true, "dataIndex":"mime" }, "starred": { "header":CQ.I18n.getMessage("Starred"), "id":"starred", "dataIndex":"starred", "hidden":true, "renderer": function(val, meta, rec) { console.log("Rec " + rec) return rec.json.starred; } }

  • rec.json.starred值是根据StarredListInfoProvider.java您问题中链接的教程在文件中计算的。

  • 保存,您应该会看到 OOTB 列以及您的自定义列。

在此处输入图像描述

  • 因此,从本教程中,您只需跳过该overlay位(Displaying the New Column页面上的部分)并使用上述override方法保留所有 OOTB 列。

附加信息

  • 第三点,即自定义列的逻辑,我hidden: true现在只添加了使该列默认隐藏并且只有在您检查它时才可见。CQ.Ext.grid.ColumnModel您可以使用其他几种公共方法来进一步配置它。有关更多信息,请参阅Widgets API文档。

  • 本教程描述了在服务器端计算自定义列值,您也可以在 javascript 前端实现这一点。您必须在 a 中注册一个 javascript 文件,clientlib并确保categoriesclientlib 的categories值与库文件的值匹配。在SiteAdmin.js它的情况下cq.widgets,所以您的自定义客户端库也应该具有相同的categories值。

  • 当您覆盖该文件时,至少在我的机器上我没有立即看到更改,我必须删除缓存的客户端库,/var/clientlibs然后才能看到更改。使用console.log,debugger或常用的 chrome 调试器来进一步理解这个文件背后的逻辑。

  • 使用像FileVault这样的工具将这些更改添加到您的文件系统并将其添加到版本控制中,以便它通过构建管道传播到其余环境,必须在filter.xml下面添加一个条目,META-INF\vault以便被覆盖的文件夹被 maven 拾取。

  • Overriding通常不建议这样做,因为当 Adob​​e 发布新版本时您可能会丢失更新,但在这种情况下SiteAdmin.js特定于 Classic UI,并且 Adob​​e 已经停止支持 Classic UI,实际上正在考虑从 2019 版本开始删除 Classic UI。所以我认为覆盖这个用例没有任何害处。

于 2019-01-08T05:40:56.427 回答