Estensione di Multi Site Manager extending-the-multi-site-manager
Questo documento spiega come estendere le funzionalità di Multi Site Manager e tratta i seguenti argomenti.
- Scopri i membri principali dell’API Java MSM
- Crea una nuova azione di sincronizzazione che può essere utilizzata in una configurazione di rollout
- Modificare la lingua e i codici paese predefiniti
Panoramica dell’API Java overview-of-the-java-api
La gestione multisito è costituita dai seguenti pacchetti:
I principali oggetti API MSM interagiscono come segue (vedi anche la sezione Termini utilizzati):
-
Blueprint
- UnBlueprint
(come nella configurazione blueprint) specifica le pagine da cui una Live Copy può ereditare il contenuto.-
L'utilizzo di una configurazione blueprint (
Blueprint
) è facoltativo, ma:- Consente all'autore di utilizzare l'opzione Rollout nell'origine per inviare in modo esplicito le modifiche alle Live Copy che ereditano da questa origine.
- Consente all'autore di utilizzare Crea sito, che consente all'utente di selezionare facilmente le lingue e configurare la struttura della Live Copy.
- Definisce la configurazione di rollout predefinita per tutte le Live Copy risultanti.
-
-
LiveRelationship
-LiveRelationship
specifica la connessione (relazione) tra una risorsa nel ramo Live Copy e la relativa risorsa di origine/blueprint equivalente.-
Le relazioni vengono utilizzate per la realizzazione dell’ereditarietà e del rollout.
-
LiveRelationship
oggetti forniscono accesso (riferimenti) alle configurazioni di rollout (RolloutConfig
),LiveCopy
eLiveStatus
oggetti correlati alla relazione. -
Ad esempio, in
/content/copy/us
viene creata una Live Copy dall'origine/blueprint in/content/wknd/language-masters
. Le risorse/content/wknd/language-masters/en/jcr:content
e/content/copy/us/en/jcr:content
formano una relazione.
-
-
LiveCopy
- UnLiveCopy
contiene i dettagli di configurazione per le relazioni (LiveRelationship
) tra le risorse Live Copy e le relative risorse di origine/blueprint.-
Utilizza la classe
LiveCopy
per accedere al percorso della pagina, al percorso della pagina sorgente/blueprint, alle configurazioni di rollout e per sapere se le pagine figlie sono incluse anche inLiveCopy
. -
Viene creato un nodo
LiveCopy
ogni volta che si utilizza Crea sito o Crea Live Copy.
-
-
LiveStatus
-LiveStatus
oggetti forniscono accesso allo stato di runtime di unLiveRelationship
. Utilizza per eseguire una query sullo stato di sincronizzazione di una Live Copy. -
LiveAction
- UnLiveAction
è un'azione eseguita su ogni risorsa coinvolta nel rollout.LiveAction
vengono generati solo daRolloutConfig
.
-
LiveActionFactory
- UnLiveActionFactory
creaLiveAction
oggetti con una configurazioneLiveAction
. Le configurazioni vengono memorizzate come risorse nell’archivio. -
RolloutConfig
-RolloutConfig
contiene un elenco diLiveActions
, da utilizzare quando attivato.LiveCopy
ereditaRolloutConfig
e il risultato è presente inLiveRelationship
.- Per impostare una Live Copy per la prima volta viene utilizzato anche un
RolloutConfig
(che attivaLiveAction
).
- Per impostare una Live Copy per la prima volta viene utilizzato anche un
Creazione di una nuova azione di sincronizzazione creating-a-new-synchronization-action
Puoi creare azioni di sincronizzazione personalizzate da utilizzare con le configurazioni di rollout. Questo può essere utile quando le azioni installate non soddisfano i requisiti specifici dell'applicazione.
A tale scopo, crea due classi:
- Implementazione dell'interfaccia
com.day.cq.wcm.msm.api.LiveAction
che esegue l'azione. - Componente OSGi che implementa l'interfaccia
com.day.cq.wcm.msm.api.LiveActionFactory
e crea istanze della classeLiveAction
LiveActionFactory
crea istanze della classe LiveAction
per una determinata configurazione:
-
LiveAction
classi includono i seguenti metodi:-
getName
- Restituisce il nome dell'azione- Il nome viene utilizzato per fare riferimento all'azione, ad esempio, nelle configurazioni di rollout.
-
execute
- Esegue le attività dell'azione
-
-
LiveActionFactory
classi includono i seguenti membri:-
LIVE_ACTION_NAME
- Campo contenente il nome dell'elementoLiveAction
associato- Questo nome deve coincidere con il valore restituito dal metodo
getName
della classeLiveAction
.
- Questo nome deve coincidere con il valore restituito dal metodo
-
createAction
- Crea un'istanza diLiveAction
- Il parametro facoltativo
Resource
può essere utilizzato per fornire informazioni di configurazione.
- Il parametro facoltativo
-
createsAction
- Restituisce il nome delLiveAction
associato
-
Accesso al nodo di configurazione LiveAction accessing-the-liveaction-configuration-node
Utilizzare il nodo di configurazione LiveAction
nell'archivio per memorizzare informazioni che influiscono sul comportamento in fase di esecuzione dell'istanza LiveAction
. Il nodo nell'archivio che memorizza la configurazione LiveAction
è disponibile per l'oggetto LiveActionFactory
in fase di esecuzione. È quindi possibile aggiungere proprietà al nodo di configurazione a e utilizzarle nell'implementazione LiveActionFactory
in base alle esigenze.
Ad esempio, un LiveAction
deve memorizzare il nome dell'autore blueprint. Una proprietà del nodo di configurazione include il nome della proprietà della pagina blueprint in cui sono memorizzate le informazioni. In fase di esecuzione, LiveAction
recupera il nome della proprietà dalla configurazione, quindi ottiene il valore della proprietà.
Il parametro del metodo LiveActionFactory.createAction
è un oggetto Resource
. Questo oggetto Resource
rappresenta il nodo cq:LiveSyncAction
per questa azione live nella configurazione di rollout.
Per ulteriori informazioni, vedere Creazione di una configurazione di rollout.
Come di consueto quando si utilizza un nodo di configurazione, è necessario adattarlo a un oggetto 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);
}
Accesso ai nodi di Target, ai nodi Source e alla LiveRelationship accessing-target-nodes-source-nodes-and-the-liverelationship
I seguenti oggetti vengono forniti come parametri del metodo execute
dell'oggetto LiveAction
:
-
Oggetto
Resource
che rappresenta l'origine della Live Copy -
Oggetto
Resource
che rappresenta la destinazione della Live Copy. -
L'oggetto
LiveRelationship
per la Live Copy- Il valore
autoSave
indica seLiveAction
deve salvare le modifiche apportate all'archivio - Il valore
reset
indica la modalità di ripristino del rollout.
- Il valore
Da questi oggetti è possibile ottenere informazioni su LiveCopy
. È inoltre possibile utilizzare gli oggetti Resource
per ottenere ResourceResolver
, Session
e Node
oggetti. Questi oggetti sono utili per la manipolazione del contenuto del repository:
Nella prima riga del codice seguente, l'origine è l'oggetto Resource
della pagina di origine:
ResourceResolver resolver = source.getResourceResolver();
Session session = resolver.adaptTo(javax.jcr.Session.class);
Node sourcenode = source.adaptTo(javax.jcr.Node.class);
Resource
possono essere null
o Resources
oggetti che non si adattano a Node
oggetti, ad esempio NonExistingResource
oggetti.Creazione di una nuova configurazione di rollout creating-a-new-rollout-configuration
Puoi creare una configurazione di rollout quando le configurazioni di rollout installate non soddisfano i requisiti dell’applicazione, segui questi due passaggi:
La nuova configurazione di rollout è quindi disponibile quando imposti le configurazioni di rollout su una pagina blueprint o Live Copy.
Creare la configurazione di rollout create-the-rollout-configuration
Per creare una configurazione di rollout:
-
Apri CRXDE Lite in
https://<host>:<port>/crx/de
. -
Passa a
/apps/msm/<your-project>/rolloutconfigs
, la versione personalizzata di/libs/msm/wcm/rolloutconfigs
del progetto.- Se si tratta della prima configurazione, questo ramo
/libs
deve essere utilizzato come modello per creare il nuovo ramo in/apps
.
- Se si tratta della prima configurazione, questo ramo
-
In questa posizione, crea un nodo con le seguenti proprietà:
- Nome: nome del nodo della configurazione di rollout, ad esempio
contentCopy
oworkflow
- Tipo:
cq:RolloutConfig
- Nome: nome del nodo della configurazione di rollout, ad esempio
-
Aggiungi le seguenti proprietà a questo nodo:
-
Nome:
jcr:title
Tipo:
String
Valore: titolo di identificazione che verrà visualizzato nell'interfaccia utente -
Nome:
jcr:description
Tipo:
String
Valore: descrizione facoltativa. -
Nome:
cq:trigger
Tipo:
String
Valore: Attivatore rollout da utilizzarerollout
modification
publish
deactivate
-
-
Fare clic su Salva tutto.
Aggiungere azioni di sincronizzazione alla configurazione di rollout add-synchronization-actions-to-the-rollout-configuration
Le configurazioni di rollout sono archiviate sotto il nodo di configurazione rollout creato sotto il nodo /apps/msm/<your-project>/rolloutconfigs
.
Aggiungi nodi secondari di tipo cq:LiveSyncAction
per aggiungere azioni di sincronizzazione alla configurazione di rollout. L'ordine dei nodi delle azioni di sincronizzazione determina l'ordine in cui si verificano le azioni.
-
In CRXDE Lite, seleziona il nodo Configurazione rollout, ad esempio
/apps/msm/myproject/rolloutconfigs/myrolloutconfig
. -
Crea un nodo con le seguenti proprietà:
- Nome: nome del nodo dell'azione di sincronizzazione
- Il nome deve essere uguale a Nome azione nella tabella in Azioni di sincronizzazione, ad esempio
contentCopy
oworkflow
.
- Il nome deve essere uguale a Nome azione nella tabella in Azioni di sincronizzazione, ad esempio
- Tipo:
cq:LiveSyncAction
- Nome: nome del nodo dell'azione di sincronizzazione
-
Aggiungere e configurare tutti i nodi delle azioni di sincronizzazione necessari.
-
Ridisponi i nodi delle azioni in modo che il loro ordine corrisponda all’ordine in cui desideri che si verifichino.
- Il nodo di azione più in alto si verifica per primo.
Creazione e utilizzo di una classe LiveActionFactory semplice creating-and-using-a-simple-liveactionfactory-class
Segui le procedure descritte in questa sezione per sviluppare un LiveActionFactory
e utilizzarlo in una configurazione di rollout. Le procedure utilizzano Maven ed Eclipse per sviluppare e distribuire LiveActionFactory
:
- Crea il progetto Maven e importalo in Eclipse.
- Aggiungi dipendenze al file POM.
- Implementa l'interfaccia
LiveActionFactory
e distribuisci il bundle OSGi. - Crea la configurazione rollout.
- Crea la Live Copy.
Il progetto Maven e il codice sorgente della classe Java sono disponibili nell'archivio Git pubblico.
Creare il progetto Maven create-the-maven-project
La procedura seguente richiede l'aggiunta del profilo adobe-public
al file delle impostazioni Maven.
- Per informazioni sul profilo pubblico di adobe, consulta Ottenere il plug-in Maven del pacchetto di contenuti
- Per informazioni sul file delle impostazioni Maven, consulta la Guida di riferimento delle impostazioni di Maven.
-
Apri un terminale o una sessione della riga di comando e cambia la directory in modo che punti alla posizione in cui creare il progetto.
-
Immetti il comando seguente:
code language-text mvn archetype:generate -DarchetypeGroupId=com.day.jcr.vault -DarchetypeArtifactId=multimodule-content-package-archetype -DarchetypeVersion=1.0.0 -DarchetypeRepository=adobe-public-releases
-
Specifica i seguenti valori al prompt interattivo:
groupId
:com.adobe.example.msm
artifactId
:MyLiveActionFactory
version
:1.0-SNAPSHOT
package
:MyPackage
appsFolderName
:myapp
artifactName
:MyLiveActionFactory package
packageGroup
:myPackages
-
Avvia Eclipse e importa il progetto Maven.
Aggiungi dipendenze al file POM add-dependencies-to-the-pom-file
Aggiungere le dipendenze in modo che il compilatore Eclipse possa fare riferimento alle classi utilizzate nel codice LiveActionFactory
.
-
Da Esplora progetti Eclipse aprire il file
MyLiveActionFactory/pom.xml
. -
Nell'editor, fare clic sulla scheda
pom.xml
e individuare la sezioneproject/dependencyManagement/dependencies
. -
Aggiungere il codice XML seguente nell'elemento
dependencyManagement
, quindi salvare il file.code language-xml <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>
-
Apri il file POM per il bundle da Project Explorer in
MyLiveActionFactory-bundle/pom.xml
. -
Nell'editor, fare clic sulla scheda
pom.xml
e individuare la sezione progetto/dipendenze. Aggiungi il seguente XML all’interno dell’elemento dependencies, quindi salva il file:code language-xml <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>
Implementare LiveActionFactory implement-liveactionfactory
La classe LiveActionFactory
seguente implementa una classe LiveAction
che registra i messaggi relativi alle pagine di origine e di destinazione e copia la proprietà cq:lastModifiedBy
dal nodo di origine al nodo di destinazione. Il nome dell'azione live è exampleLiveAction
.
-
In Esplora progetti Eclipse fare clic con il pulsante destro del mouse sul pacchetto
MyLiveActionFactory-bundle/src/main/java/com.adobe.example.msm
e scegliere Nuovo > Classe. -
Per il Nome, immettere
ExampleLiveActionFactory
e quindi fare clic su Fine. -
Aprire il file
ExampleLiveActionFactory.java
, sostituire il contenuto con il codice seguente e salvare il file.code language-java 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.msm.api.MSMNameConstants.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 { } } }
-
Utilizzando il terminale o la sessione di comando, modificare la directory nella directory
MyLiveActionFactory
(la directory di progetto Maven). Quindi, immetti il seguente comando:code language-shell mvn -PautoInstallPackage clean install
-
Il file AEM
error.log
deve indicare che il bundle è avviato, visibile nei registri inhttps://<host>:<port>/system/console/status-slinglogs
.code language-text 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]
Creare la configurazione di rollout di esempio create-the-example-rollout-configuration
Crea la configurazione di rollout MSM che utilizza LiveActionFactory
creata:
-
Crea e configura una configurazione di rollout con la procedura standard utilizzando le proprietà:
- Titolo: Esempio Di Configurazione Di Rollout
- Nome: examplerolloutconfig
- cq:trigger:
publish
Aggiungi l’azione live alla configurazione di rollout di esempio add-the-live-action-to-the-example-rollout-configuration
Configurare la configurazione di rollout creata nella procedura precedente in modo che utilizzi la classe ExampleLiveActionFactory
.
-
Apri CRXDE Lite.
-
Crea il seguente nodo in
/apps/msm/rolloutconfigs/examplerolloutconfig/jcr:content
:- Nome:
exampleLiveAction
- Tipo:
cq:LiveSyncAction
- Nome:
-
Fare clic su Salva tutto.
-
Selezionare il nodo
exampleLiveAction
e aggiungere una proprietà per indicare alla classeExampleLiveAction
che la proprietàcq:LastModifiedBy
deve essere replicata dal nodo di origine a quello di destinazione.- Nome:
repLastModBy
- Tipo:
Boolean
- Valore:
true
- Nome:
-
Fare clic su Salva tutto.
Creare la Live Copy create-the-live-copy
Crea una Live Copy del ramo Inglese/Prodotti del sito di riferimento WKND utilizzando la configurazione di rollout:
-
Source:
/content/wknd/language-masters/en/products
-
Configurazione rollout: Esempio Di Configurazione Rollout
Attiva la pagina Prodotti (inglese) del ramo di origine e osserva i messaggi di registro generati dalla 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 ***
Modifica dei nomi delle lingue e dei paesi predefiniti changing-language-names-and-default-countries
L’AEM utilizza un set predefinito di codici per lingua e paese.
- Il codice lingua predefinito è il codice a due lettere minuscole, come definito dallo standard ISO-639-1.
- Il codice predefinito del paese è il codice a due lettere minuscole o maiuscole, come definito dallo standard ISO 3166.
MSM utilizza un elenco memorizzato di codici di lingua e paese per determinare il nome del paese associato al nome della versione della lingua della pagina. Se necessario, puoi modificare i seguenti aspetti dell’elenco:
- Titoli delle lingue
- Nomi paesi
- Paesi predefiniti per le lingue (tra cui
en
,de
)
L'elenco delle lingue è archiviato sotto il nodo /libs/wcm/core/resources/languages
. Ogni nodo figlio rappresenta una lingua o un paese della lingua:
-
Il nome del nodo è il codice della lingua (ad esempio
en
ode
) o il codice del paese_lingua (ad esempioen_us
ode_ch
). -
La proprietà
language
del nodo memorizza il nome completo della lingua per il codice. -
La proprietà
country
del nodo memorizza il nome completo del paese per il codice. -
Quando il nome del nodo è costituito solo da un codice della lingua (ad esempio
en
), la proprietà del paese è*
e un'ulteriore proprietàdefaultCountry
memorizza il codice del paese-lingua per indicare il paese da utilizzare.
Per modificare le lingue:
-
Apri CRXDE Lite.
-
Seleziona la cartella
/apps
e fai clic su Crea, quindi su Crea cartella. -
Denomina la nuova cartella
wcm
. -
Ripetere il passaggio precedente per creare la struttura di cartelle
/apps/wcm/core
. Creare un nodo di tiposling:Folder
incore
denominatoresources
. -
Fare clic con il pulsante destro del mouse sul nodo
/libs/wcm/core/resources/languages
e scegliere Copia. -
Fare clic con il pulsante destro del mouse sulla cartella
/apps/wcm/core/resources
e scegliere Incolla. Modificare i nodi figlio come richiesto. -
Fare clic su Salva tutto.
-
Fare clic su Strumenti, Operazioni e quindi su Console Web. Da questa console fare clic su OSGi, quindi su Configurazione.
-
Individua e fai clic su Day CQ WCM Language Manager e modifica il valore di Language List in
/apps/wcm/core/resources/languages
, quindi fai clic su Save.
Configurazione dei blocchi MSM nelle proprietà della pagina configuring-msm-locks-on-page-properties
Quando crei una proprietà di pagina personalizzata, potrebbe essere necessario considerare se la nuova proprietà può essere idonea per il rollout in qualsiasi Live Copy.
Ad esempio, se vengono aggiunte due nuove proprietà di pagina:
-
E-mail di contatto:
- Non è necessario implementare questa proprietà, in quanto sarà diversa in ciascun paese (o marchio, ecc.).
-
Stile visivo chiave:
- Il requisito del progetto è che questa proprietà venga implementata in quanto è (di solito) comune a tutti i paesi (o marchi, e così via).
Quindi è necessario assicurarsi che:
-
E-mail di contatto:
- È escluso dalle proprietà di rollout.
- Per ulteriori informazioni, vedere Configurazione della sincronizzazione Live Copy.
-
Stile visivo chiave:
- Assicurati di non poter modificare questa proprietà a meno che l’ereditarietà non venga annullata.
- Assicurati inoltre di poter ripristinare l’ereditarietà. Questa operazione viene controllata facendo clic sui collegamenti a catena o a catena interrotta che vengono attivati per indicare lo stato della connessione.
Se una proprietà di pagina è soggetta a rollout e quindi, in caso di annullamento/ripristino dell’ereditarietà durante la modifica, è controllata dalla proprietà della finestra di dialogo:
-
cq-msm-lockable
-
Questo creerà il simbolo del collegamento a catena nella finestra di dialogo.
-
Questo consente la modifica solo se l’ereditarietà viene annullata (il collegamento a catena è interrotto).
-
Questo si applica solo al primo livello figlio della risorsa
-
Tipo:
String
-
Valore: contiene il nome della proprietà in esame ed è paragonabile al valore della proprietà
name
-
Ad esempio, consulta
/libs/foundation/components/page/cq:dialog/content/items/tabs/items/basic/items/column/items/title/items/title
-
-
-
Una volta definito cq-msm-lockable
, l'interruzione/chiusura della catena interagirà con MSM nel modo seguente:
-
Se il valore di
cq-msm-lockable
è:-
Relativo (ad esempio,
myProperty
o./myProperty
)- Interrompendo la catena, la proprietà verrà aggiunta e rimossa da
cq:propertyInheritanceCancelled
.
- Interrompendo la catena, la proprietà verrà aggiunta e rimossa da
-
Assoluto (ad esempio,
/image
)-
Se si interrompe la catena, l'ereditarietà verrà annullata aggiungendo il mixin
cq:LiveSyncCancelled
a./image
e impostandocq:isCancelledForChildren
atrue
. -
La chiusura della catena ripristina l’ereditarietà.
-
-
cq-msm-lockable
si applica al primo livello figlio della risorsa da modificare e non funziona su nessun livello precedente più profondo, a prescindere dal fatto che il valore sia definito come assoluto o relativo.