La console Amministrazione siti Web può essere estesa per visualizzare colonne personalizzate. La console è basata su un oggetto JSON che può essere esteso creando un servizio OSGI che implementa l'interfaccia ListInfoProvider
. Tale servizio modifica l'oggetto JSON inviato al client per creare la console.
Questa esercitazione dettagliata spiega come visualizzare una nuova colonna nella console Amministrazione siti Web implementando l'interfaccia ListInfoProvider
. Si compone dei seguenti passaggi:
Questa esercitazione può essere utilizzata anche per estendere le seguenti console di amministrazione:
L'interfaccia ListInfoProvider
definisce due metodi:
updateListGlobalInfo
, per aggiornare le proprietà globali dell'elenco,updateListItemInfo
, per aggiornare una singola voce di elenco.Gli argomenti di entrambi i metodi sono:
request
, l'oggetto di richiesta Sling HTTP associato,info
, l'oggetto JSON da aggiornare, che è rispettivamente l'elenco globale o la voce di elenco corrente,resource
, una risorsa Sling.Esempio di implementazione:
Aggiunge una proprietà starred per ogni elemento, che è true
se il nome della pagina inizia con un e, altrimenti false
.
Aggiunge una proprietà starredCount, che è globale per l'elenco e contiene il numero di voci dell'elenco di destinazione.
Per creare il servizio OSGI:
Il nuovo servizio è attivo e funzionante.
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
definisce una proprietà già esistente nell'oggetto response, il suo valore verrà sovrascritto da quello fornito.ListInfoProvider
.Quando aprite la console di amministrazione dei siti Web e sfogliate il sito, il browser esegue una chiamata ajax per ottenere l’oggetto JSON utilizzato per creare la console. Ad esempio, quando individuate la cartella /content/geometrixx
, la seguente richiesta viene inviata al server AEM per creare la console:
http://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
Per essere certi che il nuovo servizio sia in esecuzione dopo aver distribuito il pacchetto che lo contiene:
Impostate il browser sul seguente URL:
http://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
La risposta deve visualizzare le nuove proprietà come segue:
L'ultimo passaggio consiste nell'adattare la struttura dei nodi della console Amministrazione siti Web per visualizzare la nuova proprietà per tutte le pagine di Geometrixx sovrapponendo /libs/wcm/core/content/siteadmin
. Procedere come segue:
In CRXDE Lite, creare la struttura dei nodi /apps/wcm/core/content
con nodi di tipo sling:Folder
per riflettere la struttura /libs/wcm/core/content
.
Copiare il nodo /libs/wcm/core/content/siteadmin
e incollarlo sotto /apps/wcm/core/content
.
Copiare il nodo /apps/wcm/core/content/siteadmin/grid/assets
in /apps/wcm/core/content/siteadmin/grid/geometrixx
e modificarne le proprietà:
Rimuovi pageText
Impostare pathRegex su /content/geometrixx(/.*)?
In questo modo la configurazione della griglia sarà attiva per tutti i siti Web geometrixx.
Impostare storeProxySuffix su .pages.json
Modificare la proprietà multivalore storeReaderFields e aggiungere il valore starred
.
Per attivare la funzionalità MSM, aggiungere i seguenti parametri MSM alla proprietà multi-stringa storeReaderFields:
Aggiungete un nodo starred
(di tipo nt:unstructure) sotto /apps/wcm/core/content/siteadmin/grid/geometrixx/columns
con le seguenti proprietà:
starred
di tipo StringStarred
di tipo Stringgridcolumn
di tipo String(facoltativo) Rilasciare le colonne che non si desidera visualizzare in /apps/wcm/core/content/siteadmin/grid/geometrixx/columns
/siteadmin
è un percorso personalizzato che, come impostazione predefinita, punta a /libs/wcm/core/content/siteadmin
.
Per reindirizzare l'utente alla versione dell'amministratore del sito in /apps/wcm/core/content/siteadmin
, definire la proprietà sling:vanityOrder
in modo che abbia un valore superiore a quello definito in /libs/wcm/core/content/siteadmin
. Il valore predefinito è 300, quindi è adatto qualsiasi valore superiore.
Passate alla console di amministrazione dei siti Web e individuate il sito di Geometrixx:
È disponibile la nuova colonna denominata Starred, con le seguenti informazioni personalizzate:
Se più configurazioni della griglia corrispondono al percorso richiesto definito dalla proprietà pathRegex, verrà utilizzato il primo, e non il percorso più specifico, il che significa che l'ordine delle configurazioni è importante.
Il risultato di questa esercitazione è disponibile nel pacchetto Customizing the Websites Administration Console on Package Share (Personalizzazione della console di amministrazione dei siti Web).