“网站管理”控制台可以扩展为显示自定义列。 该控制台基于JSON对象构建,可通过创建实现ListInfoProvider
接口的OSGI服务来扩展该对象。 此类服务将修改发送到客户端的JSON对象以构建控制台。
此分步教程介绍如何通过实现ListInfoProvider
接口在网站管理控制台中显示新列。 它包括以下步骤:
本教程还可用于扩展以下管理控制台:
ListInfoProvider
接口定义两种方法:
updateListGlobalInfo
,更新列表的全局属性,updateListItemInfo
,更新单个列表项。这两种方法的参数有:
request
,关联的Sling HTTP请求对象,info
,要更新的JSON对象,它分别是全局列表或当前列表项,resource
,Sling资源。以下实施示例:
为每个项目添加星号属性,如果页面名称开始e,则该属性为true
,否则为false
。
添加steredCount属性,该属性是列表的全局属性,包含标记列表项的数量。
要创建OSGI服务,请执行以下操作:
新服务已启动并正在运行。
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"));
}
}
}
ListInfoProvider
实现定义了响应对象中已存在的属性,则其值将被您提供的属性覆盖。ListInfoProvider
实现的执行顺序。打开网站管理控制台并浏览您的站点时,浏览器将发出ajax调用,以获取用于构建控制台的JSON对象。 例如,当您浏览到/content/geometrixx
文件夹时,以下请求将发送到AEM服务器以构建控制台:
http://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
确保在部署包含新服务的包后,新服务正在运行:
将您的浏览器指向以下URL:
http://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
响应应按如下方式显示新属性:
最后一步是通过覆盖/libs/wcm/core/content/siteadmin
来调整网站管理控制台的节点结构以显示所有Geometrixx页面的新属性。 按如下方式继续:
在CRXDE Lite中,创建具有类型sling:Folder
的节点的节点结构/apps/wcm/core/content
以反映结构/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(/.*?lang=zh-Hans)?
这将使所有geometrixx网站的网格配置处于活动状态。
将storeProxySuffix设置为.pages.json
编辑storeReaderFields多值属性并添加starred
值。
要激活MSM功能,请将以下MSM参数添加到多字符串属性storeReaderFields中:
在/apps/wcm/core/content/siteadmin/grid/geometrixx/columns
下面添加一个starred
节点(类型为nt:unstructured),其属性如下:
starred
字符串类型Starred
字符串类型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站点:
名为Stared的新列可用,按如下方式显示自定义信息:
如果多个网格配置与pathRegex属性定义的请求路径匹配,将使用第一个网格配置,而不是最具体的网格配置,这意味着配置的顺序很重要。
本教程的结果可在包共享上的自定义网站管理控制台包中找到。