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.È possibile utilizzare la classificazione del servizio per gestire l'ordine di esecuzione di più implementazioni 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:
https://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:
https://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(/.*?lang=it)?
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à:
dataIndex: starred
di tipo String
intestazione: Starred
di tipo String
xtype: gridcolumn
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:
https://localhost:4502/siteadmin#/content/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).