Caixa do Autor


Discuta o seu projeto

Sobre Nós

Somos o parceiro Microsoft Gold com presença nos Estados Unidos e na Índia. Somos um provedor de serviços de TI dinâmico e profissional que atende empresas e startups, ajudando-as a enfrentar os desafios da economia global. Oferecemos serviços na área de Consultoria e implementação de CRM, Desenvolvimento de aplicações, Desenvolvimento de aplicações mobile, Desenvolvimento Web e Desenvolvimento Offshore.

Como criar módulo no Magento 2

Como criar módulo no Magento 2

By Pooja Sharma / 3 de setembro de 2021

16 de Setembro de 2021
Como criar módulo no Magento 2

Criar módulo Add Time Label para Magento 2

Neste módulo, você aprenderá como criar um módulo customizado para adicionar e exibir o rótulo de tempo na página do produto único, adicionar à página do carrinho, visualizar página e painel de administração.

Basicamente, este módulo é definido de acordo com o status do estoque de acordo com os produtos individuais.

Começando com o módulo Estrutura de pastas:

Para criar um módulo personalizado, você precisará concluir as seguintes etapas:

Etapa 1: Crie uma pasta com o nome Módulo LeadTime

O nome do módulo é definido como “NomeDoFornecedor_ModuleName”. A primeira parte é o nome do fornecedor e a última parte é o nome do módulo:

Por exemplo - Meu nome de módulo é LeadTime_Label, concentre-se no seguinte guia para criar as pastas:

Os locais da pasta para os módulos no Magento 2: pasta app / code 

app / code / LeadTime / Label

Etapa 2: Criação de um arquivo registration.php

Crie uma registration.php arquivo que registra o módulo com o nome da pasta e subpasta do modelo.

app / code / LeadTime / registration.php

Conteúdo:

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

Além disso, leia: Como adicionar produtos simples e configuráveis ​​no Magento 2

Etapa 3: Criação do arquivo etc / module.xml

É necessário criar uma pasta etc e adicionar o módulo.xml lima

app / code / LeadTime / Label / etc / module.xml

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="LeadTime_Label" setup_version="1.0.0">
</module>
</config>

Etapa 4: Criação do arquivo etc / events.xml

Os eventos são executados pelo módulo quando certas ações são acionadas. O Magento nos permite criar nossos próprios eventos que podem ser enviados em código. Quando um evento é despachado, ele pode passar dados para qualquer observador configurado para observar esse evento.

Neste arquivo de evento, estamos disparando dois eventos; um evento está sendo chamado depois que o produto está sendo adicionado ao carrinho de checkout, o módulo chama CheckoutCarrinhoAddObserver Observer, e o segundo evento antes do envio da cotação que chama CitaçãoEnviarObservador Observador

app / code / LeadTime / Label / etc / event.xml

Conteúdo:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="checkout_cart_product_add_after">
<observer name="extension_checkout_cart_product_add_after" instance="LeadTime\Label\Observer\CheckoutCartAddObserver" />
</event>
<event name="sales_model_service_quote_submit_before">
<observer name="unique_name" instance="LeadTime\Label\Observer\QuoteSubmitObserver" />
</event>
</config>

Além disso, leia: 4 maneiras eficazes para pequenas empresas podem otimizar na loja Magento 2

Etapa 5: Criação do arquivo Observer / CheckoutCartAddObserver.php

Esses observadores são uma classe Magento que pode afetar o desempenho de qualquer lógica de negócios. O Observer é executado quando os eventos configurados para assisti-los são despachados pelo gerenciador de eventos.

Em primeiro lugar, vamos criar uma pasta chamada Observador na raiz do módulo.

Depois disso, criaremos um arquivo PHP para o primeiro evento ao qual demos o nome de observador no arquivo de evento.

No CheckoutCarrinhoAddObserver arquivo, verificamos a quantidade do produto se a quantidade for maior que zero, então definimos o rótulo 'Tempo de execução de instock do produto: 7 a 21 dias', se a quantidade for zero ou menor que zero, defina o rótulo'Tempo de execução do pedido especial: 16 a 22 semanas'

app / code / LeadTime / Label / Observer / CheckoutCartAddObserver.php

Conteúdo:

<?php
namespace LeadTime\Label\Observer;

use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\Event\ObserverInterface;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\View\LayoutInterface;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Serialize\SerializerInterface;

class CheckoutCartAddObserver implements ObserverInterface
{
protected $request;
private $serializer;
protected $layout;
protected $storeManager;
public function __construct(RequestInterface $request, SerializerInterface $serializer, StoreManagerInterface $storeManager, LayoutInterface $layout)
{
$this->_request = $request;
$this->serializer = $serializer;
$this->layout = $layout;
$this->storeManager = $storeManager;
}
public function execute(\Magento\Framework\Event\Observer $observer){
$item = $observer->getQuoteItem();
$additionalOptions = array();
$product = $observer->getProduct();
$productId=$product->getId();
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
$qty=$StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
if($qty > 0){
$label='Product Instock Lead Time: 7 -21 days' ;
}else{
$label='Special Order Lead Time: 16 - 22 Weeks' ;
}
if ($additionalOption = $item->getOptionByCode('additional_options')) {
$additionalOptions = $this->serializer->unserialize($additionalOption->getValue());
}
$additionalOptions[] = [
'label' => 'Lead Time',
'value' => $label
];
if (!is_null($additionalOptions)) {
$item->addOption(array(
'product_id' => $item->getProductId(),
'code' => 'additional_options',
'value' => $this->serializer->serialize($additionalOptions)
));
}
}
}

Etapa 6: Criação do arquivo Observer / QuoteSubmitObserver.php

Neste arquivo, iremos herdar a classe ObserverInterface. E obterá a cotação do produto, o valor do pedido e definirá na escolha de opções adicionais.

app / code / LeadTime / Label / Observer / QuoteSubmitObserver.php

<?php
namespace LeadTime\Label\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Serialize\SerializerInterface;
class QuoteSubmitObserver implements ObserverInterface
{
private $serializer;
public function __construct(SerializerInterface $serializer)
{
$this->serializer = $serializer;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
try {
$quote = $observer->getQuote();
$order = $observer->getOrder();
$quoteItems = [];

// Map Quote Item with Quote Item Id
foreach ($quote->getAllItems() as $quoteItem) {
$quoteItems[$quoteItem->getId()] = $quoteItem;
}

foreach ($order->getAllVisibleItems() as $orderItem) {
$quoteItemId = $orderItem->getQuoteItemId();
$quoteItem = $quoteItems[$quoteItemId];
$additionalOptions = $quoteItem->getOptionByCode('additional_options');

if (!is_null($additionalOptions)) {
// Get Order Item's other options
$options = $orderItem->getProductOptions();
// Set additional options to Order Item
$options['additional_options'] = $this->serializer->unserialize($additionalOptions->getValue());
$orderItem->setProductOptions($options);
}
}
} catch (\Exception $e) {
// catch error if any
}
}
}

Além disso, leia: Deve usar a extensão Magento 2 para funcionalidade adicional

Etapa 7: Criação do arquivo etc / di.xml

Nós criamos o di.xml arquivo dentro da pasta etc. Configura se as dependências são injetadas pelo gerenciador de objetos. Além disso, especifique configurações confidenciais usando este arquivo. Configuramos nosso plugin personalizado para definir rótulos de pedidos neste arquivo específico no painel de administração.

Etapa 8: Criar arquivo Plugin / SetOrderItemValue.php

Criamos uma pasta na raiz de um módulo com um nome de plugin e, dentro dela, criamos um arquivo Php chamado SetOrderItemValue.php que define nosso rótulo para nosso pedido.

<?php
namespace LeadTime\Label\Plugin;
use Magento\Framework\Serialize\SerializerInterface;
class SetOrderItemValue
{
private $serializer;
public function __construct(SerializerInterface $serializer)
{
$this->serializer = $serializer;
}
public function aroundConvert(\Magento\Quote\Model\Quote\Item\ToOrderItem $subject, callable $proceed, $quoteItem, $data)
{

// get order item
$orderItem = $proceed($quoteItem, $data);

if(!$orderItem->getParentItemId() && $orderItem->getProductType() == \Magento\Catalog\Model\Product\Type::TYPE_SIMPLE){
if ($additionalOptionsQuote = $quoteItem->getOptionByCode('additional_options')) {
//To do
// - check to make sure element are not added twice
// - $additionalOptionsQuote - may not be an array
if($additionalOptionsOrder = $orderItem->getProductOptionByCode('additional_options')){
$additionalOptions = array_merge($additionalOptionsQuote, $additionalOptionsOrder);
}
else{
$additionalOptions = $additionalOptionsQuote;
}
if(!is_null($additionalOptions)){
$options = $orderItem->getProductOptions();
$options['additional_options'] = $this->serializer->unserialize($additionalOptions->getValue());
$orderItem->setProductOptions($options);
}
}
}

return $orderItem;
}
}

Etapa 9: Ativando o módulo

Depois de criar o módulo, execute o seguinte comando:

 módulo php bin / magento: status

mostra a lista de módulos desabilitados: LeadTime_Label meu módulo.

habilite o módulo agora, vamos executar o comando como:

Módulo php bin / magento: habilitar LeadTime_Label

Além disso, leia: 7 etapas para instalar o Magento 2 no sistema operacional Windows com XAMPP

Etapa 10: Depois de habilitar o módulo, execute os comandos do Magento:

php bin / magento setup: atualização

php bin / magento setup: static-content: deploy -f

php bin / magento c: c

php bin / magento c: f

chmod -R 777 gerado / var / pub /

Página de produto do site, página de carrinho de anúncios e página de check-out após a instalação:

Espero que você ache este blog útil para entender o fluxo de como qualquer módulo pode ser criado no Magento para aprimorar a funcionalidade dos produtos.

[sc name = "Desenvolvimento Web"] [add_newsletter] [add_related_page_diff_contents blog_cat = "magento"]

Criar módulo Add Time Label para Magento 2

Neste módulo, você aprenderá como criar um módulo customizado para adicionar e exibir o rótulo de tempo na página do produto único, adicionar à página do carrinho, visualizar página e painel de administração.

Basicamente, este módulo é definido de acordo com o status do estoque de acordo com os produtos individuais.

Começando com o módulo Estrutura de pastas:

Para criar um módulo personalizado, você precisará concluir as seguintes etapas:

Etapa 1: Crie uma pasta com o nome Módulo LeadTime

O nome do módulo é definido como “NomeDoFornecedor_ModuleName”. A primeira parte é o nome do fornecedor e a última parte é o nome do módulo:

Por exemplo - Meu nome de módulo é LeadTime_Label, concentre-se no seguinte guia para criar as pastas:

Os locais da pasta para os módulos no Magento 2: pasta app / code 

app / code / LeadTime / Label

Etapa 2: Criação de um arquivo registration.php

Crie uma registration.php arquivo que registra o módulo com o nome da pasta e subpasta do modelo.

app / code / LeadTime / registration.php

Conteúdo:

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

Além disso, leia: Como adicionar produtos simples e configuráveis ​​no Magento 2

Etapa 3: Criação do arquivo etc / module.xml

É necessário criar uma pasta etc e adicionar o módulo.xml lima

app / code / LeadTime / Label / etc / module.xml

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="LeadTime_Label" setup_version="1.0.0">
</module>
</config>

Etapa 4: Criação do arquivo etc / events.xml

Os eventos são executados pelo módulo quando certas ações são acionadas. O Magento nos permite criar nossos próprios eventos que podem ser enviados em código. Quando um evento é despachado, ele pode passar dados para qualquer observador configurado para observar esse evento.

Neste arquivo de evento, estamos disparando dois eventos; um evento está sendo chamado depois que o produto está sendo adicionado ao carrinho de checkout, o módulo chama CheckoutCarrinhoAddObserver Observer, e o segundo evento antes do envio da cotação que chama CitaçãoEnviarObservador Observador

app / code / LeadTime / Label / etc / event.xml

Conteúdo:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="checkout_cart_product_add_after">
<observer name="extension_checkout_cart_product_add_after" instance="LeadTime\Label\Observer\CheckoutCartAddObserver" />
</event>
<event name="sales_model_service_quote_submit_before">
<observer name="unique_name" instance="LeadTime\Label\Observer\QuoteSubmitObserver" />
</event>
</config>

Além disso, leia: 4 maneiras eficazes para pequenas empresas podem otimizar na loja Magento 2

Etapa 5: Criação do arquivo Observer / CheckoutCartAddObserver.php

Esses observadores são uma classe Magento que pode afetar o desempenho de qualquer lógica de negócios. O Observer é executado quando os eventos configurados para assisti-los são despachados pelo gerenciador de eventos.

Em primeiro lugar, vamos criar uma pasta chamada Observador na raiz do módulo.

Depois disso, criaremos um arquivo PHP para o primeiro evento ao qual demos o nome de observador no arquivo de evento.

No CheckoutCarrinhoAddObserver arquivo, verificamos a quantidade do produto se a quantidade for maior que zero, então definimos o rótulo 'Tempo de execução de instock do produto: 7 a 21 dias', se a quantidade for zero ou menor que zero, defina o rótulo'Tempo de execução do pedido especial: 16 a 22 semanas'

app / code / LeadTime / Label / Observer / CheckoutCartAddObserver.php

Conteúdo:

<?php
namespace LeadTime\Label\Observer;

use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\Event\ObserverInterface;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\View\LayoutInterface;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Serialize\SerializerInterface;

class CheckoutCartAddObserver implements ObserverInterface
{
protected $request;
private $serializer;
protected $layout;
protected $storeManager;
public function __construct(RequestInterface $request, SerializerInterface $serializer, StoreManagerInterface $storeManager, LayoutInterface $layout)
{
$this->_request = $request;
$this->serializer = $serializer;
$this->layout = $layout;
$this->storeManager = $storeManager;
}
public function execute(\Magento\Framework\Event\Observer $observer){
$item = $observer->getQuoteItem();
$additionalOptions = array();
$product = $observer->getProduct();
$productId=$product->getId();
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
$qty=$StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
if($qty > 0){
$label='Product Instock Lead Time: 7 -21 days' ;
}else{
$label='Special Order Lead Time: 16 - 22 Weeks' ;
}
if ($additionalOption = $item->getOptionByCode('additional_options')) {
$additionalOptions = $this->serializer->unserialize($additionalOption->getValue());
}
$additionalOptions[] = [
'label' => 'Lead Time',
'value' => $label
];
if (!is_null($additionalOptions)) {
$item->addOption(array(
'product_id' => $item->getProductId(),
'code' => 'additional_options',
'value' => $this->serializer->serialize($additionalOptions)
));
}
}
}

Etapa 6: Criação do arquivo Observer / QuoteSubmitObserver.php

Neste arquivo, iremos herdar a classe ObserverInterface. E obterá a cotação do produto, o valor do pedido e definirá na escolha de opções adicionais.

app / code / LeadTime / Label / Observer / QuoteSubmitObserver.php

<?php
namespace LeadTime\Label\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Serialize\SerializerInterface;
class QuoteSubmitObserver implements ObserverInterface
{
private $serializer;
public function __construct(SerializerInterface $serializer)
{
$this->serializer = $serializer;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
try {
$quote = $observer->getQuote();
$order = $observer->getOrder();
$quoteItems = [];

// Map Quote Item with Quote Item Id
foreach ($quote->getAllItems() as $quoteItem) {
$quoteItems[$quoteItem->getId()] = $quoteItem;
}

foreach ($order->getAllVisibleItems() as $orderItem) {
$quoteItemId = $orderItem->getQuoteItemId();
$quoteItem = $quoteItems[$quoteItemId];
$additionalOptions = $quoteItem->getOptionByCode('additional_options');

if (!is_null($additionalOptions)) {
// Get Order Item's other options
$options = $orderItem->getProductOptions();
// Set additional options to Order Item
$options['additional_options'] = $this->serializer->unserialize($additionalOptions->getValue());
$orderItem->setProductOptions($options);
}
}
} catch (\Exception $e) {
// catch error if any
}
}
}

Além disso, leia: Deve usar a extensão Magento 2 para funcionalidade adicional

Etapa 7: Criação do arquivo etc / di.xml

Nós criamos o di.xml arquivo dentro da pasta etc. Configura se as dependências são injetadas pelo gerenciador de objetos. Além disso, especifique configurações confidenciais usando este arquivo. Configuramos nosso plugin personalizado para definir rótulos de pedidos neste arquivo específico no painel de administração.

Etapa 8: Criar arquivo Plugin / SetOrderItemValue.php

Criamos uma pasta na raiz de um módulo com um nome de plugin e, dentro dela, criamos um arquivo Php chamado SetOrderItemValue.php que define nosso rótulo para nosso pedido.

<?php
namespace LeadTime\Label\Plugin;
use Magento\Framework\Serialize\SerializerInterface;
class SetOrderItemValue
{
private $serializer;
public function __construct(SerializerInterface $serializer)
{
$this->serializer = $serializer;
}
public function aroundConvert(\Magento\Quote\Model\Quote\Item\ToOrderItem $subject, callable $proceed, $quoteItem, $data)
{

// get order item
$orderItem = $proceed($quoteItem, $data);

if(!$orderItem->getParentItemId() && $orderItem->getProductType() == \Magento\Catalog\Model\Product\Type::TYPE_SIMPLE){
if ($additionalOptionsQuote = $quoteItem->getOptionByCode('additional_options')) {
//To do
// - check to make sure element are not added twice
// - $additionalOptionsQuote - may not be an array
if($additionalOptionsOrder = $orderItem->getProductOptionByCode('additional_options')){
$additionalOptions = array_merge($additionalOptionsQuote, $additionalOptionsOrder);
}
else{
$additionalOptions = $additionalOptionsQuote;
}
if(!is_null($additionalOptions)){
$options = $orderItem->getProductOptions();
$options['additional_options'] = $this->serializer->unserialize($additionalOptions->getValue());
$orderItem->setProductOptions($options);
}
}
}

return $orderItem;
}
}

Etapa 9: Ativando o módulo

Depois de criar o módulo, execute o seguinte comando:

 módulo php bin / magento: status

mostra a lista de módulos desabilitados: LeadTime_Label meu módulo.

habilite o módulo agora, vamos executar o comando como:

Módulo php bin / magento: habilitar LeadTime_Label

Além disso, leia: 7 etapas para instalar o Magento 2 no sistema operacional Windows com XAMPP

Etapa 10: Depois de habilitar o módulo, execute os comandos do Magento:

php bin / magento setup: atualização

php bin / magento setup: static-content: deploy -f

php bin / magento c: c

php bin / magento c: f

chmod -R 777 gerado / var / pub /

Página de produto do site, página de carrinho de anúncios e página de check-out após a instalação:

Espero que você ache este blog útil para entender o fluxo de como qualquer módulo pode ser criado no Magento para aprimorar a funcionalidade dos produtos.

Serviços de desenvolvimento web

Você está procurando uma empresa de desenvolvimento web confiável? Nossos desenvolvedores web altamente qualificados nos permitem entregar serviços de desenvolvimento web orientados a resultados. Entre em contato com nossa equipe para entender como podemos ajudá-lo a atingir seus objetivos de negócios.



convidado
1 Comentário
Comentários em linha
Ver todos os comentários
Axel
Axel
Janeiro 4, 2023 10: 20 am

Olá, obrigado pela aula. O conteúdo do arquivo di.xml teria sido apreciado para uma melhor compreensão do seu artigo. Cumprimentos

1
0
Adoraria seus pensamentos, por favor, comente.x