Einbinden von Tagging in eine AEM-Anwendung

Zum Zwecke von programmatischem Arbeiten mit Tags oder zum Erweitern von Tags in einer benutzerdefinierten AEM-Anwendung wird auf dieser Seite die Verwendung der

die mit der

Weitere Informationen zum Tagging finden Sie unter:

  • Verwalten von Tags, um Informationen zum Erstellen und Verwalten von Tags sowie zu den angewendeten Inhalts-Tags zu erhalten.
  • Verwendung von Tags für Informationen zum Markieren von Inhalt.

Übersicht über die Tagging-API

Die Implementierung des Tagging-Frameworks in AEM ermöglicht die Verwaltung von Tags und Tag-Inhalten mithilfe der JCR-API. Der TagManager stellt sicher, dass Tags, die als Werte in der String-Array-Eigenschaft eingegeben wurden, nicht dupliziert werden. Er entfernt TagIDs, die auf nicht vorhandene Tags verweisen, und aktualisiert TagIDs für verschobene oder zusammengeführte Tags. cq:tags TagManager verwendet einen JCR Observation Listener, der alle falschen Änderungen zurückgesetzt. Die wichtigsten Klassen befinden sich im Paket com.day.cq.tagging:

  • JcrTagManagerFactory - gibt eine JCR-basierte Implementierung eines TagManager zurück. Es ist die Referenzimplementierung der Tagging-API.
  • TagManager - ermöglicht das Auflösen und Erstellen von Tags anhand von Pfaden und Namen.
  • Tag - definiert das Tag-Objekt.

Abrufen eines JCR-basierten TagManagers

Um eine TagManager-Instanz abzurufen, müssen Sie über eine JCR Session verfügen und getTagManager(Session) aufrufen:

@Reference
JcrTagManagerFactory jcrTagManagerFactory;

TagManager tagManager = jcrTagManagerFactory.getTagManager(session);

Im typischen Sling-Kontext können Sie sich auch mit dem TagManager an einen ResourceResolver anpassen:

TagManager tagManager = resourceResolver.adaptTo(TagManager.class);

Abrufen eines Tag-Objekts

Ein Tag kann über den TagManager abgerufen werden, indem entweder ein vorhandenes Tag aufgelöst oder ein neues erstellt wird:

Tag tag = tagManager.resolve("my/tag"); // for existing tags

Tag tag = tagManager.createTag("my/tag"); // for new tags

Für die JCR-basierte Implementierung, die Tags JCR Nodes zuordnet, können Sie den adaptTo-Mechanismus von Sling direkt verwenden, wenn Sie über die Ressource verfügen (z. B. /content/cq:tags/default/my/tag):

Tag tag = resource.adaptTo(Tag.class);

Obwohl ein Tag nur aus *einer Ressource (kein Knoten) konvertiert werden kann, kann ein Tag *in *sowohl eine Node als auch eine Ressource konvertiert werden:

Node node = tag.adaptTo(Node.class);
Resource node = tag.adaptTo(Resource.class);
HINWEIS

Die direkte Anpassung von Node an Tag ist nicht möglich, da Node die Sling Adaptable.adaptTo(Class)-Methode nicht implementiert.

Abrufen und Festlegen von Tags

// Getting the tags of a Resource:
Tag[] tags = tagManager.getTags(resource);

// Setting tags to a Resource:
tagManager.setTags(resource, tags);

Suchen nach 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);
HINWEIS

Der gültige zu verwendete RangeIterator ist:

com.day.cq.commons.RangeIterator

Löschen von Tags

tagManager.deleteTag(tag);

Replizieren von Tags

Es ist möglich, den Replizierungsdienst ( Replicator) mit Tags zu verwenden, da Tags vom Typ nt:hierarchyNode sind:

replicator.replicate(session, replicationActionType, tagPath);

Tagging auf der Clientseite

CQ.tagging.TagInputField ist ein Formular-Widget zum Eingeben von Tags. Es beinhaltet ein Popup-Menü für die Auswahl vorhandener Tags, einschließlich Autovervollständigen und vieler anderer Funktionen. Der xtype ist tags.

Der Tag Garbage Collector

Der Tag-Müll-Collector ist ein Hintergrunddienst, der die Tags bereinigt, die ausgeblendet und nicht verwendet werden. Ausgeblendete und nicht verwendete Tags sind Tags unterhalb von /content/cq:tags, die eine cq:movedTo-Eigenschaft haben und nicht auf einem Inhaltsknoten verwendet werden - sie haben eine Zählung von Null. Durch Verwenden dieses Lazy-Deletion-Prozesses muss der Inhaltsknoten (d. h. die Eigenschaft cq:tags) nicht als Teil der Verschiebung oder dem Zusammenführungsvorgang aktualisiert werden. Die Verweise in der Eigenschaft cq:tags werden automatisch aktualisiert, wenn die Eigenschaft cq:tags aktualisiert wird, z. B. durch das Seiteneigenschaften-Dialogfeld.

Das Garbage Collector Tag wird standardmäßig einmal am Tag ausgeführt. Dies kann konfiguriert werden unter:

http://localhost:4502/system/console/configMgr/com.day.cq.tagging.impl.TagGarbageCollector

Tag-Suche und Tag-Auflistung

Die Tag-Suche und die Tag-Auflistung funktionieren folgendermaßen:

  • Die Suche nach TagID sucht nach den Tags, für die die Eigenschaft cq:movedTo auf TagID eingestellt ist, und folgt den TagIDs von cq:movedTo.

  • Bei der Suche nach Tag-Titel werden nur die Tags durchsucht, die keine cq:movedTo-Eigenschaft haben.

Tags in verschiedenen Sprachen

Wie in der Dokumentation zur Verwaltung von Tags beschrieben, kann im Abschnitt Verwalten von Tags in verschiedenen Sprachen ein Tag titlein verschiedenen Sprachen definiert werden. Eine sprachempfindliche Eigenschaft wird dann dem Tag-Knoten hinzugefügt. Diese Eigenschaft hat das Format jcr:title.<locale>, z.B. jcr:title.fr für die französische Übersetzung. <locale> muss eine ISO-Gebietsschema-Zeichenfolge in Kleinbuchstaben sein und "_"anstelle von "-"verwenden. Beispiel: de_ch.

Wenn das Tag Tiere der Seite Produkte hinzugefügt wird, wird der Wert stockphotography:animals der Eigenschaft cq:tags des Knotens /content/geometrixx/de/products/jcr:content hinzugefügt. Die Übersetzung wird vom Tag-Knoten referenziert.

Die serverseitige API hat lokalisierte title-bezogene Methoden:

  • 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 kann die Sprache entweder aus der Seitensprache oder aus der Benutzersprache abgerufen werden:

  • So rufen Sie die Seitensprache in einer JSP ab:

    • currentPage.getLanguage(false)
  • So rufen Sie die Benutzersprache in einer JSP ab:

    • slingRequest.getLocale()

currentPage und slingRequest sind in einer JSP über das Tag <cq:definedObjects> verfügbar.

Beim Tagging hängt die lokale Anpassung vom Kontext ab, da Tag titlesin der Seitensprache, in der Benutzersprache oder in jeder anderen Sprache angezeigt werden kann.

Hinzufügen einer neuen Sprache zum Dialogfeld „Tag bearbeiten“

Im folgenden Verfahren wird beschrieben, wie Sie eine neue Sprache (Finnisch) im Dialogfeld Tag bearbeiten hinzufügen:

  1. Bearbeiten Sie in CRXDE die Eigenschaft mit mehreren Werten languages des Knotens /content/cq:tags.

  2. Fügen Sie fi_fi hinzu, das das finnische Gebietsschema darstellt, und speichern Sie die Änderungen.

Die neue Sprache (Finnisch) ist jetzt im Tag-Dialogfeld der Seiteneigenschaften und im Dialogfeld Tag bearbeiten verfügbar, wenn Sie ein Tag in der Tagging-Konsole bearbeiten.

HINWEIS

Die neue Sprache muss eine der AEM erkannten Sprachen sein, d.h. sie muss als Knoten unterhalb von /libs/wcm/core/resources/languages verfügbar sein.

Auf dieser Seite