Personnalisation de la console Sites web (IU classique)

Ajout d’une colonne personnalisée à la console Sites web (siteadmin)

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 :

  1. Création du service OSGI et déploiement du lot où il réside sur le serveur AEM.
  2. (Facultatif) Test du nouveau service en effectuant un appel JSON pour demander l’objet JSON qui est utilisé pour créer la console.
  3. Affichage de la nouvelle colonne en étendant la structure des nœuds de la console dans le référentiel.
Remarque

Ce tutoriel peut également être utilisé pour étendre les consoles d’administration suivantes :

  • Console Digital Assets
  • Console Community

Création du service OSGI

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 :

  1. Dans CRXDE Lite, créez un lot.
  2. Ajoutez l’exemple de code ci-dessous.
  3. Créez le lot.

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"));
        }
    }

}
ATTENTION
  • Votre implémentation doit déterminer, sur la base de la requête et/ou de la ressource fournies, si elle doit ou non ajouter les informations à l’objet JSON.
  • Si votre implémentation de 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.
    Vous pouvez utiliser le classement de service pour gérer l’ordre d’exécution de plusieurs implémentations de ListInfoProvider.

Test du nouveau service

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. For example, when you browse to the /content/geometrixx folder, the following request is sent to the AEM server to build the 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 :

  1. Pointez votre navigateur sur l’URL suivante :

    http://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin

  2. La réponse doit afficher les nouvelles propriétés comme suit :

screen_shot_2012-02-13at163046

Affichage de la nouvelle colonne

The last step consists in adapting the nodes structure of the Websites Administration console to display the new property for all the Geometrixx pages by overlaying /libs/wcm/core/content/siteadmin. Procédez comme suit :

  1. In CRXDE Lite, create the nodes structure /apps/wcm/core/content with nodes of type sling:Folder to reflect the structure /libs/wcm/core/content.

  2. Copiez le noeud /libs/wcm/core/content/siteadmin et collez-le ci-dessous /apps/wcm/core/content.

  3. Copiez le noeud /apps/wcm/core/content/siteadmin/grid/assets dans /apps/wcm/core/content/siteadmin/grid/geometrixx et modifiez ses propriétés :

    • Supprimez pageText

    • Set pathRegex to /content/geometrixx(/.*)?

      De cette manière, la configuration de grille sera active pour tous les sites web geometrixx.

    • Set storeProxySuffix to .pages.json

    • Modifiez la propriété à plusieurs valeurs storeReaderFields et ajoutez la valeur starred.

    • To activate MSM functionality add the following MSM parameters to the multi-String property storeReaderFields:

      • msm:isSource
      • msm:isInBlueprint
      • msm:isLiveCopy
  4. Add a starred node (of type nt:unstructured) below /apps/wcm/core/content/siteadmin/grid/geometrixx/columns with the following properties:

    • dataIndex: starred de type chaîne
    • en-tête: Starred de type chaîne
    • xtype: gridcolumn de type chaîne
  5. (optional) Drop the columns you do not want to display at /apps/wcm/core/content/siteadmin/grid/geometrixx/columns

  6. /siteadmin est un chemin de vanité qui, par défaut, pointe vers /libs/wcm/core/content/siteadmin.

    To redirect this to your version of siteadmin on /apps/wcm/core/content/siteadmin define the property sling:vanityOrder to have a value higher than that defined on /libs/wcm/core/content/siteadmin. La valeur par défaut est de 300 ; toute valeur plus élevée est donc acceptable.

  7. Accédez à la console d’administration des sites Web et accédez au site Geometrixx :

    http://localhost:4502/siteadmin#/content/geometrixx.

  8. La nouvelle colonne nommée Starred affiche des informations personnalisées comme suit :

screen_shot_2012-02-14at104602

ATTENTION

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.

Exemple de module

The outcome of this tutorial is available in the Customizing the Websites Administration Console package on Package Share.

Sur cette page