AEM 列覆盖经典 UI - 列列表已更改
AEM column overlay classic UI - column list is changed
我正在关注 tutorial 如何通过在经典 UI 中添加新列来自定义 AEM Console。一切正常,我可以看到显示数据的新列。只有一件事困扰着我:
覆盖之前,OOTB列列表是这个:
叠加后:
知道如何保留 OOTB 列列表吗?
OOTB 列列表是从 SiteAdmin.js
in /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
中还有其他几种 public 方法可供您进一步配置。有关更多信息,请参阅 Widgets API 文档。
教程介绍了在服务器端计算自定义列值,您也可以在javascript前端实现。您必须在 clientlib
中注册一个 javascript 文件,并确保 clientlib 的 categories
值与库文件的 categories
值匹配。在 SiteAdmin.js
的情况下,它是 cq.widgets
,因此您的自定义 clientlib 也应该具有相同的 categories
值。
覆盖文件时,至少在我的机器上我没有立即看到更改,我不得不删除 /var/clientlibs
下缓存的 clientlibs 才能看到更改。使用 console.log
、debugger
或常用的 chrome 调试器来进一步了解此文件背后的逻辑。
使用 FileVault 之类的工具将这些更改添加到您的文件系统并将其添加到版本控制中,以便它通过构建管道传播到其余环境,必须添加一个条目在 META-INF\vault
下的 filter.xml
中,以便 maven 获取覆盖的文件夹。
Overriding
通常不推荐,因为当 Adobe 发布新版本时您可能会错过更新,但在这种情况下 SiteAdmin.js
特定于 Classic UI,Adobe 已停止支持 Classic UI,实际上正在考虑从 2019 版开始删除 Classic UI。所以我认为覆盖这个用例没有任何危害。
我正在关注 tutorial 如何通过在经典 UI 中添加新列来自定义 AEM Console。一切正常,我可以看到显示数据的新列。只有一件事困扰着我:
覆盖之前,OOTB列列表是这个:
叠加后:
知道如何保留 OOTB 列列表吗?
OOTB 列列表是从 SiteAdmin.js
in /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
中还有其他几种 public 方法可供您进一步配置。有关更多信息,请参阅 Widgets API 文档。教程介绍了在服务器端计算自定义列值,您也可以在javascript前端实现。您必须在
clientlib
中注册一个 javascript 文件,并确保 clientlib 的categories
值与库文件的categories
值匹配。在SiteAdmin.js
的情况下,它是cq.widgets
,因此您的自定义 clientlib 也应该具有相同的categories
值。覆盖文件时,至少在我的机器上我没有立即看到更改,我不得不删除
/var/clientlibs
下缓存的 clientlibs 才能看到更改。使用console.log
、debugger
或常用的 chrome 调试器来进一步了解此文件背后的逻辑。使用 FileVault 之类的工具将这些更改添加到您的文件系统并将其添加到版本控制中,以便它通过构建管道传播到其余环境,必须添加一个条目在
META-INF\vault
下的filter.xml
中,以便 maven 获取覆盖的文件夹。Overriding
通常不推荐,因为当 Adobe 发布新版本时您可能会错过更新,但在这种情况下SiteAdmin.js
特定于 Classic UI,Adobe 已停止支持 Classic UI,实际上正在考虑从 2019 版开始删除 Classic UI。所以我认为覆盖这个用例没有任何危害。