自定义网站控制台(经典UI) customizing-the-websites-console-classic-ui
向“网站(siteadmin)”控制台添加自定义列 adding-a-custom-column-to-the-websites-siteadmin-console
可以扩展网站管理控制台以显示自定义列。 控制台基于可通过创建实现ListInfoProvider
接口的OSGI服务而扩展的JSON对象而构建。 此类服务会修改发送到客户端的JSON对象以构建控制台。
此分步教程介绍如何通过实施ListInfoProvider
界面在“网站管理”控制台中显示新列。 它包含以下步骤:
- 正在创建OSGI服务,并将包含该服务的包部署到AEM服务器。
- (可选) 通过发出JSON调用以请求用于构建控制台的JSON对象来测试新服务。
- 通过扩展存储库中控制台的节点结构来显示新列。
- 数字Assets控制台
- 社区控制台
创建OSGI服务 creating-the-osgi-service
ListInfoProvider
接口定义了两种方法:
updateListGlobalInfo
,要更新列表的全局属性,updateListItemInfo
,以更新单个列表项。
这两种方法的参数为:
request
,关联的Sling HTTP请求对象,info
,要更新的JSON对象,它分别是全局列表项或当前列表项,resource
,Sling资源。
实施示例如下:
-
为每个项添加 starred 属性,如果页面名称以 e 开头,则为
true
,否则为false
。 -
添加 starredCount 属性,该属性是列表的全局,包含星列表项的数目。
要创建OSGI服务,请执行以下操作:
- 在CRXDE Lite中,创建捆绑包。
- 在下面添加示例代码。
- 构建捆绑包。
新服务已启动并正在运行。
package com.test;
import com.day.cq.commons.ListInfoProvider;
import com.day.cq.i18n.I18n;
import com.day.cq.wcm.api.Page;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
@Component(metatype = false)
@Service(value = ListInfoProvider.class)
public class StarredListInfoProvider implements ListInfoProvider {
private int count = 0;
public void updateListGlobalInfo(SlingHttpServletRequest request, JSONObject info, Resource resource) throws JSONException {
info.put("starredCount", count);
count = 0; // reset for next execution
}
public void updateListItemInfo(SlingHttpServletRequest request, JSONObject info, Resource resource) throws JSONException {
Page page = resource.adaptTo(Page.class);
if (page != null) {
// Consider starred if page name starts with 'e'
boolean starred = page.getName().startsWith("e");
if (starred) {
count++;
}
I18n i18n = new I18n(request);
info.put("starred", starred ? i18n.get("Yes") : i18n.get("No"));
}
}
}
-
您的实施应根据提供的请求和/或资源决定是否应将信息添加到JSON对象。
-
如果您的
ListInfoProvider
实现定义了响应对象中存在的属性,则其值将由您提供的值覆盖。您可以使用服务排名来管理多个
ListInfoProvider
实施的执行顺序。
测试新服务 testing-the-new-service
当您打开网站管理控制台并浏览您的网站时,浏览器将发出Ajax调用以获取用于构建控制台的JSON对象。 例如,当您浏览到/content/geometrixx
文件夹时,将向AEM服务器发送以下请求以构建控制台:
https://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
要确保新服务在部署包含该服务的捆绑包后正在运行,请执行以下操作:
-
将浏览器指向以下URL:
https://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin -
响应应按以下方式显示新属性:
显示新列 displaying-the-new-column
上一步包括通过叠加/libs/wcm/core/content/siteadmin
来调整网站管理控制台的节点结构,以显示所有Geometrixx页面的新属性。 按照以下步骤操作:
-
在CRXDE Lite中,创建节点结构
/apps/wcm/core/content
和类型为sling:Folder
的节点以反映结构/libs/wcm/core/content
。 -
复制节点
/libs/wcm/core/content/siteadmin
并将其粘贴到/apps/wcm/core/content
下方。 -
将节点
/apps/wcm/core/content/siteadmin/grid/assets
复制到/apps/wcm/core/content/siteadmin/grid/geometrixx
并更改其属性:-
删除 pageText
-
将 pathRegex 设置为
/content/geometrixx(/.*)?
这将使网格配置在所有Geometrixx网站中处于活动状态。 -
将 storeProxySuffix 设置为
.pages.json
-
编辑 storeReaderFields 多值属性并添加
starred
值。 -
要激活MSM功能,请将以下MSM参数添加到多字符串属性 storeReaderFields 中:
- msm:isSource
- msm:isInBlueprint
- msm:isLiveCopy
-
-
在
/apps/wcm/core/content/siteadmin/grid/geometrixx/columns
下添加一个starred
节点(类型为 nt:unstructured),该节点具有以下属性:-
dataIndex:
starred
字符串类型 -
标头:
Starred
字符串类型 -
xtype:
gridcolumn
字符串类型
-
-
(可选)删除您不想在
/apps/wcm/core/content/siteadmin/grid/geometrixx/columns
中显示的列 -
/siteadmin
是一个虚路径,默认指向/libs/wcm/core/content/siteadmin
。
若要将此重定向到您在/apps/wcm/core/content/siteadmin
上的siteadmin版本,请定义属性sling:vanityOrder
使其值高于/libs/wcm/core/content/siteadmin
上定义的值。 默认值为300,因此适合使用任何更高的值。 -
转到网站管理控制台并导航到Geometrixx站点:
https://localhost:4502/siteadmin#/content/geometrixx。 -
名为 Starred 的新列可用,显示自定义信息如下: