Criação de tags em um aplicativo AEM

Para a finalidade de trabalhar programaticamente com tags ou estender tags em um aplicativo AEM personalizado, esta página descreve o uso da variável

que interage com o

Para obter informações relacionadas à marcação, consulte :

  • Administração de tags para obter informações sobre como criar e gerenciar tags, bem como sobre quais tags de conteúdo foram aplicadas.
  • Uso de tags para obter informações sobre como marcar conteúdo.

Visão geral da API de marcação

A implementação da estrutura de marcação no AEM permite o gerenciamento de tags e conteúdo de tags usando a API JCR. O TagManager garante que as tags digitadas como valores na propriedade da matriz de sequência cq:tags não sejam duplicadas, ele remove TagIDs apontando para tags não existentes e atualiza TagIDs para tags movidas ou unidas. O TagManager usa um ouvinte de observação JCR que reverte quaisquer alterações incorretas. As classes principais estão no pacote com.day.cq.tagging:

  • JcrTagManagerFactory - retorna uma implementação baseada em JCR de TagManager. É a implementação de referência da API de marcação.
  • TagManager - permite resolver e criar tags por caminhos e nomes.
  • Tag - define o objeto de tag.

Obtendo um TagManager baseado em JCR

Para recuperar uma instância do TagManager, é necessário ter um JCR Session e chamar getTagManager(Session):

@Reference
JcrTagManagerFactory jcrTagManagerFactory;

TagManager tagManager = jcrTagManagerFactory.getTagManager(session);

No contexto Sling típico, você também pode se adaptar a TagManager a partir de ResourceResolver:

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

Recuperando um objeto de tag

Um Tag pode ser recuperado por meio de TagManager, resolvendo uma tag existente ou criando uma nova:

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

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

Para a implementação baseada em JCR, que mapeia Tags para o JCR Nodes, você pode usar diretamente o mecanismo adaptTo do Sling se tiver o recurso (por exemplo, /content/cq:tags/default/my/tag):

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

Enquanto uma tag só pode ser convertida *de *um recurso (não um nó), uma tag pode ser convertida *para *tanto um nó quanto um recurso :

Node node = tag.adaptTo(Node.class);
Resource node = tag.adaptTo(Resource.class);
OBSERVAÇÃO

Não é possível adaptar diretamente de Node para Tag, porque Node não implementa o método Sling Adaptable.adaptTo(Class).

Obtendo e configurando tags

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

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

Procurando por 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);
OBSERVAÇÃO

O RangeIterator válido a ser usado é:

com.day.cq.commons.RangeIterator

Excluindo tags

tagManager.deleteTag(tag);

Replicação de tags

É possível usar o serviço de replicação ( Replicator) com tags, pois elas são do tipo nt:hierarchyNode:

replicator.replicate(session, replicationActionType, tagPath);

Marcação no lado do cliente

CQ.tagging.TagInputField é um widget de formulário para inserir tags. Ele tem um menu pop-up para seleção de tags existentes, inclui o preenchimento automático e muitos outros recursos. Seu xtype é tags.

O Coletor de Lixo de Tag

O coletor de lixo de tags é um serviço em segundo plano que limpa as tags que estão ocultas e não são usadas. As tags ocultas e não usadas são tags abaixo de /content/cq:tags que têm uma propriedade cq:movedTo e não são usadas em um nó de conteúdo - elas têm uma contagem de zero. Ao usar esse processo de exclusão lento, o nó de conteúdo (ou seja, a propriedade cq:tags) não precisa ser atualizado como parte da operação de movimentação ou mesclagem. As referências na propriedade cq:tags são atualizadas automaticamente quando a propriedade cq:tags é atualizada, por exemplo, por meio da caixa de diálogo de propriedades da página.

O coletor de lixo da tag é executado por padrão uma vez por dia. Isso pode ser configurado em:

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

Pesquisa de tags e Listagem de tags

A pesquisa por tags e a listagem de tags funcionam da seguinte maneira:

  • A pesquisa por TagID pesquisa as tags que têm a propriedade cq:movedTo definida como TagID e segue por cq:movedTo TagIDs.

  • A pesquisa por Título da tag pesquisa somente as tags que não têm uma propriedade cq:movedTo.

Tags em diferentes idiomas

Conforme descrito na documentação para administração de tags, na seção Gerenciar tags em diferentes idiomas, uma tag titlepode ser definida em diferentes idiomas. Uma propriedade sensível ao idioma é então adicionada ao nó da tag. Essa propriedade tem o formato jcr:title.<locale>, por exemplo, jcr:title.fr para a tradução em francês. <locale> deve ser uma sequência de caracteres de localidade ISO em minúsculas e usar "_" em vez de "-", por exemplo: de_ch.

Quando a tag Animais é adicionada à página Produtos, o valor stockphotography:animals é adicionado à propriedade cq:tags do nó /content/geometrixx/en/products/jcr:content. A tradução é referenciada a partir do nó da tag.

A API do lado do servidor localizou title métodos relacionados:

  • com.day.cq.tagging.Tag

    • getLocalizedTitle(Locale locale)
    • getLocalizedTitlePaths()
    • getLocalizedTitle()
    • getTitle(localidade local)
    • getTitlePath(Locale locale)
  • com.day.cq.tagging.TagManager

    • canCreateTagByTitle(String tagTitlePath, localidade local)
    • createTagByTitle(String tagTitlePath, localidade local)
    • resolveByTitle(String tagTitlePath, localidade local)

Em AEM, o idioma pode ser obtido do idioma da página ou do idioma do usuário:

  • para recuperar o idioma da página em um JSP:

    • currentPage.getLanguage(false)
  • para recuperar o idioma do usuário em um JSP:

    • slingRequest.getLocale()

currentPage e slingRequest estão disponíveis em um JSP por meio da <cq:definedobjects> tag .

Para marcação, a localização depende do contexto, já que a tag titlespode ser exibida no idioma da página, no idioma do usuário ou em qualquer outro idioma.

Adicionar um novo idioma à caixa de diálogo Editar tag

O procedimento a seguir descreve como adicionar um novo idioma (finlandês) à caixa de diálogo Tag Edit:

  1. Em CRXDE, edite a propriedade de vários valores languages do nó /content/cq:tags.

  2. Adicione fi_fi - que representa a localidade finlandesa - e salve as alterações.

O novo idioma (finlandês) agora está disponível na caixa de diálogo de tags das propriedades da página e na caixa de diálogo Editar tag ao editar uma tag no console Marcação.

OBSERVAÇÃO

O novo idioma precisa ser um dos idiomas reconhecidos AEM, ou seja, precisa estar disponível como um nó abaixo de /libs/wcm/core/resources/languages.

Nesta página