Show Menu
SUJETS×

Extension du Multi Site Manager

Cette page vous explique comment étendre les fonctionnalités de Multi Site Manager :
  • Découvrez les principaux membres de l’API Java de MSM.
  • Créez une nouvelle action de synchronisation pouvant être utilisée dans une configuration de déploiement.
  • Supprimez l’étape « Chapitres » dans l’assistant Créer un site.
  • Modifiez la langue par défaut et les codes pays.
Le Multi Site Manager et son API sont utilisés lors de la création d’un site Web. Ils sont donc destinés exclusivement à l’environnement de création.

Vue d’ensemble de l’API Java

La gestion de sites multiples comprend les modules suivants :
Les principaux objets de l’API MSM interagissent comme suit (voir aussi Termes utilisés ) :
  • Blueprint
    A Blueprint (as in blueprint configuration ) specifies the pages from which a live copy can inherit content.
    • The use of a blueprint configuration ( Blueprint ) is optional, but:
      • Allows the author to use the Rollout option on the source (to (explicitly) push modifications to live copies that inherit from this source).
      • Permet à l’auteur d’utiliser Créer un site . L’utilisateur peut ainsi sélectionner facilement les langues et configurer la structure de la Live Copy.
      • Définit la configuration de déploiement par défaut pour toutes les Live Copy résultantes.
  • LiveRelationship Le LiveRelationship paramètre spécifie la connexion (relation) entre une ressource dans la branche de la copie dynamique et sa ressource source/plan de projet équivalente.
    • Les relations sont utilisées lors de la réalisation de l’héritage et du déploiement.
    • LiveRelationship les objets permettent d’accéder (références) aux configurations de déploiement ( RolloutConfig ), LiveCopy et LiveStatus aux objets liés à la relation.
    • For example, a live copy is created in /content/copy/us from the source/blueprint at /content/we-retail/language-masters . Les ressources /content/we.retail/language-masters/en/jcr:content et /content/copy/us/en/jcr:content forment une relation.
  • LiveCopy LiveCopy contient les détails de configuration pour les relations ( LiveRelationship ) entre les ressources de copie dynamique et leurs ressources source/plan directeur.
    • Use the LiveCopy class to access to the path of the page, the path of the source/blueprint page, the rollout configurations and whether child pages are also included in the LiveCopy .
    • A LiveCopy node is created each time Create Site or Create Live Copy is used.
  • LiveStatus
    Les objets LiveStatus donnent accès à l’état d’exécution d’une LiveRelationship . Permet d’interroger l’état de synchronisation d’une Live Copy.
  • LiveAction
    Une LiveAction est une action qui est exécutée sur chaque ressource impliquée dans le déploiement.
    • Les LiveAction sont générées uniquement par RolloutConfigs.
  • LiveActionFactory
    Creates LiveAction objects given a LiveAction configuration. Les configurations sont stockées en tant que ressources dans le référentiel.
  • RolloutConfig Le RolloutConfig contient une liste de LiveActions , à utiliser lors du déclenchement. The LiveCopy inherits the RolloutConfig and the result is present in the LiveRelationship .
    • La première configuration d'une Live Copy utilise également un RolloutConfig (qui déclenche les LiveActions).

Création d’une action de synchronisation

Créez des actions de synchronisation personnalisées à utiliser avec vos configurations de déploiement. Créez une action de synchronisation lorsque les actions installées ne répondent pas aux exigences spécifiques de votre application. Pour ce faire, créez deux classes :
The LiveActionFactory creates instances of the LiveAction class for a given configuration:
  • Les classes LiveAction incluent les méthodes suivantes :
    • getName  : renvoie le nom de l’action qui sert à la désigner, par exemple, dans les configurations de déploiement.
    • execute  : réalise les tâches de l’action.
  • Les classes LiveActionFactory incluent les méthodes suivantes :
    • LIVE_ACTION_NAME : Champ contenant le nom du champ associé LiveAction . Ce nom doit coïncider avec la valeur renvoyée par la méthode getName de la classe LiveAction .
    • createAction : Crée une instance du LiveAction . Le paramètre facultatif Resource peut être utilisé pour fournir des informations de configuration.
    • createsAction : Renvoie le nom de l’élément associé LiveAction .

Accès au nœud de configuration LiveAction

Utilisez le nœud de configuration LiveAction dans le référentiel pour stocker les informations qui affectent le comportement d’exécution de l’instance LiveAction . Le nœud du référentiel qui stocke la configuration LiveAction est disponible pour l’objet LiveActionFactory lors de l’exécution. Par conséquent, vous pouvez ajouter des propriétés au nœud de configuration et les utiliser dans votre implémentation LiveActionFactory si nécessaire.
Par exemple, une LiveAction doit stocker le nom de l’auteur du plan directeur. Une propriété du nœud de configuration inclut le nom de la propriété de la page plan directeur qui stocke les informations. Lorsqu’elle est exécutée, la LiveAction récupère le nom de la propriété à partir de la configuration, puis obtient la valeur de la propriété.
The parameter of the [LiveActionFactory](https://helpx.adobe.com/experience-manager/6-5/sites/developing/using/reference-materials/javadoc/com/day/cq/wcm/msm/api/LiveActionFactory.html).createAction method is a Resource object. Cet objet Resource représente le nœud cq:LiveSyncAction pour cette LiveAction dans la configuration du déploiement. Voir Création d’une configuration de déploiement . Comme d’habitude, lorsque vous utilisez un nœud de configuration, vous devez l’adapter à un objet ValueMap  :
public LiveAction createAction(Resource resource) throws WCMException {
        ValueMap config;
        if (resource == null || resource.adaptTo(ValueMap.class) == null) {
            config = new ValueMapDecorator(Collections.<String, Object>emptyMap());
        } else {
            config = resource.adaptTo(ValueMap.class);
        }
        return new MyLiveAction(config, this);
}

Accès aux nœuds cibles, aux nœuds sources et à la relation LiveRelationship

Les objets suivants sont fournis en tant que paramètres de la méthode execute de l’objet LiveAction  :
  • Un objet Resource représentant la source de la Live Copy.
  • Un objet Resource représentant la cible de la Live Copy.
  • Objet LiveRelationship pour la Live Copy.
  • La valeur autoSave indique si votre LiveAction doit enregistrer les modifications apportées au référentiel.
  • La valeur reset indique le mode de réinitialisation du déploiement.
À partir de ces objets, vous pouvez obtenir toutes les informations sur la LiveCopy . You can also use the Resource objects to obtain ResourceResolver , Session , and Node objects. Ces objets sont utiles pour manipuler le contenu du référentiel :
Dans la première ligne du code suivant, source est l’objet Resource de la page source :
ResourceResolver resolver = source.getResourceResolver();
Session session = resolver.adaptTo(javax.jcr.Session.class);
Node sourcenode = source.adaptTo(javax.jcr.Node.class);

The Resource arguments may be null or Resources objects that do not adapt to Node objects, such as NonExistingResource objects.

Création d’une configuration de déploiement

Créez une configuration de déploiement lorsque celles installées ne répondent pas aux exigences de votre application :
La nouvelle configuration de déploiement est disponible quand vous définissez des configurations de déploiement sur une page Plan directeur ou Live Copy.

Créer la configuration du déploiement

  1. Open the Tools console in the classic UI; for example, https://localhost:4502/miscadmin#/etc
    Dans l’interface utilisateur standard tactile, vous pouvez accéder à la console Outils de l’IUs classique à l’aide des entrées de rail Outils , Opérations et Configuration .
  2. Dans l’arborescence des dossiers, sélectionnez le dossier Outils , MSM , Configurations de déploiement .
  3. Cliquez sur Nouveau , puis sur Nouvelle page pour définir les propriétés de configuration du déploiement :
    • Titre : Titre de la configuration de déploiement, telle que Ma configuration de déploiement
    • Nom  : nom du nœud qui stocke les valeurs de propriété, par exemple myrolloutconfig
    • Select RolloutConfig Template .
  4. Cliquez sur Créer .
  5. Double-cliquez sur la configuration de déploiement que vous avez créée pour l’ouvrir en vue d’une configuration ultérieure.
  6. Cliquez sur Modifier .
  7. In the Rollout Config dialog, select the Sync Trigger ​to define the action that causes the rollout to occur.
  8. Pour enregistrer les modifications, cliquez sur OK.

Ajouter des actions de synchronisation à la configuration de déploiement

Rollout configurations are stored below the /etc/msm/rolloutconfigs node. Add child nodes of type cq:LiveSyncAction to add synchronization actions to the rollout configuration. L’ordre des nœuds d’action de synchronisation détermine l’ordre dans lequel les actions se produisent.
  1. Open CRXDE Lite; for example https://localhost:4502/crx/de
  2. Select the jcr:content node below your rollout configuration node.
    Par exemple, pour la configuration de déploiement avec la propriété Name de myrolloutconfig , sélectionnez le nœud :
    /etc/msm/rolloutconfigs/myrolloutconfig/jcr:content
  3. Click Create then Create Node . Configurez ensuite les propriétés de nœud suivantes et cliquez sur OK  :
    • Name  : nom de nœud de l’action de synchronisation. The name must be the same as the Action Name in the table under Synchronization Actions , for example contentCopy or workflow .
    • Type : cq:LiveSyncAction
  4. Sélectionnez le noeud d’action que vous venez de créer et ajoutez la propriété suivante au noeud :
    • Nom : Nom de propriété de l’action. The name must be the same as the Property Name in the table under Synchronization Actions , for example enabled .
    • Type  : String
    • Valeur : valeur de propriété de l’action. For valid values, see the Properties column in Synchronization Actions , for example true .
  5. Ajoutez et configurez autant de nœuds d’action de synchronisation que vous le souhaitez. Réorganisez les nœuds d’action afin que leur ordre corresponde à celui dans lequel vous souhaitez qu’ils se produisent. Le nœud d’action le plus haut se produit en premier.
  6. Cliquez sur Enregistrer tout .

Création et utilisation d’une classe LiveActionFactory simple

Suivez les procédures de cette section pour développer une LiveActionFactory et l’utiliser dans une configuration de déploiement. Les procédures utilisent Maven et Eclipse pour développer et déployer la LiveActionFactory  :
  1. Créez le projet maven et importez-le dans Eclipse.
  2. Implémentez l’interface et déployez le bundle OSGi.
Le projet Maven et le code source de la classe Java sont disponibles dans le référentiel Git public.
CODE SUR GITHUB
Vous pouvez trouver le code de cette page sur GitHub.

Créer le projet Maven

La procédure suivante requiert l’ajout préalable du profil adobe-public à votre fichier de paramètres Maven.
  1. Ouvrez une session de terminal ou de ligne de commande et modifiez le répertoire de manière à ce qu’il pointe vers l’emplacement de création du projet.
  2. Saisissez la commande suivante :
    mvn archetype:generate -DarchetypeGroupId=com.day.jcr.vault -DarchetypeArtifactId=multimodule-content-package-archetype -DarchetypeVersion=1.0.0 -DarchetypeRepository=adobe-public-releases
    
    
  3. Spécifiez les valeurs suivantes à l’invite interactive :
    • groupId : com.adobe.example.msm
    • artifactId : MyLiveActionFactory
    • version : 1.0-SNAPSHOT
    • package : MyPackage
    • appsFolderName : myapp
    • artifactName : MyLiveActionFactory package
    • packageGroup : myPackages
  4. Lancez Eclipse et importez le projet Maven .

Ajouter des dépendances au fichier POM

Ajoutez des dépendances pour que le compilateur Eclipse puisse référencer les classes utilisées dans le code LiveActionFactory .
  1. Depuis l’explorateur de projet Eclipse, ouvrez le fichier :
    MyLiveActionFactory/pom.xml
  2. In the editor, click the pom.xml tab and locate the project/dependencyManagement/dependencies section.
  3. Ajoutez le code XML suivant dans l’élément dependencyManagement , puis enregistrez le fichier.
     <dependency>
      <groupId>com.day.cq.wcm</groupId>
      <artifactId>cq-msm-api</artifactId>
      <version>5.6.2</version>
      <scope>provided</scope>
     </dependency>
     <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.api</artifactId>
      <version>2.4.3-R1488084</version>
      <scope>provided</scope>
     </dependency>
     <dependency>
      <groupId>com.day.cq.wcm</groupId>
      <artifactId>cq-wcm-api</artifactId>
      <version>5.6.6</version>
      <scope>provided</scope>
     </dependency>
     <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.commons.json</artifactId>
      <version>2.0.6</version>
      <scope>provided</scope>
     </dependency>
     <dependency>
      <groupId>com.day.cq</groupId>
      <artifactId>cq-commons</artifactId>
      <version>5.6.4</version>
      <scope>provided</scope>
     </dependency>
     <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.jcr.jcr-wrapper</artifactId>
      <version>2.0.0</version>
      <scope>provided</scope>
     </dependency>
     <dependency>
      <groupId>com.day.cq</groupId>
      <artifactId>cq-commons</artifactId>
      <version>5.6.4</version>
      <scope>provided</scope>
     </dependency>
    
    
  4. Ouvrez le fichier POM pour le bundle depuis Project Explorer à l’adresse MyLiveActionFactory-bundle/pom.xml .
  5. Dans l’éditeur, cliquez sur l’onglet pom.xml et localisez la section project/dependencies. Ajoutez le code XML suivant dans l’élément dependencies, puis enregistrez le fichier :
     <dependency>
      <groupId>com.day.cq.wcm</groupId>
      <artifactId>cq-msm-api</artifactId>
     </dependency>
     <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.api</artifactId>
     </dependency>
     <dependency>
      <groupId>com.day.cq.wcm</groupId>
      <artifactId>cq-wcm-api</artifactId>
     </dependency>
     <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.commons.json</artifactId>
     </dependency>
     <dependency>
      <groupId>com.day.cq</groupId>
      <artifactId>cq-commons</artifactId>
     </dependency>
     <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.jcr.jcr-wrapper</artifactId>
     </dependency>
     <dependency>
      <groupId>com.day.cq</groupId>
      <artifactId>cq-commons</artifactId>
     </dependency>
    
    

Implémenter LiveActionFactory

La classe LiveActionFactory suivante implémente une LiveAction qui enregistre les messages sur les pages source et cible et copie la propriété cq:lastModifiedBy du nœud source vers le nœud cible. The name of the live action is exampleLiveAction .
  1. In the Eclipse Project Explorer, right-click the MyLiveActionFactory-bundle/src/main/java/com.adobe.example.msm package and click New > Class . Comme nom , entrez ExampleLiveActionFactory , puis cliquez sur Terminer .
  2. Ouvrez le fichier ExampleLiveActionFactory.java , remplacez le contenu par le code suivant et enregistrez le fichier.
    package com.adobe.example.msm;
    
    import java.util.Collections;
    
    import org.apache.felix.scr.annotations.Component;
    import org.apache.felix.scr.annotations.Property;
    import org.apache.felix.scr.annotations.Service;
    import org.apache.sling.api.resource.Resource;
    import org.apache.sling.api.resource.ResourceResolver;
    import org.apache.sling.api.resource.ValueMap;
    import org.apache.sling.api.wrappers.ValueMapDecorator;
    import org.apache.sling.commons.json.io.JSONWriter;
    import org.apache.sling.commons.json.JSONException;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import javax.jcr.Node;
    import javax.jcr.RepositoryException;
    import javax.jcr.Session;
    
    import com.day.cq.wcm.msm.api.ActionConfig;
    import com.day.cq.wcm.msm.api.LiveAction;
    import com.day.cq.wcm.msm.api.LiveActionFactory;
    import com.day.cq.wcm.msm.api.LiveRelationship;
    import com.day.cq.wcm.api.WCMException;
    
    @Component(metatype = false)
    @Service
    public class ExampleLiveActionFactory implements LiveActionFactory<LiveAction> {
     @Property(value="exampleLiveAction")
     static final String actionname = LiveActionFactory.LIVE_ACTION_NAME;
    
     public LiveAction createAction(Resource config) {
      ValueMap configs;
      /* Adapt the config resource to a ValueMap */
            if (config == null || config.adaptTo(ValueMap.class) == null) {
                configs = new ValueMapDecorator(Collections.<String, Object>emptyMap());
            } else {
                configs = config.adaptTo(ValueMap.class);
            }
    
      return new ExampleLiveAction(actionname, configs);
     }
     public String createsAction() {
      return actionname;
     }
     /************* LiveAction ****************/
     private static class ExampleLiveAction implements LiveAction {
      private String name;
      private ValueMap configs;
      private static final Logger log = LoggerFactory.getLogger(ExampleLiveAction.class);
    
      public ExampleLiveAction(String nm, ValueMap config){
       name = nm;
       configs = config;
      }
    
      public void execute(Resource source, Resource target,
        LiveRelationship liverel, boolean autoSave, boolean isResetRollout)
          throws WCMException {
    
       String lastMod = null;
    
       log.info(" *** Executing ExampleLiveAction *** ");
    
       /* Determine if the LiveAction is configured to copy the cq:lastModifiedBy property */
       if ((Boolean) configs.get("repLastModBy")){
    
        /* get the source's cq:lastModifiedBy property */
        if (source != null && source.adaptTo(Node.class) !=  null){
         ValueMap sourcevm = source.adaptTo(ValueMap.class);
         lastMod = sourcevm.get(com.day.cq.wcm.api.NameConstants.PN_PAGE_LAST_MOD_BY, String.class);
        }
    
        /* set the target node's la-lastModifiedBy property */
        Session session = null;
        if (target != null && target.adaptTo(Node.class) !=  null){
         ResourceResolver resolver = target.getResourceResolver();
         session = resolver.adaptTo(javax.jcr.Session.class);
         Node targetNode;
         try{
          targetNode=target.adaptTo(javax.jcr.Node.class);
          targetNode.setProperty("la-lastModifiedBy", lastMod);
          log.info(" *** Target node lastModifiedBy property updated: {} ***",lastMod);
         }catch(Exception e){
          log.error(e.getMessage());
         }
        }
        if(autoSave){
         try {
          session.save();
         } catch (Exception e) {
          try {
           session.refresh(true);
          } catch (RepositoryException e1) {
           e1.printStackTrace();
          }
          e.printStackTrace();
         }
        }
       }
      }
      public String getName() {
       return name;
      }
    
      /************* Deprecated *************/
      @Deprecated
      public void execute(ResourceResolver arg0, LiveRelationship arg1,
        ActionConfig arg2, boolean arg3) throws WCMException {
      }
      @Deprecated
      public void execute(ResourceResolver arg0, LiveRelationship arg1,
        ActionConfig arg2, boolean arg3, boolean arg4)
          throws WCMException {
      }
      @Deprecated
      public String getParameterName() {
       return null;
      }
      @Deprecated
      public String[] getPropertiesNames() {
       return null;
      }
      @Deprecated
      public int getRank() {
       return 0;
      }
      @Deprecated
      public String getTitle() {
       return null;
      }
      @Deprecated
      public void write(JSONWriter arg0) throws JSONException {
      }
     }
    }
    
    
  3. A l’aide du terminal ou de la session de commande, remplacez le répertoire par le répertoire MyLiveActionFactory (répertoire du projet Maven). Ensuite, entrez la commande suivante :
    mvn -PautoInstallPackage clean install
    
    
    Le fichier AEM error.log doit indiquer que le bundle est démarré.
    13.08.2013 14:34:55.450 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle BundleEvent RESOLVED
    13.08.2013 14:34:55.451 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle BundleEvent STARTING
    13.08.2013 14:34:55.451 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle BundleEvent STARTED
    13.08.2013 14:34:55.453 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle Service [com.adobe.example.msm.ExampleLiveActionFactory,2188] ServiceEvent REGISTERED
    13.08.2013 14:34:55.454 *INFO* [OsgiInstallerImpl] org.apache.sling.audit.osgi.installer Started bundle com.adobe.example.msm.MyLiveActionFactory-bundle [316]
    
    

Créer la configuration du déploiement exemple

Créez la configuration de déploiement MSM qui utilise la LiveActionFactory que vous avez créée :
  1. Créez une configuration de déploiement selon la procédure standard et à l’aide des propriétés :
    1. Créer :
      1. Titre  : Exemple de configuration de déploiement
      2. Nom  : examplerolloutconfig
      3. Utilisation du modèle RolloutConfig .
    2. Modifier :
      1. **Déclencheur de synchronisation **: activé

Ajouter la LiveAction à l’exemple de configuration de déploiement

Configure the rollout configuration that you created in the previous procedure so that it uses the ExampleLiveActionFactory class.
  1. Open CRXDE Lite; for example, https://localhost:4502/crx/de .
  2. Créez le noeud suivant sous /etc/msm/rolloutconfigs/examplerolloutconfig/jcr:content :
    • Nom : exampleLiveAction
    • Type : cq:LiveSyncAction
  3. Cliquez sur Enregistrer tout .
  4. Sélectionnez le nœud exampleLiveAction et ajoutez la propriété suivante :
    • Nom : repLastModBy
    • Type : Boolean
    • Valeur : true Cette propriété indique à la classe ExampleLiveAction que la propriété cq:LastModifiedBy doit être répliquée de la source vers le nœud cible.
  5. Cliquez sur Enregistrer tout .

Créer la Live Copy

Créez une Live Copy de la branche English/Products du site de référence We.Retail en utilisant votre configuration de déploiement :
  • Source : /content/we-retail/language-masters/en/products
  • Configuration du déploiement  : Exemple de configuration de déploiement
Activez la page Products (anglais) de la branche source et observez les messages de journalisation générés par la classe LiveAction  :
16.08.2013 10:53:33.055 *INFO* [Thread-444535] com.adobe.example.msm.ExampleLiveActionFactory$ExampleLiveAction  ***ExampleLiveAction has been executed.***
16.08.2013 10:53:33.055 *INFO* [Thread-444535] com.adobe.example.msm.ExampleLiveActionFactory$ExampleLiveAction  ***Target node lastModifiedBy property updated: admin ***

Suppression de l’étape Chapitres dans l’Assistant Créer un site

Dans certains cas, la sélection Chapitres n’est pas requise dans l’assistant de création de site (seule la sélection Langues​​ l’est). Pour supprimer cette étape dans le plan directeur We.Retail English par défaut :
  1. Dans CRX Explorer, supprimez le noeud : /etc/blueprints/weretail-english/jcr:content/dialog/items/tabs/items/tab_chap .
  2. Accédez à /libs/wcm/msm/templates/blueprint/defaults/livecopy_tab/items et créez un noeud :
    1. Nom = chapters ; Type = cq:Widget .
  3. Ajoutez les propriétés suivantes au nouveau nœud :
    1. Nom = name ; Type = String ; Value = msm:chapterPages
    2. Nom = value ; Type = String ; Value = all
    3. Nom = xtype ; Type = String ; Value = hidden

Modification des noms de langue et des pays par défaut

AEM utilise un ensemble de codes de langue et de pays par défaut.
  • Le code de langue par défaut est le code à deux lettres en minuscules tel que défini par ISO-639-1.
  • Le code de pays par défaut est le code à deux lettres, en minuscules ou en majuscules, tel que défini par ISO 3166.
MSM utilise une liste stockée de codes de langue et de pays pour déterminer le nom du pays associé au nom de la version linguistique de votre page. Vous pouvez modifier les aspects suivants de la liste si nécessaire :
  • Titres des langues
  • Noms des pays
  • Default countries for languges (for codes such as en , de , amongst others)
The language list is stored below the /libs/wcm/core/resources/languages node. Chaque nœud enfant représente une langue ou un code langue-pays :
  • The name of the node is the languge code (such as en or de ), or the language_country code (such as en_us or de_ch ).
  • La propriété language du nœud stocke le nom complet de la langue pour le code.
  • La propriété country du nœud stocke le nom complet du pays pour le code.
  • When the node name consists only of a language code (such as en ), the country property is * , and an additional defaultCountry property stores the code of the language-country to indicate the country to use.
Pour modifier les langues :
  1. Open CRXDE Lite in your web browser; for example, https://localhost:4502/crx/de
  2. Select the /apps folder and click Create , then Create Folder.
    Name the new folder wcm .
  3. Repeat the previous step to create the /apps/wcm/core folder tree. Create a node of type sling:Folder in core called resources .
  4. Right-click the /libs/wcm/core/resources/languages node and click Copy .
  5. Right-click the /apps/wcm/core/resources folder and click Paste . Modifiez les nœuds enfants selon les besoins.
  6. Cliquez sur Enregistrer tout .
  7. Cliquez sur Outils , Opérations puis Console Web . Depuis cette console, cliquez sur OSGi , puis sur Configuration .
  8. Locate and click Day CQ WCM Language Manager , and change the value of Language List to /apps/wcm/core/resources/languages , then click Save .

Configuration des verrous MSM sur les propriétés de la page (IU tactile)

Lors de la création d’une propriété de page personnalisée, il faut parfois déterminer si la nouvelle propriété doit pouvoir être déployée sur des Live Copy.
Par exemple, si deux nouvelles propriétés de page sont ajoutées :
  • Contact Email :
    • Cette propriété n’a pas besoin d’être déployée, car elle sera différente dans chaque pays (ou marque, etc.).
  • Key Visual Style :
    • Le projet exige que cette propriété soit déployée car elle est (généralement) commune à tous les pays (ou marques, etc.).
Ensuite, vous devez vous assurer que :
  • Contact Email :
  • Key Visual Style :
    • Assurez-vous que vous n’êtes pas autorisé à modifier cette propriété dans l’IU tactile sauf si l’héritage est annulé et que vous pouvez rétablir l’héritage ; ceci est contrôlé en cliquant sur les liens chain/broken-chain qui s’activent/se désactivent pour indiquer l’état de la connexion.
Le fait qu’une propriété de page puisse être déployée et, par conséquent, soumise à l’annulation/au rétablissement de l’héritage lors de sa modification, est contrôlé par la propriété de la boîte de dialogue :
  • cq-msm-lockable
    • s’applique aux éléments d’une boîte de dialogue de l’IU tactile
    • crée le symbole de chaînage dans la boîte de dialogue
    • n’autorise la modification que si l’héritage est annulé (le chaînage est rompu)
    • s’applique uniquement au premier niveau enfant de la ressource
    • Type : String
    • Valeur : détient le nom du bien considéré (et est comparable à la valeur du bien name ; par exemple, voir /libs/foundation/components/page/cq:dialog/content/items/tabs/items/basic/items/column/items/title/items/title
Lorsque cq-msm-lockable a été défini, la rupture/le verrouillage de la chaîne interagit avec MSM de la façon suivante :
  • if the value of cq-msm-lockable is:
    • Relative (par ex. myProperty ou ./myProperty )
      • it will add and remove the property from cq:propertyInheritanceCancelled .
    • Absolu (p. ex. /image )
      • breaking the chain will cancel inheritance by adding the cq:LiveSyncCancelled mixin to ./image and setting cq:isCancelledForChildren to true .
      • la fermeture de la chaîne rétablit l’héritage.
cq-msm-lockable s’applique au premier niveau enfant de la ressource à modifier et ne fonctionne sur aucun ancêtre plus profond, que la valeur soit définie comme absolue ou relative.
Lorsque vous réactivez l’héritage, la propriété de page de la Live Copy n’est pas automatiquement synchronisée avec la propriété source. Vous pouvez demander manuellement une synchronisation si cela est nécessaire.