Show Menu
TÓPICOS×

Uso da fusão de recursos Sling no AEM

Propósito

A fusão Sling Resource presta serviços de acesso e fusão de recursos. Fornece mecanismos de diferenciação (diferenciação) para ambos:
  • Sobreposições ​de recursos usando os caminhos de pesquisa configurados.
  • Substituições de caixas de diálogo de componentes para a interface habilitada para toque ( cq:dialog ), usando a hierarquia de tipo de recurso (por meio da propriedade sling:resourceSuperType ).
Com a Fusão de recursos Sling, os recursos de sobreposição/sobreposição e/ou as propriedades são unidos aos recursos/propriedades originais:
  • O conteúdo da definição personalizada tem uma prioridade mais alta do que o original (isto é, sobreposições ou substituições ).
  • Quando necessário, as propriedades definidas na personalização indicam como o conteúdo unido do original deve ser usado.
A fusão de recursos Sling e os métodos relacionados só podem ser utilizados com Granite . Isso também significa que ele é apropriado apenas para a interface padrão e habilitada para toque; em particular, as substituições definidas dessa maneira são aplicáveis somente à caixa de diálogo habilitada para toque de um componente.
As sobreposições/substituições para outras áreas (incluindo outros aspectos de um componente ativado por toque ou da interface clássica) envolvem a cópia do nó e da estrutura apropriados do original para onde a personalização será definida.

Metas do AEM

Os objetivos para usar a fusão de recursos Sling no AEM são:
  • verifique se as alterações de personalização não foram feitas em /libs .
  • reduzir a estrutura da qual é replicada /libs .
    Ao usar a Fusão de recursos Sling, não é recomendável copiar toda a estrutura do, pois isso resultaria em informações demais mantidas na personalização (normalmente /libs /apps ). A duplicação de informações aumenta desnecessariamente a chance de problemas quando o sistema é atualizado de alguma forma.
As substituições não dependem dos caminhos de pesquisa, elas usam a propriedade sling:resourceSuperType para fazer a conexão.
No entanto, as substituições são frequentemente definidas em /apps , já que a prática recomendada no AEM é definir personalizações em /apps ; isso porque você não pode mudar nada debaixo /libs .
Você não deve alterar nada no /libs caminho.
Isso ocorre porque o conteúdo do é substituído na próxima vez que você atualizar sua instância (e pode muito bem ser substituído quando você aplicar uma correção ou um pacote de recursos). /libs
O método recomendado para configuração e outras alterações é:
  1. Recriar o item desejado (isto é, como ele existe em /libs ) em /apps
  2. Faça quaisquer alterações em /apps

Propriedades

A fusão de recursos fornece as seguintes propriedades:
  • sling:hideProperties ( String ou String[] )
    Especifica a propriedade, ou lista de propriedades, a ser ocultada.
    O curinga * esconde tudo.
  • sling:hideResource ( Boolean )
    Indica se os recursos devem estar completamente ocultos, incluindo seus filhos.
  • sling:hideChildren ( String ou String[] )
    Contém o nó filho, ou a lista de nós filhos, a ser ocultada. As propriedades do nó serão mantidas.
    O curinga * esconde tudo.
  • sling:orderBefore ( String )
    Contém o nome do nó irmão no qual o nó atual deve ser posicionado na frente.
Essas propriedades afetam como os recursos/propriedades correspondentes/originais (de /libs ) são usados pela sobreposição/substituição (geralmente em /apps ).

Criação da estrutura

Para criar uma sobreposição ou sobreposição, é necessário recriar o nó original, com a estrutura equivalente, sob o destino (normalmente /apps ). Por exemplo:
  • Sobreposição
    • A definição da entrada de navegação para o console Sites, como mostrado no painel, é definida em:
      /libs/cq/core/content/nav/sites/jcr:title
    • Para sobrepor isso, crie o seguinte nó:
      /apps/cq/core/content/nav/sites
      Em seguida, atualize a propriedade jcr:title conforme necessário.
  • Substituir
    • A definição da caixa de diálogo habilitada para toque para o console Textos é definida em:
      /libs/foundation/components/text/cq:dialog
    • Para substituir isso, crie o seguinte nó - por exemplo:
      /apps/the-project/components/text/cq:dialog
Para criar qualquer um desses, basta recriar a estrutura do esqueleto. Para simplificar a recriação da estrutura, todos os nós intermediários podem ser do tipo nt:unstructured (eles não precisam refletir o tipo de nó original; por exemplo, em /libs ).
Portanto, no exemplo de sobreposição acima, os seguintes nós são necessários:
/apps
  /cq
    /core
      /content
        /nav
          /sites

Ao usar a Fusão de recursos Sling (isto é, ao lidar com a interface de usuário padrão, habilitada para toque), não é recomendado copiar toda a estrutura de /libs uma vez que isso resultaria na retenção de muitas informações /apps . Isso pode causar problemas quando o sistema é atualizado de alguma forma.

Use Cases

Eles, juntamente com a funcionalidade padrão, permitem que você:
  • Adicionar uma propriedade
    A propriedade não existe na /libs definição, mas é necessária na /apps sobreposição/substituição.
    1. Crie o nó correspondente em /apps
    2. Crie a nova propriedade neste nó "
  • Redefinir uma propriedade (não propriedades criadas automaticamente)
    A propriedade é definida em /libs , mas um novo valor é necessário na /apps sobreposição/substituição.
    1. Crie o nó correspondente em /apps
    2. Criar a propriedade correspondente neste nó (em / apps )
      • A propriedade terá uma prioridade com base na configuração do Sling Resource Resolver.
      • A alteração do tipo de propriedade é suportada.
        Se você usar um tipo de propriedade diferente daquele usado em /libs , o tipo de propriedade definido será usado.
    A alteração do tipo de propriedade é suportada.
  • Redefinir uma propriedade criada automaticamente
    Por padrão, as propriedades criadas automaticamente (como jcr:primaryType ) não estão sujeitas a uma sobreposição/substituição para garantir que o tipo de nó atualmente em /libs execução seja respeitado. Para impor uma sobreposição/sobreposição, é necessário recriar o nó em /apps , ocultar explicitamente a propriedade e redefini-la:
    1. Crie o nó correspondente em /apps com o jcr:primaryType
    2. Crie a propriedade sling:hideProperties nesse nó, com o valor definido para o da propriedade criada automaticamente;por exemplo, jcr:primaryType
      Essa propriedade, definida em /apps , terá prioridade sobre a definida em /libs
  • Redefinir um nó e seus filhos
    O nó e seus filhos são definidos em /libs , mas uma nova configuração é necessária na /apps sobreposição/substituição.
    1. Combine as ações de:
      1. Ocultar filhos de um nó (mantendo as propriedades do nó)
      2. Redefinir a propriedade/propriedades
  • Ocultar uma propriedade
    A propriedade é definida em /libs , mas não é exigida na /apps sobreposição/substituição.
    1. Crie o nó correspondente em /apps
    2. Crie uma propriedade sling:hideProperties do tipo String ou String[] . Use esta opção para especificar as propriedades que serão ocultadas/ignoradas. Caracteres curinga também podem ser usados. Por exemplo:
      • *
      • ["*"]
      • jcr:title
      • ["jcr:title", "jcr:description"]
  • Ocultar um nó e seus filhos
    O nó e seus filhos são definidos em /libs , mas não são necessários na /apps sobreposição/sobreposição.
    1. Criar o nó correspondente em /apps
    2. Criar uma propriedade sling:hideResource
      • tipo: Boolean
      • valor: true
  • Ocultar filhos de um nó (mantendo as propriedades do nó)
    O nó, suas propriedades e seus filhos são definidos em /libs . O nó e suas propriedades são necessários na /apps sobreposição/substituição, mas alguns ou todos os nós filhos não são necessários na /apps sobreposição/substituição.
    1. Criar o nó correspondente em /apps
    2. Crie a propriedade sling:hideChildren :
      • tipo: String[]
      • valor: uma lista dos nós secundários (conforme definido em /libs ) para ocultar/ignorar
      O caractere curinga * pode ser usado para ocultar/ignorar todos os nós filhos.
  • Reordenar nós
    O nó e seus irmãos são definidos em /libs . Uma nova posição é necessária para que o nó seja recriado na /apps sobreposição/substituição, onde a nova posição é definida em referência ao nó irmão apropriado em /libs .
    • Use a sling:orderBefore propriedade:
      1. Criar o nó correspondente em /apps
      2. Crie a propriedade sling:orderBefore :
        Isso especifica o nó (como em /libs ) que o nó atual deve ser posicionado antes:
        • tipo: String
        • valor: <before-SiblingName>

Invocando a Fusão de Recursos Sling do seu código

A Fusão de recursos Sling inclui dois provedores de recursos personalizados - um para sobreposições e outro para substituições. Cada uma dessas opções pode ser invocada em seu código usando um ponto de montagem:
Ao acessar seu recurso, é recomendável usar o ponto de montagem apropriado.
Isso garante que a fusão de recursos Sling seja invocada e que o recurso totalmente unido seja devolvido (reduzindo a estrutura da qual é necessário replicar-se /libs ).
  • Sobreposição:
    • objetivo: mesclar recursos com base em seu caminho de pesquisa
    • ponto de montagem: /mnt/overlay
    • usage: mount point + relative path
    • exemplo:
      • getResource('/mnt/overlay' + '<relative-path-to-resource>');
  • Substituir:
    • objetivo: mesclar recursos com base em seu super tipo
    • ponto de montagem: /mnt/overide
    • usage: mount point + absolute path
    • exemplo:
      • getResource('/mnt/override' + '<absolute-path-to-resource>');

Exemplo de uso

Alguns exemplos são abordados: