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.
Olá, obrigado pela aula. O conteúdo do arquivo di.xml teria sido apreciado para uma melhor compreensão do seu artigo. Cumprimentos