【问题标题】:AEM column overlay classic UI - column list is changedAEM 列叠加经典 UI - 列列表已更改
【发布时间】:2019-01-03 11:37:26
【问题描述】:

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

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

叠加后:

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

【问题讨论】:

    标签: overlay aem apache-felix aem-6


    【解决方案1】:

    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"]
                 ],
      
    • 您现在应该为这个新列定义逻辑(“已加星标”)。从第 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 前端实现这一点。您必须在clientlib 中注册一个javascript 文件,并确保clientlib 的categories 值与库文件的categories 值匹配。对于SiteAdmin.js,它是cq.widgets,因此您的自定义客户端库也应该具有相同的categories 值。

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

    • 1234563 987654355@ 用于被 maven 拾取的覆盖文件夹。
    • Overriding通常不推荐,因为当 Adob​​e 发布新版本时,您可能会丢失更新,但在这种情况下,SiteAdmin.js 特定于经典 UI,Adobe 已停止永久支持 Classic UI,实际上正在考虑从 2019 版本开始删除 Classic UI。所以我认为覆盖这个用例没有任何害处。

    【讨论】:

    • 这是一个非常全面且有据可查的答案。谢谢你。是的,我正在调试这个文件并且正在考虑这种方法,但不确定这是否是正确的方法。再次感谢您!
    • 很高兴我能提供帮助。赏金绝对是一个激励因素! :-) 只需确保更改是您的构建过程的一部分 - 使此生产准备就绪(关于 filter.xml 的点,附加信息部分的倒数第二点)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 2012-07-20
    • 2023-02-22
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    相关资源
    最近更新 更多