Konsolen Administrera webbplatser kan utökas till att visa anpassade kolumner. Konsolen byggs baserat på ett JSON-objekt som kan utökas genom att skapa en OSGI-tjänst som implementerar ListInfoProvider
gränssnitt. En sådan tjänst ändrar JSON-objektet som skickas till klienten för att bygga konsolen.
I den här stegvisa självstudiekursen beskrivs hur du visar en ny kolumn i administrationskonsolen för webbplatser genom att implementera ListInfoProvider
gränssnitt. Det består av följande steg:
Den här självstudien kan även användas för att utöka följande administrationskonsoler:
The ListInfoProvider
gränssnittet definierar två metoder:
updateListGlobalInfo
, för att uppdatera globala egenskaper för listan,updateListItemInfo
, för att uppdatera ett listobjekt.Argumenten för båda metoderna är:
request
, det associerade Sling HTTP-begäranobjektet,info
, det JSON-objekt som ska uppdateras, som är den globala listan eller det aktuella listobjektet.resource
, en Sling-resurs.Exempelimplementeringen är nedan:
Lägger till en stjärnad egenskapen för varje objekt, som true
om sidnamnet börjar med e och false
annars.
Lägger till en starredCount som är global för listan och innehåller antalet stjärnlistobjekt.
Så här skapar du OSGI-tjänsten:
Den nya tjänsten körs.
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"));
}
}
}
Implementeringen bör, baserat på den angivna begäran och/eller resursen, avgöra om den ska lägga till informationen till JSON-objektet eller inte.
Om ListInfoProvider
implementeringen definierar en egenskap som finns i svarsobjektet, dess värde skrivs över av den som du anger.
Du kan använda rangordning av tjänster för att hantera körningsordningen för flera ListInfoProvider
implementeringar.
När du öppnar administrationskonsolen för webbplatser och bläddrar igenom webbplatsen skickar webbläsaren ett Ajax-anrop för att hämta JSON-objektet som används för att skapa konsolen. Om du till exempel bläddrar till /content/geometrixx
mapp skickas följande begäran till AEM server för att bygga konsolen:
https://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
Så här kontrollerar du att den nya tjänsten körs efter att du har distribuerat paketet som innehåller den:
Peka webbläsaren på följande URL:
https://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
Svaret ska visa de nya egenskaperna enligt följande:
Det sista steget består i att anpassa nodstrukturen i administrationskonsolen för webbplatser så att den nya egenskapen för alla Geometrixx visas genom att täcka över /libs/wcm/core/content/siteadmin
. Gör så här:
Skapa nodstrukturen i CRXDE Lite /apps/wcm/core/content
med noder av typen sling:Folder
för att återspegla strukturen /libs/wcm/core/content
.
Kopiera noden /libs/wcm/core/content/siteadmin
och klistra in den nedan /apps/wcm/core/content
.
Kopiera noden /apps/wcm/core/content/siteadmin/grid/assets
till /apps/wcm/core/content/siteadmin/grid/geometrixx
och ändrar dess egenskaper:
Ta bort pageText
Ange pathRegex till /content/geometrixx(/.*)?
Detta gör att stödrasterkonfigurationen är aktiv för alla Geometrixx.
Ange storeProxySuffix till .pages.json
Redigera storeReaderFields flervärdesegenskap och lägg till starred
värde.
Om du vill aktivera MSM-funktioner lägger du till följande MSM-parametrar i egenskapen multi-String storeReaderFields:
Lägg till en starred
nod (av typ nt:ostrukturerad) nedan /apps/wcm/core/content/siteadmin/grid/geometrixx/columns
med följande egenskaper:
dataIndex: starred
av typen String
header: Starred
av typen String
xtype: gridcolumn
av typen String
(valfritt) Släpp de kolumner som du inte vill visa vid /apps/wcm/core/content/siteadmin/grid/geometrixx/columns
/siteadmin
är en mållös bana som som standard pekar på /libs/wcm/core/content/siteadmin
.
Om du vill dirigera om den här till din version av siteadmin på /apps/wcm/core/content/siteadmin
, definiera egenskapen sling:vanityOrder
att ha ett värde som är högre än det som definierats på /libs/wcm/core/content/siteadmin
. Standardvärdet är 300, så allt högre är lämpligt.
Gå till administrationskonsolen för webbplatser och navigera till Geometrixx:
https://localhost:4502/siteadmin#/content/geometrixx.
Den nya kolumnen anropades Started är tillgängligt och visar anpassad information enligt följande:
Om flera rutnätskonfigurationer matchar den begärda sökvägen som definieras av pathRegex egenskapen används den första, inte den mest specifika, vilket betyder att ordningen på konfigurationerna är viktig.
Resultatet av kursen finns i Anpassa administrationskonsolen för webbplatser paket på paketresurs.