Vous consultez actuellement l'aide de la version:

L’IU classique utilise ExtJS pour créer des widgets qui donnent leur apparence aux composants. Compte tenu de la nature de ces widgets, il existe des différences entre la façon dont les composants interagissent avec l’interface utilisateur classique et l’interface utilisateur classique tactile.

Remarque :

De nombreux aspects du développement de composants sont communs aux deux interfaces utilisateur. Vous êtes donc invité à lire la page Principes de base des composants AEM avant d’utiliser cette page qui traite des particularités de l’IU classique.

Remarque :

Le langage HTL (HTML Template Language) et JSP peuvent tous deux être utilisés pour développer des composants pour l’IU classique. Cependant, cette page illustre le développement avec JSP. Cela est simplement dû au fait que JSP est traditionnellement utilisé dans l’IU classique.

HTL est désormais le langage de script recommandé pour AEM. Pour comparer les deux méthodes, reportez-vous aux sections HTL et Développement de composants AEM.

Structure

La structure de base d’un composant est traitée à la page Principes de base des composants AEM qui s’applique aux interfaces utilisateur classique et tactile. Même si vous ne devez pas utiliser les paramètres de l’IU tactile dans votre nouveau composant, il est intéressant de les connaître lorsque vous héritez des composants existants.

Scripts JSP

Les servlets ou scripts JSP peuvent être utilisés pour le rendu des composants. Selon les règles de traitement des requêtes de Sling, le nom du script par défaut est :

<nom_composant>.jsp

global.jsp

Le fichier de script JSP global.jsp est utilisé pour fournir un accès rapide à des objets spécifiques (accéder à du contenu, par exemple) à n’importe quel fichier de script JSP utilisé pour le rendu d’un composant.

Par conséquent, global.jsp doit être inclus dans chaque script JSP de rendu de composant dans lequel un ou plusieurs des objets fournis dans global.jsp sont utilisés.

L’emplacement du fichier global.jsp par défaut est le suivant :

/libs/foundation/global.jsp

Remarque :

Le chemin d’accès /libs/wcm/global.jsp, qui était utilisé par les versions CQ 5.3 et antérieures, est désormais obsolète.

Fonction de global.jsp, des API utilisées et des bibliothèques de balises

Vous trouverez, ci-dessous, les objets les plus importants fournis à partir du fichier global.jsp par défaut :

Résumé :

  • <cq:defineObjects />
    • slingRequest – Objet Requête enveloppé (SlingHttpServletRequest).
    • slingResponse – Objet Réponse enveloppé (SlingHttpServletResponse).
    • resource – Objet Ressource Sling (slingRequest.getResource();).
    • resourceResolver – Objet Résolveur de ressources Sling (slingRequest.getResoucreResolver();).
    • currentNode – Nœud JCR résolu pour la requête.
    • log – Enregistreur par défaut ().
    • sling – Assistant de script Sling.
    • properties – Propriétés de la ressource gérée (resource.adaptTo(ValueMap.class);).
    • pageProperties – Propriétés de la page de la ressource gérée.
    • pageManager – Gestionnaire de pages permettant d’accéder aux pages de contenu AEM (resourceResolver.adaptTo(PageManager.class);).
    • component – Objet du composant AEM en cours.
    • designer – Objet Designer permettant de récupérer des informations de conception (resourceResolver.adaptTo(Designer.class);).
    • currentDesign – Conception de la ressource gérée.
    • currentStyle – Style de la ressource gérée.

Accès au contenu

Il existe trois méthodes pour accéder au contenu dans AEM WCM :

  • Par le biais de l’objet des propriétés introduit dans global.jsp :
    L’objet des propriétés est une instance d’une ValueMap (voir API Sling) qui contient toutes les propriétés de la ressource en cours.
    Exemple : String pageTitle = properties.get("jcr:title", "no title"); utilisé dans le script de rendu d’un composant de page.
    Exemple : String paragraphTitle = properties.get("jcr:title", "no title"); utilisé dans le script de rendu d’un composant de paragraphe standard.
  • Par le biais de l’objet currentPage introduit dans global.jsp :
    L’objet currentPage est une instance d’une page (voir API AEM). La classe de page fournit plusieurs méthodes d’accès au contenu.
    Exemple : String pageTitle = currentPage.getTitle();
  • Par le biais de l’objet currentNode introduit dans global.jsp :
    L’objet currentNode est une instance d’un nœud (voir API JCR). Les propriétés d’un nœud sont accessibles via la méthode getProperty().
    Exemple : String pageTitle = currentNode.getProperty("jcr:title");

Bibliothèques de balises JSP

Les bibliothèques de balises CQ et Sling vous donnent accès à des fonctions spécifiques à utiliser dans le script JSP de vos modèles et composants.

Pour plus d’informations, consultez le document Bibliothèques de balises

Utilisation de bibliothèques HTML côté client

Les sites web modernes sont très dépendants du traitement côté client effectué par du code JavaScript et CSS complexe. Organiser et optimiser la diffusion de ce code est une opération qui peut se révéler complexe.

Pour faciliter cette opération, AEM fournit des dossiers de bibliothèques côté client qui vous permettent de stocker votre code côté client dans le référentiel, de le classer dans des catégories, et de définir quand et comment chaque catégorie de code doit être diffusée au client. Le système de bibliothèque côté client se charge alors de la génération des liens appropriés dans la page web finale pour charger le code correct.

Pour plus d’informations, voir le document Utilisation de bibliothèques HTML côté client.

Dialogue

Votre composant a besoin d’une boîte de dialogue pour que les auteurs puissent ajouter et configurer le contenu.

Pour plus d’informations, voir Composants AEM – Principes de base

Configuration du comportement de modification

Vous pouvez configurer le comportement de modification d’un composant. Cela inclut les attributs tels que les actions disponibles pour le composant, les caractéristiques de l’éditeur statique et les écouteurs associés aux événements sur le composant. La configuration est commune aux interfaces utilisateur tactile et classique, avec cependant quelques différences spécifiques.

La configuration du comportement de modification d’un composant s’effectue en ajoutant un nœud cq:editConfig de type cq:EditConfig sous le nœud de composant (de type cq:Component), ainsi qu’en ajoutant des nœuds enfants et des propriétés spécifiques.  

Utilisation et extension de widgets ExtJS

Pour plus d’informations, voir Utilisation et extension de widgets ExtJS.

Utilisation de xtypes pour les widgets ExtJS

Pour plus d’informations, voir Utilisation de xtypes.

Développement de nouveaux composants

Cette section vous explique comment créer vos propres composants et les ajouter au système de paragraphes.

Pour commencer rapidement, une méthode consiste à copier un élément existant, puis à effectuer les modifications de votre choix.

Le développement d’un composant est décrit en détail dans la section Extension du composant texte et image – Exemple.

Développement d’un nouveau composant (adaptation d’un composant existant)

Pour développer un nouveau composant pour AEM sur la base d’un composant existant, vous pouvez copier ce composant, créer un fichier JavaScript pour le nouveau composant et le stocker dans un emplacement accessible à AEM (voir Personnalisation des composants et d’autres éléments) :

  1. À l’aide de CRXDE Lite, créez un dossier de composants dans :

    /apps/<monProjet>/components/<monComposant>

    Recréez la structure de nœud comme dans libs, puis copiez la définition d’un composant existant, tel que le composant Texte. Par exemple, pour personnaliser le composant Texte, copiez :

    • de /libs/foundation/components/text
    • vers /apps/myProject/components/text
  2. Modifiez jcr:title pour tenir compte de son nouveau nom.

  3. Ouvrez le nouveau dossier de composants et effectuez les modifications voulues. Supprimez également toute information superflue du dossier.

    Vous pouvez effectuer les modifications suivantes :

    • Ajouter un nouveau champ dans la boîte de dialogue
      • cq:dialog : boîte de dialogue pour l’interface utilisateur tactile
      • dialog : boîte de dialogue pour l’interface utilisateur classique
    • Remplacer le fichier .jsp (lui donner le nom du nouveau composant) ou
    • Retravailler complètement le composant, si vous le souhaitez

    Par exemple, si vous prenez une copie du composant Texte standard, vous pouvez ajouter un champ supplémentaire à la boîte de dialogue, puis mettre à jour le fichier .jsp pour traiter l’entrée qui y est effectuée.

    Remarque :

    Un composant pour :

    • l’interface utilisateur tactile utilise des composants Granite
       ;
    • l’interface utilisateur classique utilise des widgets ExtJS.

    Remarque :

    Une boîte de dialogue définie pour l’interface utilisateur classique fonctionne dans l’interface utilisateur tactile.

    En revanche, une boîte de dialogue définie pour l’interface utilisateur tactile ne fonctionne pas dans l’interface utilisateur classique.

    En fonction de l’instance et de l’environnement de création, vous pouvez définir les deux types de boîte de dialogue pour votre composant.

  4. L’un des nœuds suivants doit être présent et correctement initialisé pour que le nouveau composant puisse s’afficher :

    • cq:dialog : boîte de dialogue pour l’interface utilisateur tactile
    • dialog : boîte de dialogue pour l’interface utilisateur classique
    • cq:editConfig : comportement des composants dans l’environnement de modification (glisser-déposer, par exemple)
    • design_dialog : boîte de dialogue pour le mode Création (interface utilisateur classique uniquement)
  5. Activez le nouveau composant dans votre système de paragraphes en effectuant l’une des opérations suivantes :

    • Utilisez CRXDE Lite pour ajouter la valeur <chemin-accès-composant> (par exemple : /apps/geometrixx/components/myComponent) à la propriété Components du nœud /etc/designs/geometrixx/jcr:content/contentpage/par.
    • Suivez les instructions de la section Ajout de nouveaux composants aux systèmes de paragraphes.
  6. Dans AEM WCM, ouvrez une page de votre site web et insérez un nouveau paragraphe du type que vous venez de créer pour vous assurer que le composant fonctionne correctement.

Remarque :

Pour afficher des statistiques de durée pour le chargement d’une page, vous pouvez utiliser la combinaison de touches Ctrl+Maj+U, avec ?debugClientLibs=true défini dans l’URL.

Ajout d’un nouveau composant au système de paragraphes (mode Création)

Une fois que le composant a été développé, vous l’ajoutez au système de paragraphes, ce qui permet aux auteurs de le sélectionner et de l’utiliser lors de la modification d’une page.

  1. Accédez à une page de votre environnement de création qui utilise le système de paragraphes ; par exemple, <contentPath>/Test.html.

  2. Pour basculer vers le mode Création, effectuez l’une des opérations suivantes :

    • Ajoutez ?wcmmode=design à la fin de l’URL et accédez-y à nouveau :
      <contextPath>/ Test.html?wcmmode=design.
    • Cliquez sur Conception dans le sidekick.

    Vous êtes maintenant en mode Création et vous pouvez modifier le système de paragraphes.

  3. Cliquez sur Modifier.

    La liste des composants appartenant au système de paragraphes est affichée. Votre nouveau composant est également répertorié.

    Les composants peuvent être activés (ou désactivés) pour déterminer lesquels sont proposés à l’auteur lors de la modification d’une page.

  4. Activez votre composant, puis revenez au mode d’édition normal pour vérifier qu’il est bien disponible.

Extension du composant Texte et image – Exemple

Cette section vous explique comment étendre le composant Texte et image standard (un composant couramment utilisé) avec une fonctionnalité de placement d’images configurable.

L’extension du composant Texte et image permet aux éditeurs d’utiliser toutes les fonctionnalités existantes du composant et leur offre, en outre, la possibilité de positionner l’image :

  • Sur le côté gauche du texte (comportement actuel et nouvelle valeur par défaut)
  • Ainsi que sur le côté droit

Après avoir étendu ce composant, vous pouvez configurer le positionnement des images au moyen de la boîte de dialogue correspondante.

Les techniques suivantes sont décrites dans cet exercice :

  • Copie du nœud de composant existant et modification de ses métadonnées
  • Modification de la boîte de dialogue du composant, y compris l’héritage des widgets des boîtes de dialogue parentes
  • Modification du script du composant pour mettre en œuvre la nouvelle fonctionnalité

Remarque :

Cet exemple concerne l’IU classique.

Remarque :

Cet exemple est basé sur l’échantillon de contenu Geometrixx. Celui-ci n’est plus fourni avec AEM et a été remplacé par We.Retail. Pour savoir comment télécharger et installer Geometrixx, voir le document Implémentation de référence We.Retail.

Extension du composant textimage existant

Pour créer le composant, nous allons nous baser sur le composant textimage standard et le modifier. Nous allons stocker le nouveau composant dans l’exemple d’application Geometrixx AEM WCM.

  1. Copiez le composant textimage standard depuis /libs/foundation/components/textimage dans le dossier de composants Geometrixx, /apps/geometrixx/components, en utilisant textimage comme nom de nœud cible. (Pour copier le composant, accédez à son emplacement, cliquez avec le bouton droit de la souris, sélectionnez Copier, puis accédez au répertoire cible.)

    chlimage_1
  2. Pour que cet exemple reste simple, accédez au composant que vous avez copié et supprimez tous les sous-nœuds du nouveau nœud textimage, à l’exception de ceux mentionnés ci-dessous :

    • définition de la boîte de dialogue : textimage/dialog
    • script de composant : textimage/textimage.jsp
    • nœud de configuration d’édition (autorisant le déplacement de ressources par glisser-déposer) : textimage/cq:editConfig

    Remarque :

    La définition de la boîte de dialogue dépend de l’interface utilisateur :

    • IU tactile : textimage/cq:dialog
    • IU classique : textimage/dialog

  3. Modifiez les métadonnées du composant :

    • Nom du composant
      • Définissez jcr:description sur Text Image Component (Extended).
      • Définissez jcr:title sur Text Image (Extended).
    • Groupe, où le composant est répertorié dans le sidekick (laisser tel quel)
      • Laissez componentGroup défini sur General.
    • Composant parent pour le nouveau composant (le composant textimage standard)
      • Définissez sling:resourceSuperType sur foundation/components/textimage.

    Après cette étape, le nœud de composant ressemble à ceci :

     

    chlimage_1
  4. Définissez la propriété sling:resourceType du nœud de configuration d’édition de l’image (propriété : textimage/cq:editConfig/cq:dropTargets/image/parameters/sling:resourceType) sur geometrixx/components/textimage.
    .

    De cette manière, lorsqu’une image est déposée sur le composant de la page, la propriété sling:resourceType du composant textimage étendu est définie sur geometrixx/components/textimage..

  5. Modifiez la boîte de dialogue du composant afin d’inclure la nouvelle option. Le nouveau composant hérite des sections de la boîte de dialogue qui sont identiques à l’original. Le seul ajout que nous effectuons consiste à étendre l’onglet Avancé, en ajoutant une liste déroulante Position d’image, avec les options Gauche et Droite :

    • Laissez les propriétés textimage/dialog telles quelles.

    Notez que textimage/dialog/items comporte quatre sous-nœuds, tab1 à tab4, qui représentent les quatre onglets de la boîte de dialogue textimage.

    • Pour les deux premiers onglets (tab1 et tab2) :
      • Changez xtype en cqinclude (pour hériter du composant standard).
      • Ajoutez une propriété path avec les valeurs /libs/foundation/components/textimage/dialog/items/tab1.infinity.json et /libs/foundation/components/textimage/dialog/items/tab2.infinity.json, respectivement.
      • Supprimez toutes les autres propriétés ou tous les autres sous-nœuds.
    • Pour tab3 :
      • Ne modifiez pas les autres propriétés et sous-nœuds.
      • Ajoutez une nouvelle définition de champ à tab3/items, la position du nœud de type cq:Widget.
      • Définissez les propriétés suivantes (du type String) pour le nouveau nœud tab3/items/position :
        • name : ./imagePosition
        • xtype : selection
        • fieldLabel : Position d’image
        • type : select
      • Ajoutez un sous-nœud position/options de type cq:WidgetCollection pour représenter les deux options de positionnement d’images. En dessous, créez deux nœuds, o1 et o2, de type nt:unstructured.
      • Pour le nœud position/options/o1, définissez les propriétés : text sur Left et value sur left.
      • Pour le nœud position/options/o2, définissez les propriétés : text sur Right et value sur right.
    • Supprimez tab4.

    La position de l’image est conservée dans le contenu en tant que propriété imagePosition du nœud représentant le paragraphe textimage. Après avoir suivi ces étapes, la boîte de dialogue du composant ressemble à ceci :

    chlimage_1
  6. Étendez le script du composant, textimage.jsp, avec une gestion supplémentaire du nouveau paramètre :

    Image image = new Image(resource, "image");
    
    if (image.hasContent() || WCMMode.fromRequest(request) == WCMMode.EDIT) {
         image.loadStyleData(currentStyle);

    Nous allons remplacer le fragment de code %><div class="image"><% par le nouveau code qui génère un style personnalisé pour cette balise.

    // todo: add new CSS class for the 'right image' instead of using 
    // the style attribute 
    String style="";
         if (properties.get("imagePosition", "left").equals("right")) { 
              style = "style=\"float:right\""; 
         } 
         %><div <%= style %> class="image"><%

    4. Enregistrez le composant dans le référentiel. Le composant est prêt à être testé.

Vérification du nouveau composant

Une fois que le composant a été développé, vous pouvez l’ajouter au système de paragraphes, ce qui permet aux auteurs de le sélectionner et de l’utiliser lors de la modification d’une page. Les étapes suivantes vous permettent de tester le composant.

  1. Ouvrez une page dans Geometrixx ; English / Company, par exemple.

  2. Basculez vers le mode Création en cliquant sur Conception dans le sidekick.

  3. Modifiez la conception du système de paragraphes en cliquant sur Modifier dans le système de paragraphes au milieu de la page. La liste des composants qui peuvent être placés dans le système de paragraphes s’affiche alors. Elle doit inclure le composant que vous venez de développer, à savoir Texte Image (Étendu). Activez-le pour le système de paragraphes en le sélectionnant et en cliquant sur OK.

  4. Revenez au mode d’édition.

  5. Ajoutez le paragraphe Texte Image (Étendu) au système de paragraphes, puis initialisez le texte et l’image avec l’échantillon de contenu. Enregistrez les modifications.

  6. Ouvrez la boîte de dialogue du paragraphe de texte et d’image, définissez la position de l’image sur Droite dans l’onglet Avancé, puis cliquez sur OK pour enregistrer les modifications.

  7. Le rendu du paragraphe est effectué avec l’image sur la droite.

  8. Le composant est maintenant prêt à l’emploi.

Le composant stocke son contenu dans un paragraphe sur la page Company.

Désactivation de la fonctionnalité Téléchargement du composant image

Pour désactiver cette fonctionnalité, nous allons utiliser le composant image standard et le modifier. Nous allons stocker le nouveau composant dans l’exemple d’application Geometrixx.

  1. Copiez le composant image standard depuis /libs/foundation/components/image dans le dossier de composants Geometrixx, /apps/geometrixx/components, en utilisant image comme nom de nœud cible.

    chlimage_1
  2. Modifiez les métadonnées du composant :

    • Définissez jcr:title sur Image (Étendu).
  3. Accédez à /apps/geometrixx/components/image/dialog/items/image.

  4. Ajouter une nouvelle propriété :

    • Nom : allowUpload
    • Type : Chaîne
    • Valeur : false
    chlimage_1
  5. Cliquez sur Enregistrer tout. Le composant est prêt à être testé.

  6. Ouvrez une page dans Geometrixx ; English / Company, par exemple.

  7. Basculez vers le mode Création et activez Image (Étendu).

  8. Revenez au mode d’édition et ajoutez-le au système de paragraphes. Sur les images suivantes, vous pouvez voir les différences entre le composant image d’origine et celui que vous venez de créer.

    Composant image d’origine :

    chlimage_1

    Votre nouveau composant image :

    chlimage_1
  9. Le composant est maintenant prêt à l’emploi.

Ce produit est distribué sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage à l’identique 3.0 non transposé  Les publications Twitter™ et Facebook ne sont pas couvertes par les dispositions Creative Commons.

Mentions légales   |   Politique de confidentialité en ligne