La console Administration de sites web peut être étendue pour afficher des colonnes personnalisées. La console est générée sur la base d’un objet JSON qui peut être étendu en créant un service OSGI qui implémente l’interface . ListInfoProvider
Un tel service modifie l’objet JSON envoyé au client pour créer la console.
Ce tutoriel détaillé explique comment afficher une nouvelle colonne dans la console Administration de sites web en implémentant l’interface ListInfoProvider
. Cette méthode comprend les étapes suivantes :
Ce tutoriel peut également être utilisé pour étendre les consoles d’administration suivantes :
L’interface ListInfoProvider
définit deux méthodes :
updateListGlobalInfo
, pour mettre à jour les propriétés globales de la liste,updateListItemInfo
, pour mettre à jour un seul élément de liste.Les arguments pour les deux méthodes sont les suivants :
request
, l’objet de requête HTTP Sling associé,info
, l’objet JSON à mettre à jour, à savoir la liste globale ou l’élément de liste en cours,resource
, une ressource Sling.L’exemple d’implémentation ci-dessous :
ajoute une propriété starred pour chaque élément, à savoir true
si le nom de page commence par un e et false
dans les autres cas ;
ajoute une propriété starredCount qui est « global » pour la liste et qui contient le nombre d’éléments de liste signalés par un astérisque.
Pour créer le service OSGI, procédez comme suit :
Le nouveau service est opérationnel.
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
définit une propriété qui existe déjà dans l’objet de réponse, sa valeur est remplacée par celle que vous fournissez.ListInfoProvider
.Lorsque vous ouvrez la console Administration de sites web et parcourez votre site, le navigateur génère un appel ajax pour obtenir l’objet JSON qui est utilisé pour créer la console. Par exemple, lorsque vous accédez au /content/geometrixx
, la requête suivante est envoyée au serveur AEM pour créer la console :
http://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
Pour vous assurer que le nouveau service s’exécute après le déploiement du lot où il réside, procédez comme suit :
Pointez votre navigateur vers l’URL suivante :
http://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
La réponse doit afficher les nouvelles propriétés comme suit :
La dernière étape consiste à adapter la structure des noeuds de la console d’administration des sites web afin d’afficher la nouvelle propriété pour toutes les pages de Geometrixx en recouvrant /libs/wcm/core/content/siteadmin
. Procédez comme suit :
Dans CRXDE Lite, créez la structure des noeuds. /apps/wcm/core/content
avec des noeuds de type sling:Folder
pour refléter la structure /libs/wcm/core/content
.
Copiez le noeud /libs/wcm/core/content/siteadmin
et collez-le ci-dessous /apps/wcm/core/content
.
Copiez le noeud /apps/wcm/core/content/siteadmin/grid/assets
to /apps/wcm/core/content/siteadmin/grid/geometrixx
et modifie ses propriétés :
Supprimez pageText
Définir pathRegex to /content/geometrixx(/.*)?
De cette manière, la configuration de grille sera active pour tous les sites web geometrixx.
Définir storeProxySuffix to .pages.json
Modifiez la propriété à plusieurs valeurs storeReaderFields et ajoutez la valeur starred
.
Pour activer la fonctionnalité MSM, ajoutez les paramètres MSM suivants à la propriété multi-String . storeReaderFields:
Ajouter un starred
noeud (de type nt:unstructured) ci-dessous /apps/wcm/core/content/siteadmin/grid/geometrixx/columns
avec les propriétés suivantes :
starred
de type ChaîneStarred
de type Chaînegridcolumn
de type Chaîne(Facultatif) Déposez les colonnes que vous ne souhaitez pas afficher à l’adresse /apps/wcm/core/content/siteadmin/grid/geometrixx/columns
/siteadmin
est un chemin de redirection vers un microsite qui, par défaut, pointe vers /libs/wcm/core/content/siteadmin
.
Pour le rediriger vers votre version de siteadmin sur /apps/wcm/core/content/siteadmin
définir la propriété ; sling:vanityOrder
avoir une valeur supérieure à celle définie sur /libs/wcm/core/content/siteadmin
. La valeur par défaut est de 300 ; toute valeur plus élevée est donc acceptable.
Accédez à la console Administration de sites web et accédez au site Geometrixx :
La nouvelle colonne nommée Starred affiche des informations personnalisées comme suit :
Si plusieurs configurations de grille correspondent au chemin d’accès demandé défini par la propriété pathRegex, c’est la première qui est utilisée, et non la plus spécifique. Cela signifie que l’ordre des configurations est important.
Le résultat de ce tutoriel est disponible dans la section Personnalisation de la console d’administration des sites web module sur Package Share.