A variável Projeto CIF Venia é uma base de código de referência para o uso de Componentes principais da CIF. Neste tutorial, você estenderá ainda mais a Teaser do produto para exibir um atributo personalizado do Adobe Commerce. Você também aprenderá mais sobre a integração do GraphQL entre AEM e o Adobe Commerce e os ganchos de extensão fornecidos pelos Componentes principais do CIF.
Use o Arquétipo de projeto do AEM ao iniciar sua própria implementação comercial.
A marca Venia começou recentemente a fabricar alguns produtos usando materiais sustentáveis e a empresa gostaria de exibir uma Eco Friendly como parte do Teaser do produto. Um novo atributo personalizado é criado no Adobe Commerce para indicar se um produto usa o Eco amigável material. Esse atributo personalizado é adicionado como parte da consulta do GraphQL e exibido no Teaser do produto de produtos especificados.
Um ambiente de desenvolvimento local é necessário para concluir este tutorial. Esse ambiente inclui uma instância do AEM em execução que está configurada e conectada a uma instância do Adobe Commerce. Revise os requisitos e as etapas para configurar um desenvolvimento local com o SDK as a Cloud Service do AEM. Para seguir o tutorial completamente, você precisa de permissões para adicionar Atributos a um produto no Adobe Commerce.
Você também precisa do GraphQL IDE, como GraphiQL ou uma extensão de navegador para executar as amostras de código e os tutoriais. Se você instalar uma extensão de navegador, verifique se ela pode definir cabeçalhos de solicitação. No Google Chrome, Cliente Altair GraphQL O é uma extensão que pode fazer o trabalho.
Clonar o Projeto Veniae substituirá os estilos padrão.
Você pode usar um projeto existente (baseado no Arquétipo de projeto AEM com CIF incluído) e pule esta seção.
Execute o seguinte comando do Git para clonar o projeto:
$ git clone git@github.com:adobe/aem-cif-guides-venia.git
Crie e implante o projeto em uma instância local do AEM:
$ cd aem-cif-guides-venia/
$ mvn clean install -PautoInstallSinglePackage,cloud
Adicione as configurações OSGi necessárias para conectar a instância do AEM a uma instância do Adobe Commerce ou adicione as configurações ao projeto criado.
Nesse ponto, você deve ter uma versão funcional de uma loja conectada a uma instância do Adobe Commerce. Navegue até a US
> Home
página em: http://localhost:4502/editor.html/content/venia/us/en.html.
Você verá que a loja está usando o tema Venia. Ao expandir o Menu principal da loja, você verá várias categorias, indicando que a conexão com o Adobe Commerce está funcionando.
O Teaser do produto é apresentado em todo este tutorial. Como primeira etapa, adicione uma instância do Teaser do produto à página inicial para entender a funcionalidade da linha de base.
Acesse a página inicial do site: http://localhost:4502/editor.html/content/acme/us/en.html
Insira um novo Teaser do produto no container do layout principal da página.
Expanda o painel lateral (se ainda não estiver sendo exibido) e na lista suspensa do localizador de ativos selecione Produtos. Essa lista deve exibir uma lista de produtos disponíveis em uma instância conectada do Adobe Commerce. Selecione, arraste e solte um produto no Teaser do produto exibido na página.
Observação: você também pode configurar o produto exibido definindo o componente na caixa de diálogo (clicando na chave inglesa).
Agora você já deve estar vendo um produto no teaser. O nome e o preço do produto são atributos exibidos por padrão.
Os produtos e os dados do produto exibidos no AEM são armazenados no Adobe Commerce. Em seguida, adicione um atributo para Eco Friendly como parte do conjunto de atributos do produto usando a interface do Adobe Commerce.
Já tem um personalizado Sim/Não como parte do seu conjunto de atributos de produto? Você pode usá-la e ignorar esta seção.
Faça logon na sua instância do Adobe Commerce.
Navegue até Catálogo > Produtos.
Atualize o filtro de pesquisa para encontrar o Produto configurável usado quando adicionado ao componente Teaser no exercício anterior. Abra o produto no modo de edição.
Na exibição do produto, clique em Adicionar atributo > Criar novo atributo.
Preencha o Novo atributo formulário com os seguintes valores (deixe as configurações padrão para outros valores)
Conjunto de campos | Rótulo do campo | Valor |
---|---|---|
Propriedades do atributo | Rótulo do atributo | Eco Friendly |
Propriedades do atributo | Tipo de entrada do catálogo | Sim/Não |
Propriedades Avançadas de Atributo | Código do atributo | eco_friendly |
Clique em Salvar atributo quando terminar.
Role até a parte inferior do produto e expanda a Atributos cabeçalho. Você deve ver o novo Eco Friendly campo. Alterne para Sim.
Salvar as alterações no produto.
Mais detalhes sobre gerenciamento Os atributos do produto podem ser encontrados no guia do usuário do Adobe Commerce.
Navegue até Sistema > Ferramentas > Gerenciamento de cache. Como foi feita uma atualização no esquema de dados, você deve invalidar alguns dos Tipos de cache no Adobe Commerce.
Marque a caixa ao lado de Configuração e enviar o tipo de cache para Atualizar
Mais detalhes sobre O Gerenciamento de cache pode ser encontrado no guia do usuário do Adobe Commerce.
Antes de pular para o código AEM, é útil explorar a Visão geral do GraphQL usando um GraphQL IDE. A integração do Adobe Commerce com o AEM é feita principalmente por meio de uma série de queries do GraphQL. Entender e modificar as consultas do GraphQL é uma das principais maneiras de estender os Componentes principais do CIF.
Em seguida, use um GraphQL IDE para verificar se o eco_friendly
O atributo foi adicionado ao conjunto de atributos do produto. As capturas de tela deste tutorial estão usando o Cliente Altair GraphQL.
Abra o GraphQL IDE e insira o URL http://<commerce-server>/graphql
na barra de URL do IDE ou na extensão.
Adicione o seguinte consulta de produtos onde YOUR_SKU
é o SKU do produto utilizado no exercício anterior:
{
products(
filter: { sku: { eq: "YOUR_SKU" } }
) {
items {
name
sku
eco_friendly
}
}
}
Execute a query e você receberá uma resposta como a seguinte:
{
"data": {
"products": {
"items": [
{
"name": "Valeria Two-Layer Tank",
"sku": "VT11",
"eco_friendly": 1
}
]
}
}
}
O valor de Sim é um número inteiro de 1. Esse valor é útil ao escrever a consulta do GraphQL em Java™.
Leia a documentação mais detalhada sobre Adobe Commerce GraphQL aqui.
Em seguida, estenda a lógica de negócios do Teaser do produto implementando um Modelo do Sling. Modelos Sling, são objetos POJO (Plain Old Java™ Objects) orientados por anotações que implementam a lógica de negócios exigida pelo componente. Os Modelos do Sling são usados com os scripts HTL como parte do componente. Siga as padrão de delegação para Modelos do Sling para que você possa estender partes do modelo existente do Teaser do produto.
Os Modelos do Sling são implementados como Java™ e podem ser encontrados no core módulo do projeto gerado.
Uso o IDE de sua escolha para importar o projeto Venia. As capturas de tela usadas são do IDE do Visual Studio Code.
No IDE, navegue sob o core módulo para: core/src/main/java/com/venia/core/models/commerce/MyProductTeaser.java
.
MyProductTeaser.java
é uma interface Java™ que estende o CIF ProductTeaser interface.
Já foi adicionado um novo método chamado isShowBadge()
para exibir um selo se o produto for considerado "Novo".
Adicionar isEcoFriendly()
à interface:
@ProviderType
public interface MyProductTeaser extends ProductTeaser {
// Extend the existing interface with the additional properties which you
// want to expose to the HTL template.
public Boolean isShowBadge();
public Boolean isEcoFriendly();
}
Esse novo método é introduzido para encapsular a lógica para indicar se o produto tem a função eco_friendly
atributo definido como Sim ou Não.
Em seguida, inspecione o MyProductTeaserImpl.java
em core/src/main/java/com/venia/core/models/commerce/MyProductTeaserImpl.java
.
A variável padrão de delegação para Modelos do Sling permite MyProductTeaserImpl
para referência ProductTeaser
por meio da sling:resourceSuperType
propriedade:
@Self
@Via(type = ResourceSuperType.class)
private ProductTeaser productTeaser;
Para os métodos que você não deseja substituir ou alterar, é possível retornar o valor que a variável ProductTeaser
retorna. Por exemplo:
@Override
public String getImage() {
return productTeaser.getImage();
}
Este método minimiza a quantidade de código Java™ que uma implementação deve gravar.
AEM Um dos pontos de extensão adicionais fornecidos pelos componentes principais do CIF é o AbstractProductRetriever
que fornece acesso a atributos específicos do produto. INSPECT o initModel()
método:
import javax.annotation.PostConstruct;
...
@Model(adaptables = SlingHttpServletRequest.class, adapters = MyProductTeaser.class, resourceType = MyProductTeaserImpl.RESOURCE_TYPE)
public class MyProductTeaserImpl implements MyProductTeaser {
...
private AbstractProductRetriever productRetriever;
/* add this method to initialize the productRetriever */
@PostConstruct
public void initModel() {
productRetriever = productTeaser.getProductRetriever();
if (productRetriever != null) {
productRetriever.extendProductQueryWith(p -> p.createdAt());
}
}
...
A variável @PostConstruct
A anotação garante que esse método seja chamado quando o Modelo Sling for inicializado.
Observe que a consulta do GraphQL do produto já foi estendida usando o extendProductQueryWith
método para recuperar o adicional created_at
atributo. Esse atributo é usado posteriormente como parte da variável isShowBadge()
método.
Atualize a consulta do GraphQL para incluir a eco_friendly
atributo na consulta parcial:
//MyProductTeaserImpl.java
private static final String ECO_FRIENDLY_ATTRIBUTE = "eco_friendly";
@PostConstruct
public void initModel() {
productRetriever = productTeaser.getProductRetriever();
if (productRetriever != null) {
productRetriever.extendProductQueryWith(p -> p
.createdAt()
.addCustomSimpleField(ECO_FRIENDLY_ATTRIBUTE)
);
}
}
Adicionar ao extendProductQueryWith
Esse método é uma maneira avançada de garantir que atributos de produto adicionais estejam disponíveis para o restante do modelo. Essa ação também minimiza o número de consultas executadas.
No código acima, a variáveladdCustomSimpleField
é usado para recuperar o eco_friendly
atributo. Este atributo ilustra como você pode consultar qualquer atributo personalizado que faça parte do esquema do Adobe Commerce.
A variável createdAt()
foi implementado como parte do Interface do produto. A maioria dos atributos de esquema encontrados com frequência foram implementados, portanto, use addCustomSimpleField
somente para atributos verdadeiramente personalizados.
Adicione um agente de log para depurar o código Java™:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
@Model(adaptables = SlingHttpServletRequest.class, adapters = MyProductTeaser.class, resourceType = MyProductTeaserImpl.RESOURCE_TYPE)
public class MyProductTeaserImpl implements MyProductTeaser {
private static final Logger LOGGER = LoggerFactory.getLogger(MyProductTeaserImpl.class);
Em seguida, implemente o isEcoFriendly()
método:
@Override
public Boolean isEcoFriendly() {
Integer ecoFriendlyValue;
try {
ecoFriendlyValue = productRetriever.fetchProduct().getAsInteger(ECO_FRIENDLY_ATTRIBUTE);
if(ecoFriendlyValue != null && ecoFriendlyValue.equals(Integer.valueOf(1))) {
LOGGER.info("*** Product is Eco Friendly**");
return true;
}
} catch (SchemaViolationError e) {
LOGGER.error("Error retrieving eco friendly attribute");
}
LOGGER.info("*** Product is not Eco Friendly**");
return false;
}
No método acima, a variável productRetriever
é usado para buscar o produto e a variável getAsInteger()
é usado para obter o valor do eco_friendly
atributo. Com base nas consultas do GraphQL executadas anteriormente, você sabe que o valor esperado quando a variável eco_friendly
atributo está definido como "Sim" é na verdade um número inteiro de 1.
Agora que o Modelo Sling foi atualizado, a marcação do Componente deve ser atualizada para realmente exibir um indicador de Eco Friendly com base no Modelo Sling.
Uma extensão comum de componentes do AEM é modificar a marcação gerada pelo componente. Essa edição é feita substituindo o Script HTL que o componente usa para renderizar sua marcação. A Linguagem de modelo de HTML (HTL) é uma linguagem de modelo leve que os componentes AEM usam para renderizar dinamicamente a marcação com base no conteúdo criado, permitindo que os componentes sejam reutilizados. O Teaser do produto, por exemplo, pode ser reutilizado várias vezes para exibir produtos diferentes.
Nesse caso, renderize um banner sobre o teaser para indicar que o produto é "Eco Friendly" com base em um atributo personalizado. O padrão de design para personalização da marcação de um componente é padrão para todos os componentes AEM AEM, não apenas para os componentes principais do CIF.
Se você personalizar um componente usando o produto CIF e os seletores de categoria, como este Teaser do produto ou o componente da página CIF, inclua o necessário cif.shell.picker
clientlib para as caixas de diálogo do componente. Consulte Uso do seletor de categoria e produto para CIF para obter detalhes.
No IDE, navegue e expanda a janela ui.apps
e expandir a hierarquia de pastas para: ui.apps/src/main/content/jcr_root/apps/venia/components/commerce/productteaser
e inspecionar o .content.xml
arquivo.
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
jcr:description="Product Teaser Component"
jcr:primaryType="cq:Component"
jcr:title="Product Teaser"
sling:resourceSuperType="core/cif/components/commerce/productteaser/v1/productteaser"
componentGroup="Venia - Commerce"/>
A definição de componente acima é para o Teaser do produto em seu projeto. Observe a propriedade sling:resourceSuperType="core/cif/components/commerce/productteaser/v1/productteaser"
. Esta propriedade é um exemplo de criação de um Componente proxy. AEM Em vez de copiar e colar os scripts HTL do Teaser do produto dos Componentes principais do CIF, você pode usar o sling:resourceSuperType
para herdar toda a funcionalidade.
Abra o arquivo productteaser.html
. Este arquivo é uma cópia do productteaser.html
arquivo do Teaser do produto CIF.
<!--/* productteaser.html */-->
<sly
data-sly-use.product="com.venia.core.models.commerce.MyProductTeaser"
data-sly-use.templates="core/wcm/components/commons/v1/templates.html"
data-sly-use.actionsTpl="actions.html"
data-sly-test.isConfigured="${properties.selection}"
data-sly-test.hasProduct="${product.url}"
></sly>
Observe que o Modelo Sling para MyProductTeaser
é usada e atribuída à product
variável.
Modificar productteaser.html
para que você possa chamar o isEcoFriendly
método aplicado no exercício anterior:
...
<div
data-sly-test="${isConfigured && hasProduct}"
class="item__root"
data-cmp-is="productteaser"
data-virtual="${product.virtualProduct}"
>
<div data-sly-test="${product.showBadge}" class="item__badge">
<span>${properties.text || 'New'}</span>
</div>
<!--/* Insert call to Eco Friendly here */-->
<div data-sly-test="${product.ecoFriendly}" class="item__eco">
<span>Eco Friendly</span>
</div>
...
</div>
Ao chamar um método Modelo do Sling no HTL, a variável get
e is
parte do método é descartada e a primeira letra é em minúsculas. Então isShowBadge()
torna-se .showBadge
e isEcoFriendly
torna-se .ecoFriendly
. Com base no valor booleano retornado de .isEcoFriendly()
determina se a variável <span>Eco Friendly</span>
é exibido.
Mais informações sobre data-sly-test
e outros As instruções em bloco HTL podem ser encontradas aqui.
Salve as alterações e implante as atualizações no AEM usando suas habilidades em Maven em um terminal de linha de comando:
$ cd aem-cif-guides-venia/
$ mvn clean install -PautoInstallSinglePackage,cloud
Abra uma nova janela do navegador e acesse AEM e a Console OSGi > Status > Modelos Sling: http://localhost:4502/system/console/status-slingmodels
Pesquisar por MyProductTeaserImpl
e você deverá ver uma linha como a seguinte:
com.venia.core.models.commerce.MyProductTeaserImpl - venia/components/commerce/productteaser
Essa linha indica que o modelo Sling foi corretamente implantado e mapeado para o componente correto.
Atualize para o Página inicial Venia em http://localhost:4502/editor.html/content/venia/us/en.html onde o Teaser do produto foi adicionado.
Se o produto tiver a eco_friendly
atributo definido como Sim, você deverá ver o texto "Eco Friendly" na página. Tente alternar para produtos diferentes para ver a mudança de comportamento.
Em seguida, abra o AEM error.log
para ver as instruções de log adicionadas. A variável error.log
está em <AEM SDK Install Location>/crx-quickstart/logs/error.log
.
Pesquise nos logs de AEM para ver as instruções de log adicionadas no Modelo Sling:
2020-08-28 12:57:03.114 INFO [com.venia.core.models.commerce.MyProductTeaserImpl] *** Product is Eco Friendly**
...
2020-08-28 13:01:00.271 INFO [com.venia.core.models.commerce.MyProductTeaserImpl] *** Product is not Eco Friendly**
...
Você também pode ver alguns rastreamentos de pilha se o produto usado no teaser não tiver o eco_friendly
atributo como parte de seu conjunto de atributos.
Nesse ponto, a lógica de quando exibir a variável Eco Friendly o símbolo está funcionando, no entanto, o texto sem formatação pode usar alguns estilos. Em seguida, adicione um ícone e estilos à ui.frontend
módulo para concluir a implementação.
Baixe o eco_friendly.svg arquivo. Esse arquivo é usado como o Eco Friendly selo.
Retorne ao IDE e navegue até o ui.frontend
pasta.
Adicione o eco_friendly.svg
arquivo para o ui.frontend/src/main/resources/images
pasta:
Abra o arquivo productteaser.scss
em ui.frontend/src/main/styles/commerce/_productteaser.scss
.
Adicione as seguintes regras Sass dentro do .productteaser
classe:
.productteaser {
...
.item__eco {
width: 60px;
height: 60px;
left: 0px;
overflow: hidden;
position: absolute;
padding: 5px;
span {
display: block;
position: absolute;
width: 45px;
height: 45px;
text-indent: -9999px;
background: no-repeat center center url('../resources/images/eco_friendly.svg');
}
}
...
}
Confira Estilização dos Componentes principais do CIF para obter mais detalhes sobre fluxos de trabalho de front-end.
Salve as alterações e implante as atualizações no AEM usando suas habilidades em Maven em um terminal de linha de comando:
$ cd aem-cif-guides-venia/
$ mvn clean install -PautoInstallSinglePackage,cloud
Atualize para o Página inicial Venia em http://localhost:4502/editor.html/content/venia/us/en.html onde o Teaser do produto foi adicionado.
AEM Você personalizou seu primeiro componente CIF! Baixe o arquivos de solução concluídos aqui.
Revise a funcionalidade do Novo Selo que já foi implementado no Teaser do produto. Tente adicionar uma caixa de seleção extra para que os autores controlem quando a Eco Friendly o selo deve ser exibido. Atualizar a caixa de diálogo do componente em ui.apps/src/main/content/jcr_root/apps/venia/components/commerce/productteaser/_cq_dialog/.content.xml
.