Per utilizzare i tag a livello di programmazione o per estendere i tag all'interno di un'applicazione AEM personalizzata, in questo documento viene descritto l'utilizzo di
che interagisce con
Per informazioni correlate sull’assegnazione tag:
L'attuazione del framework di assegnazione tag in AEM consente la gestione di tag e contenuti tag utilizzando l’API JCR. TagManager
garantisce che i tag immessi come valori sul cq:tags
la proprietà di array di stringhe non è duplicata, rimuove TagID
s che rimanda a tag e aggiornamenti non esistenti TagID
s per i tag spostati o uniti. TagManager
utilizza un listener di osservazione JCR che ripristina eventuali modifiche non corrette. Le classi principali sono com.day.cq.tagging pacchetto:
JcrTagManagerFactory
- restituisce un’implementazione basata su JCR di un TagManager
. È l’implementazione di riferimento dell’API di assegnazione tag.TagManager
: consente di risolvere e creare tag in base a percorsi e nomi.Tag
: definisce l’oggetto tag.Per recuperare un TagManager
istanza, è necessario disporre di un JCR Session
e chiamare getTagManager(Session)
:
@Reference
JcrTagManagerFactory jcrTagManagerFactory;
TagManager tagManager = jcrTagManagerFactory.getTagManager(session);
Nel tipico contesto Sling puoi anche adattarti a una TagManager
dal ResourceResolver
:
TagManager tagManager = resourceResolver.adaptTo(TagManager.class);
A Tag
possono essere recuperati tramite TagManager
, risolvendo un tag esistente o creandone uno nuovo:
Tag tag = tagManager.resolve("my/tag"); // for existing tags
Tag tag = tagManager.createTag("my/tag"); // for new tags
Per l’implementazione basata su JCR, che mappa Tags
su JCR Nodes
, puoi utilizzare direttamente Sling adaptTo
se si dispone della risorsa (ad esempio, /content/cq:tags/default/my/tag
):
Tag tag = resource.adaptTo(Tag.class);
Mentre un tag può essere convertito solo da una risorsa (non un nodo), un tag può essere convertito a sia un nodo che una risorsa:
Node node = tag.adaptTo(Node.class);
Resource node = tag.adaptTo(Resource.class);
Adattamento diretto da Node
a Tag
non è possibile, perché Node
non implementa Sling Adaptable.adaptTo(Class)
metodo.
// Getting the tags of a Resource:
Tag[] tags = tagManager.getTags(resource);
// Setting tags to a Resource:
tagManager.setTags(resource, tags);
// Searching for the Resource objects that are tagged with the tag object:
Iterator<Resource> it = tag.find();
// Retrieving the usage count of the tag object:
long count = tag.getCount();
// Searching for the Resource objects that are tagged with the tagID String:
RangeIterator<Resource> it = tagManager.find(tagID);
Il valore RangeIterator
da utilizzare è:
com.day.cq.commons.RangeIterator
tagManager.deleteTag(tag);
È possibile utilizzare il servizio di replica (Replicator
) con tag perché i tag sono di tipo nt:hierarchyNode
:
replicator.replicate(session, replicationActionType, tagPath);
Il garbage collector dei tag è un servizio in background che consente di pulire i tag nascosti e non utilizzati. Di seguito sono riportati i tag nascosti e non utilizzati /content/cq:tags
che hanno un cq:movedTo
e non vengono utilizzati in un nodo di contenuto. Hanno un conteggio di zero. Utilizzando questo processo di eliminazione lenta, il nodo del contenuto (ovvero cq:tags
) non deve essere aggiornata come parte dell’operazione di spostamento o unione. I riferimenti in cq:tags
vengono aggiornate automaticamente quando cq:tags
viene aggiornata, ad esempio, tramite la finestra di dialogo proprietà pagina.
Il garbage collector dei tag viene eseguito per impostazione predefinita una volta al giorno. Può essere configurato in:
http://<host>:<port>/system/console/configMgr/com.day.cq.tagging.impl.TagGarbageCollector
La ricerca dei tag e l’elenco dei tag funzionano come segue:
TagID
cerca i tag che hanno la proprietà cq:movedTo
imposta su TagID
e segue attraverso cq:movedTo
TagID
s.cq:movedTo
proprietà.Un tag title
possono essere definiti in diverse lingue. Al nodo del tag viene quindi aggiunta una proprietà sensibile alla lingua. Questa proprietà ha il formato jcr:title.<locale>
ad esempio: jcr:title.fr
per la traduzione francese. <locale>
deve essere una stringa internazionale ISO minuscola e utilizzare il carattere di sottolineatura (_
) invece del trattino (-
), ad esempio: de_ch
.
Ad esempio, quando Animali viene aggiunto al tag Prodotti pagina, il valore stockphotography:animals
viene aggiunto alla proprietà cq:tags
del nodo /content/wknd/en/products/jcr:content
. Viene fatto riferimento alla traduzione dal nodo del tag.
L’API lato server ha localizzato title
Metodi relativi a:
com.day.cq.tagging.Tag
getLocalizedTitle(Locale locale)
getLocalizedTitlePaths()
getLocalizedTitles()
getTitle(Locale locale)
getTitlePath(Locale locale)
com.day.cq.tagging.TagManager
canCreateTagByTitle(String tagTitlePath, Locale locale)
createTagByTitle(String tagTitlePath, Locale locale)
resolveByTitle(String tagTitlePath, Locale locale)
In AEM, la lingua può essere ottenuta o dalla lingua della pagina o dalla lingua dell’utente.
Per i tag, la localizzazione dipende dal contesto come tag titles
può essere visualizzata nella lingua della pagina, nella lingua dell’utente o in qualsiasi altra lingua.
Nella procedura seguente viene descritto come aggiungere una nuova lingua, ad esempio il finlandese, al Modifica tag finestra di dialogo:
languages
del nodo /content/cq:tags
.fi_fi
, che rappresenta la lingua finlandese, e salva le modifiche.Il finlandese è ora disponibile nella finestra di dialogo dei tag delle proprietà della pagina e nel Modifica tag durante la modifica di un tag in Assegnazione tag console.
La nuova lingua deve essere una delle lingue riconosciute dall'AEM, ovvero deve essere disponibile come nodo sottostante /libs/wcm/core/resources/languages
.