AEM 6.4 chegou ao fim do suporte estendido e esta documentação não é mais atualizada. Para obter mais detalhes, consulte nossa períodos de assistência técnica. Encontre as versões compatíveis here.
AEM (e antes disso, o CQ) utiliza há muito o princípio de sobreposições para permitir estender e personalizar o consoles e outras funcionalidades (por exemplo, criação de página).
Sobreposição é um termo que pode ser usado em muitos contextos. Neste contexto (extensão de AEM), uma sobreposição significa usar a funcionalidade predefinida e impor suas próprias definições sobre isso (para personalizar a funcionalidade padrão).
Em uma instância padrão, a funcionalidade predefinida é mantida em /libs
e é prática recomendada definir sua sobreposição (personalizações) no /apps
ramificação. AEM usa um caminho de pesquisa para localizar um recurso, pesquisando primeiro o /apps
e depois a /libs
ramificação (a o caminho de pesquisa pode ser configurado). Esse mecanismo significa que sua sobreposição (e as personalizações definidas lá) terá prioridade.
Desde o AEM 6.0, alterações foram feitas no modo como as sobreposições são implementadas e usadas:
AEM 6.0 em diante - para GraniteSobreposições relacionadas (ou seja, a interface habilitada para toque)
Método
Reconstrua o /libs
estrutura /apps
.
Isso não requer uma cópia 1:1, a variável Fusão de Recursos Sling é usada para fazer referência cruzada às definições originais necessárias. O Sling Resource Merger fornece serviços para o acesso e a fusão de recursos através de mecanismos de diferenciação (diferenciação).
Faça quaisquer alterações em /apps
.
Vantagens
/libs
.Sobreposições e sobreposições não granulares anteriores ao AEM 6.0
Método
Copie o conteúdo de /libs
para /apps
Você precisa copiar a sub-ramificação inteira, incluindo propriedades.
Faça quaisquer alterações em /apps
.
Desvantagens
/libs
, talvez seja necessário recriar determinadas alterações que ocorrem na sobreposição em /apps
.O Fusão de Recursos Sling e os métodos relacionados só podem ser usados com Granite. Isso significa que a criação de uma sobreposição com uma estrutura de esqueleto é adequada apenas para a interface de usuário padrão habilitada para toque.
As sobreposições para outras áreas (incluindo a interface clássica) envolvem a cópia do nó apropriado e de toda a subestrutura, e em seguida a realização das alterações necessárias.
As sobreposições são o método recomendado para muitas alterações, como configurar seus consoles ou criação da categoria de seleção no navegador de ativos no painel lateral (usado durante a criação de páginas). São exigidas como:
Você não deve faça alterações no /libs
ramificação As alterações feitas podem ser perdidas, pois essa ramificação pode ser alterada sempre que você:
Eles concentram suas alterações em um local; tornando mais fácil para você rastrear, migrar, fazer backup e/ou depurar as alterações, conforme necessário.
Para sobreposições, o recurso entregue é um agregado dos recursos e propriedades recuperados, dependendo dos caminhos de pesquisa que podem ser definidos:
O recurso Caminho de Pesquisa do Resolvedor conforme definido no Configuração do OSGi para Fábrica do Resolvedor de Recursos do Apache Sling.
/apps
, /libs
- o conteúdo /apps
tem uma prioridade mais elevada do que a /libs
(isto é, sobreposições a).Dois usuários de serviço precisam de acesso JCR:READ ao local onde os scripts são armazenados. Esses usuários são: components-search-service (usado pelos componentes com.day.cq.wcm.coreto access/cache) e sling-scripting (usado por org.apache.sling.servlets.resolver para encontrar servlets).
A configuração a seguir também deve ser configurada de acordo com a localização dos scripts (neste exemplo, em /etc, /libs ou /apps).
PID = org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl
resource.resolver.searchpath=["/etc","/apps","/libs"]
resource.resolver.vanitypath.whitelist=["/etc/","/apps/","/libs/","/content/"]
Finalmente, o Servlet Resolver também deve ser configurado (neste exemplo, para adicionar /etc também)
PID = org.apache.sling.servlets.resolver.SlingServletResolver
servletresolver.paths=["/bin/","/libs/","/apps/","/etc/","/system/","/index.servlet","/login.servlet","/services/"]
Alguns exemplos são abordados quando: