Per lavorare in modo programmatico con i tag o per estendere i tag all'interno di un'applicazione di AEM personalizzata, in questo documento viene descritto l'utilizzo del
che interagisce con
Per informazioni correlate sull’assegnazione tag:
L’implementazione del framework di assegnazione tag in AEM consente di gestire tag e contenuti di tag utilizzando l’API JCR. TagManager
assicura che i tag immessi come valori nella proprietà cq:tags
string array non siano duplicati, rimuove TagID
il riferimento a tag e aggiornamenti non esistenti per i tag spostati o uniti TagID
e TagManager
utilizza un listener di osservazione JCR che ripristina eventuali modifiche errate. Le classi principali sono nel pacchetto com.day.cq.tagging :
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'istanza TagManager
, è necessario disporre di un JCR Session
e chiamare getTagManager(Session)
:
@Reference
JcrTagManagerFactory jcrTagManagerFactory;
TagManager tagManager = jcrTagManagerFactory.getTagManager(session);
Nel contesto Sling tipico è anche possibile adattarsi a un TagManager
dal ResourceResolver
:
TagManager tagManager = resourceResolver.adaptTo(TagManager.class);
È possibile recuperare un tag Tag
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 il meccanismo Sling adaptTo
se disponi 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 in sia un nodo che una risorsa:
Node node = tag.adaptTo(Node.class);
Resource node = tag.adaptTo(Resource.class);
L'adattamento diretto da Node
a Tag
non è possibile, perché Node
non implementa il metodo Sling Adaptable.adaptTo(Class)
.
// 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);
La RangeIterator
valida da utilizzare è:
com.day.cq.commons.RangeIterator
tagManager.deleteTag(tag);
È possibile utilizzare il servizio di replica (Replicator
) con i tag perché i tag sono di tipo nt:hierarchyNode
:
replicator.replicate(session, replicationActionType, tagPath);
Il tag garbage Collector è un servizio di background che pulisce i tag nascosti e inutilizzati. I tag nascosti e non utilizzati sono tag sottostanti /content/cq:tags
che hanno una proprietà cq:movedTo
e non vengono utilizzati su un nodo di contenuto. Hanno un conteggio di zero. Utilizzando questo processo di eliminazione lento, il nodo del contenuto (ovvero la proprietà cq:tags
) non deve essere aggiornato come parte dell'operazione di spostamento o unione. I riferimenti nella proprietà cq:tags
vengono aggiornati automaticamente quando la proprietà cq:tags
viene aggiornata, ad esempio tramite la finestra di dialogo delle proprietà della pagina.
Il Garbage Collector dei tag viene eseguito per impostazione predefinita una volta al giorno. Puoi configurarlo in:
http://<host>:<port>/system/console/configMgr/com.day.cq.tagging.impl.TagGarbageCollector
La ricerca di tag e l’elenco dei tag funzionano come segue:
TagID
cerca i tag per i quali la proprietà cq:movedTo
è impostata su TagID
e segue i cq:movedTo
TagID
s.cq:movedTo
.Un tag title
può essere definito in lingue diverse. 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 in francese. <locale>
deve essere una stringa internazionale ISO in minuscolo e utilizzare carattere di sottolineatura (_
) invece di trattino/trattino (-
), ad esempio: de_ch
.
Ad esempio, quando il tag Animals viene aggiunto alla pagina Products , il valore stockphotography:animals
viene aggiunto alla proprietà cq:tags
del nodo /content/wknd/en/products/jcr:content
. La traduzione viene referenziata dal nodo del tag.
L'API lato server dispone di metodi localizzati relativi a title
:
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 dalla lingua della pagina o dalla lingua dell’utente.
Per l’assegnazione tag, la localizzazione dipende dal contesto in cui il tag titles
può essere visualizzato nella lingua della pagina, nella lingua dell’utente o in qualsiasi altra lingua.
La procedura seguente descrive come aggiungere una nuova lingua (ad esempio il finlandese) alla finestra di dialogo Modifica tag:
languages
del nodo /content/cq:tags
.fi_fi
, che rappresenta le impostazioni internazionali finlandesi, e salva le modifiche.Il finlandese è ora disponibile nella finestra di dialogo dei tag delle proprietà della pagina e nella finestra di dialogo Modifica tag durante la modifica di un tag nella console Assegnazione tag.
La nuova lingua deve essere una delle lingue riconosciute AEM, ovvero deve essere disponibile come nodo sotto /libs/wcm/core/resources/languages
.