Como criar um módulo personalizado no Magento 2

Publicados: 2018-03-19

O que é o Módulo Magento?

Como você sabe, o módulo é um diretório que contém blocos , controllers , models , helper , etc – que estão relacionados a um recurso de negócio específico.

De acordo com o compromisso do Magento com a modularidade ideal, um módulo encapsula um recurso e tem dependências mínimas em outros módulos.

Os módulos fornecem recursos de negócios, com lógica de suporte, enquanto os temas influenciam fortemente a experiência do usuário e a aparência da vitrine.

Finalidade do módulo

A finalidade de cada módulo é fornecer recursos específicos do produto, implementando novas funcionalidades ou estendendo a funcionalidade de outros módulos. Cada módulo é projetado para funcionar de forma independente, portanto, a inclusão ou exclusão de um módulo específico normalmente não afeta a funcionalidade de outros módulos.

No Magento 2, os módulos estarão ativos no diretório app/code de uma instalação do Magento, com este formato: app/code/<Vendor>/<ModuleName>. Agora vamos seguir estes passos para criar um módulo simples que funcione no Magento 2.

Criar um módulo Magento 2

  1. Crie a pasta do módulo.
  2. Crie o arquivo etc/module.xml.
  3. Crie o arquivo registration.php.
  4. Execute o script bin/magento setup:upgrade para instalar o novo módulo.
  5. Verifique se o módulo está funcionando.

Vamos passar por cada uma dessas etapas em detalhes.

Etapa 1: criar a pasta do módulo

  • Existem dois locais possíveis para módulos no Magento 2: a pasta app/code e a pasta vendor

Dependendo de como o Magento 2 foi instalado, os módulos principais podem estar localizados nas pastas vendor/magento/magento-* (para instalação do composer) ou na pasta app/code/Magento/ (para clonagem do github).

  • Qual desses locais você deve escolher para seu novo módulo?

Se você criar um módulo para um projeto específico, é melhor escolher a pasta app/code e confirmar no repositório do projeto.

Se você construir uma extensão para ser reutilizada, é melhor usar o composer para criá-la e colocar seu módulo na pasta vendor/<YOUR_VENDOR>/module-something.

Cada nome de módulo no Magento 2 consiste em duas partes – o fornecedor e o próprio módulo, então você precisa definir os nomes do fornecedor e do módulo. Para este exemplo, vamos nomear o fornecedor “Learning” e o módulo “FirstUnit”.

Vamos criar a pasta app/code/Learning e dentro desta pasta coloque outra pasta: FirstUnit. Se você estiver usando a linha de comando, o código seria:

  1. cd para a pasta raiz
  2. aplicativo/código/aprendizagem mkdir
  3. mkdirapp/code/Learning/FirstUnit

Certifique-se de ter permissão para criar arquivos e pastas em sua instalação.

Etapa 2: crie o arquivo etc/module.xml

Este arquivo é necessário para que o módulo exista e contém as seguintes informações:

  • Nome do módulo
  • Versão do módulo
  • Dependências

O nome do módulo é definido pelas pastas que acabamos de criar, pois no Magento 2, os nomes das classes devem seguir a estrutura de pastas. Como criamos as pastas Learning/FirstUnit, o nome do nosso módulo será Learning_FirstUnit e todas as classes que pertencem a este módulo começarão com Learning\FirstUnit – por exemplo: Learning\FirstUnit\Observer\Test.

A versão do módulo indica a versão atual do esquema e dos dados do banco de dados e é usada na atualização. Por exemplo, suponha que você decida modificar o esquema de uma tabela em seu módulo. Como você pode ter certeza de que essa mudança acontecerá em todas as instâncias em que o código for implantado? Alterar o banco de dados por consultas SQL diretas não funcionará. Em vez disso, o Magento 2 possui scripts de instalação e atualização em cada módulo (opcionalmente). Esses scripts contêm comandos para modificar o esquema ou os dados do banco de dados. Para rastrear a execução de um script ou não, o Magento 2 usa versões de módulo. Toda vez que você implementa uma nova mudança de banco de dados, você implementa uma nova versão de um módulo e altera o module.xml correspondente. O Magento salva a versão do módulo atual em um banco de dados e, se o valor do banco de dados e o do module.xml não corresponderem, ele executará o código de atualização.

Dependências. Se um módulo depender de outro, o arquivo module.xml terá uma declaração especial que define uma lista de módulos dos quais o módulo atual depende. Para este exemplo, tornaremos nosso módulo dependente de Magento_Catalog.

Usando o seguinte código de linha de comando, crie a pasta app/code/Learning/FirstUnit/etc :

 mkdir app/code/Learning/FirstUnit/etc

Em seguida, crie um arquivo XML com o seguinte conteúdo:

 <?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Learning_FirstUnit" setup_version="0.0.1">
        <sequência>
            <module name="Magento_Catalog" />
        </sequência>
    </module>
</config>

Observe que no arquivo XML especificamos:

  • Nome do módulo: Learning_FirstUnit (com base nas pastas que criamos)
  • Versão: 0.0.1 (versão inicial do nosso módulo)
  • Dependência: Magento_Catalog. Poderíamos ter várias dependências. Nesse caso, colocaríamos os nós <module name=”..” /> sob o nó de sequência.

Etapa 3: crie o arquivo registration.php

Cada módulo deve ter este arquivo, que informa ao Magento como localizar o módulo. Continuando nosso exemplo, crie o arquivo app/code/Learning/FirstUnit/registration.php . Em seguida, coloque o seguinte conteúdo nele:

 <?php \Magento\Framework\Component\ComponentRegistrar::register(\Magento\Framework\Component\ComponentRegistrar::MODULE, 'Learning_FirstUnit', __DIR__);

O registration.php é um arquivo padronizado que segue o mesmo padrão para todos os módulos.

A única coisa que varia é o nome do módulo, que no nosso caso é Learning_FirstUnit .

Etapa 4: execute o comando “setup:upgrade”

A execução deste comando ativa seu novo módulo, notificando o Magento de sua presença.

 php bin/magento configuração: atualização

Deve ecoar uma grande quantidade de saída, uma linha da qual deve ser Learning_FirstUnit . Verifique se esta linha de código está lá.

Etapa 5: Verifique se o novo módulo está ativo

Até agora, não adicionamos nenhum código útil ao nosso módulo – ele ainda está vazio (e, portanto, invisível). Para verificar se foi reconhecido, verifique o arquivo app/etc/config.php . Ele tem uma lista de módulos gerados automaticamente que estão ativos.

Nunca altere esta lista manualmente!

 cat app/etc/env.php | grep Learning_FirstUnit

Empregando essas etapas, você pode criar com sucesso um novo módulo no Magento 2.


Consulte Mais informação:
Como implantar conteúdo estático no Magento 2