自訂網站主控台(傳統UI) customizing-the-websites-console-classic-ui
新增自訂欄到網站(siteadmin)主控台 adding-a-custom-column-to-the-websites-siteadmin-console
可延伸網站管理主控台以顯示自訂欄。 主控台是根據JSON物件建置的,可透過建立實作ListInfoProvider
介面的OSGI服務來擴充該物件。 此類服務會修改傳送至使用者端的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 的新欄可用,顯示自訂資訊如下: