Per utilizzare in modo programmatico i tag o estenderli all'interno di un'applicazione AEM personalizzata, in questa pagina viene descritto l'utilizzo del
che interagisce con il
Per ulteriori informazioni sui tag, vedere:
L'implementazione del framework di tag in AEM consente la gestione di tag e contenuti di tag mediante l'API JCR. TagManager assicura che i tag immessi come valori nella proprietà cq:tags
dell'array di stringhe non vengano duplicati, rimuove gli ID di tag che puntano a tag non esistenti e aggiorna gli ID di tag per i tag spostati o uniti. TagManager utilizza un listener di osservazione JCR che ripristina le modifiche non corrette. Le classi principali si trovano nel pacchetto com.day.cq.tagging:
TagManager
. È l’implementazione di riferimento dell’API Tagging.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
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 esegue il mapping di Tags
su JCR Nodes
, è possibile utilizzare direttamente il meccanismo di 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 *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);
CQ.tagging.TagInputField
è un widget modulo per l’immissione di tag. Dispone di un menu a comparsa per la selezione tra i tag esistenti, include il completamento automatico e molte altre funzioni. Il relativo xtype è tags
.
Il Garbage Collector tag è un servizio di sfondo che pulisce i tag nascosti e inutilizzati. I tag nascosti e inutilizzati sono tag inferiori a /content/cq:tags
che hanno una proprietà cq:movedTo
e non vengono utilizzati su un nodo di contenuto; il conteggio è pari a zero. Utilizzando questo processo di eliminazione pigra, il nodo di 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.
Per impostazione predefinita, il Garbage Collector tag viene eseguito una volta al giorno. È possibile configurare in:
http://localhost:4502/system/console/configMgr/com.day.cq.tagging.impl.TagGarbageCollector
La ricerca di tag e l’elenco dei tag funzionano come segue:
La ricerca di TagID cerca i tag la cui proprietà cq:movedTo
è impostata su TagID e segue gli cq:movedTo
TagID.
La ricerca per il titolo del tag cerca solo i tag privi di proprietà cq:movedTo
.
Come descritto nella documentazione relativa all'amministrazione dei tag, nella sezione Gestione dei tag in lingue diverse è possibile definire un tag title
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 di lingua ISO in lettere minuscole e utilizzare "_" invece di "-", ad esempio: de_ch
.
Quando il tag Animals viene aggiunto alla pagina Products, il valore stockphotography:animals
viene aggiunto alla proprietà cq:tags
del nodo /content/geometrixx/en/products/jcr:content. Il nodo del tag fa riferimento alla traduzione.
L'API lato server include metodi title
localizzati:
In AEM, la lingua può essere ottenuta dalla lingua della pagina o dalla lingua dell’utente:
per recuperare la lingua della pagina in una JSP:
currentPage.getLanguage(false)
per recuperare la lingua utente in una JSP:
slingRequest.getLocale()
currentPage
e slingRequest
sono disponibili in una JSP attraverso il <cq:definedobjects> tag .
Per i tag, la localizzazione dipende dal contesto in cui è possibile visualizzare il tag titles
nella lingua della pagina, nella lingua dell’utente o in qualsiasi altra lingua.
La procedura seguente descrive come aggiungere una nuova lingua (finlandese) alla finestra di dialogo Modifica tag:
In CRXDE, modificare la proprietà multi-valore languages
del nodo /content/cq:tags
.
Aggiungete fi_fi
, che rappresenta l'impostazione internazionale finlandese, e salvate le modifiche.
La nuova lingua (finlandese) è ora disponibile nella finestra di dialogo dei tag delle proprietà della pagina e nella finestra di dialogo Edit Tag quando si modifica un tag nella console Tagging.
La nuova lingua deve essere una delle AEM lingue riconosciute, ovvero deve essere disponibile come nodo sotto /libs/wcm/core/resources/languages
.