Cuadro de autor


Discuta su proyecto

Sobre Nosotros

Somos un socio de Microsoft Gold con presencia en los Estados Unidos y la India. Somos un proveedor de servicios de TI dinámico y profesional que sirve a empresas y nuevas empresas, ayudándolas a enfrentar los desafíos de la economía global. Ofrecemos servicios en el área de Consulta e implementación CRM, Desarrollo de aplicaciones, Desarrollo de aplicaciones móviles, Desarrollo web y Desarrollo Offshore.

Cómo crear un módulo en Magento 2

Cómo crear un módulo en Magento 2

By Pooja sharma / 3 de septiembre de 2021

16 de septiembre de 2021
Cómo crear un módulo en Magento 2

Crear módulo Agregar etiqueta de tiempo para Magento 2

En este módulo, aprenderá a crear un módulo personalizado para agregar y mostrar la etiqueta de tiempo en la página de un solo producto, agregar a la página del carrito, ver la página y el panel de administración.

Básicamente, este módulo se configura de acuerdo con el estado del stock de inventario según los productos individuales.

Comenzando con el módulo Estructura de carpetas:

Para crear un módulo personalizado, deberá completar los siguientes pasos:

Paso 1: crea una carpeta con el nombre módulo LeadTime

El nombre del módulo se define como "NombreProveedor_NombreMódulo”. La primera parte es el nombre del proveedor y la última parte es el nombre del módulo:

Por ejemplo, el nombre de mi módulo es Etiqueta de tiempo de entrega, céntrese en la siguiente guía para crear las carpetas:

Las ubicaciones de las carpetas para los módulos en Magento 2: carpeta de aplicaciones / códigos 

aplicación / código / LeadTime / Label

Paso 2: crear un archivo registration.php

Créar un registration.php archivo que registra el módulo con el nombre de la carpeta y subcarpeta del modelo.

aplicación / código / LeadTime / registration.php

Contenido:

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

También, lea: Cómo agregar productos simples y configurables en Magento 2

Paso 3: creación del archivo etc / module.xml

Es necesario crear una carpeta etc y agregar el módulo.xml presentar

aplicación / código / LeadTime / Label / etc / module.xml

Contenido:

<?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>

Paso 4: creación del archivo etc / events.xml

El módulo realiza eventos cuando se activan determinadas acciones. Magento nos permite crear nuestros propios eventos que se pueden enviar en código. Cuando se envía un evento, puede pasar datos a cualquier observador configurado para vigilar ese evento.

En este archivo de eventos estamos activando dos eventos; se llama un evento después de que se agrega el producto al carrito de pago, el módulo llama PagarCarritoAgregarObservador Observador, y el segundo evento antes de citar enviar qué llamadas PresupuestoEnviarObservador Observador.

aplicación / código / LeadTime / Label / etc / event.xml

Contenido:

<?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>

También, lea: 4 formas efectivas en que las pequeñas empresas pueden optimizar en la tienda Magento 2

Paso 5: Creación del archivo Observer / CheckoutCartAddObserver.php

Estos observadores son una clase de Magento que pueden afectar el rendimiento de cualquier lógica empresarial. El Observer se ejecuta cuando los eventos configurados para observarlos son enviados por el administrador de eventos.

Al principio, crearemos una carpeta llamada Observador en la raíz del módulo.

Después de eso, crearemos un archivo PHP para el primer evento al que le hemos dado el nombre del observador en el archivo de eventos.

En PagarCarritoAgregarObservador archivo, verificamos la cantidad del producto si la cantidad es mayor que cero y luego establecemos la etiqueta 'Plazo de ejecución en stock del producto: 7-21 días', si la cantidad es cero o menor que cero, establezca la etiqueta'Plazo de ejecución de pedidos especiales: 16-22 semanas'

aplicación / código / LeadTime / Label / Observer / CheckoutCartAddObserver.php

Contenido:

<?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)
));
}
}
}

Paso 6: Creación del archivo Observer / QuoteSubmitObserver.php

En este archivo, heredaremos la clase ObserverInterface. Y obtendrá la cotización del producto, el valor del pedido y lo establecerá en la elección de opciones adicionales.

aplicación / código / 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
}
}
}

También, lea: Debe usar la extensión Magento 2 para una funcionalidad adicional

Paso 7: creación del archivo etc / di.xml

Creamos el di.xml archivo dentro de la carpeta etc. Configura las dependencias que son inyectadas por el administrador de objetos. Además, especifique valores de configuración sensibles utilizando este archivo. Configuramos nuestro complemento personalizado para establecer etiquetas de pedido en este archivo en particular en el panel de administración.

Paso 8: Cree el archivo Plugin / SetOrderItemValue.php

Creamos una carpeta en la raíz de un módulo con un nombre de complemento, luego, dentro de ella, creamos un archivo Php llamado EstablecerOrderItemValue.php que fija nuestra etiqueta a nuestro 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;
}
}

Paso 9: Habilitación del módulo

Después de crear el módulo, ejecute el siguiente comando:

 módulo php bin / magento: estado

muestra la lista de módulos deshabilitados: Etiqueta de tiempo de entrega mi módulo.

habilite el módulo ahora mismo, ejecute el comando como:

módulo php bin / magento: habilitar LeadTime_Label

También, lea: 7 pasos para instalar Magento 2 en el sistema operativo Windows con XAMPP

Paso 10: Después de habilitar el módulo Ejecutar comandos de Magento:

Configuración de php bin / magento: actualización

Configuración de php bin / magento: static-content: deploy -f

php bin / magento c: c

php bin / magento c: f

chmod -R 777 generado / var / pub /

Página del producto del sitio web, página del carrito de anuncios y página de pago después de la instalación:

Espero que este blog le resulte útil para comprender el flujo de cómo se puede crear cualquier módulo en Magento para mejorar la funcionalidad de los productos.

[sc name = "Desarrollo web"] [add_newsletter] [add_related_page_diff_contents blog_cat = "magento"]

Crear módulo Agregar etiqueta de tiempo para Magento 2

En este módulo, aprenderá a crear un módulo personalizado para agregar y mostrar la etiqueta de tiempo en la página de un solo producto, agregar a la página del carrito, ver la página y el panel de administración.

Básicamente, este módulo se configura de acuerdo con el estado del stock de inventario según los productos individuales.

Comenzando con el módulo Estructura de carpetas:

Para crear un módulo personalizado, deberá completar los siguientes pasos:

Paso 1: crea una carpeta con el nombre módulo LeadTime

El nombre del módulo se define como "NombreProveedor_NombreMódulo”. La primera parte es el nombre del proveedor y la última parte es el nombre del módulo:

Por ejemplo, el nombre de mi módulo es Etiqueta de tiempo de entrega, céntrese en la siguiente guía para crear las carpetas:

Las ubicaciones de las carpetas para los módulos en Magento 2: carpeta de aplicaciones / códigos 

aplicación / código / LeadTime / Label

Paso 2: crear un archivo registration.php

Créar un registration.php archivo que registra el módulo con el nombre de la carpeta y subcarpeta del modelo.

aplicación / código / LeadTime / registration.php

Contenido:

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

También, lea: Cómo agregar productos simples y configurables en Magento 2

Paso 3: creación del archivo etc / module.xml

Es necesario crear una carpeta etc y agregar el módulo.xml presentar

aplicación / código / LeadTime / Label / etc / module.xml

Contenido:

<?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>

Paso 4: creación del archivo etc / events.xml

El módulo realiza eventos cuando se activan determinadas acciones. Magento nos permite crear nuestros propios eventos que se pueden enviar en código. Cuando se envía un evento, puede pasar datos a cualquier observador configurado para vigilar ese evento.

En este archivo de eventos estamos activando dos eventos; se llama un evento después de que se agrega el producto al carrito de pago, el módulo llama PagarCarritoAgregarObservador Observador, y el segundo evento antes de citar enviar qué llamadas PresupuestoEnviarObservador Observador.

aplicación / código / LeadTime / Label / etc / event.xml

Contenido:

<?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>

También, lea: 4 formas efectivas en que las pequeñas empresas pueden optimizar en la tienda Magento 2

Paso 5: Creación del archivo Observer / CheckoutCartAddObserver.php

Estos observadores son una clase de Magento que pueden afectar el rendimiento de cualquier lógica empresarial. El Observer se ejecuta cuando los eventos configurados para observarlos son enviados por el administrador de eventos.

Al principio, crearemos una carpeta llamada Observador en la raíz del módulo.

Después de eso, crearemos un archivo PHP para el primer evento al que le hemos dado el nombre del observador en el archivo de eventos.

En PagarCarritoAgregarObservador archivo, verificamos la cantidad del producto si la cantidad es mayor que cero y luego establecemos la etiqueta 'Plazo de ejecución en stock del producto: 7-21 días', si la cantidad es cero o menor que cero, establezca la etiqueta'Plazo de ejecución de pedidos especiales: 16-22 semanas"

aplicación / código / LeadTime / Label / Observer / CheckoutCartAddObserver.php

Contenido:

<?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)
));
}
}
}

Paso 6: Creación del archivo Observer / QuoteSubmitObserver.php

En este archivo, heredaremos la clase ObserverInterface. Y obtendrá la cotización del producto, el valor del pedido y lo establecerá en la elección de opciones adicionales.

aplicación / código / 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
}
}
}

También, lea: Debe usar la extensión Magento 2 para una funcionalidad adicional

Paso 7: creación del archivo etc / di.xml

Creamos el di.xml archivo dentro de la carpeta etc. Configura las dependencias que son inyectadas por el administrador de objetos. Además, especifique valores de configuración sensibles utilizando este archivo. Configuramos nuestro complemento personalizado para establecer etiquetas de pedido en este archivo en particular en el panel de administración.

Paso 8: Cree el archivo Plugin / SetOrderItemValue.php

Creamos una carpeta en la raíz de un módulo con un nombre de complemento, luego, dentro de ella, creamos un archivo Php llamado EstablecerOrderItemValue.php que fija nuestra etiqueta a nuestro 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;
}
}

Paso 9: Habilitación del módulo

Después de crear el módulo, ejecute el siguiente comando:

 módulo php bin / magento: estado

muestra la lista de módulos deshabilitados: Etiqueta de tiempo de entrega mi módulo.

habilite el módulo ahora mismo, ejecute el comando como:

módulo php bin / magento: habilitar LeadTime_Label

También, lea: 7 pasos para instalar Magento 2 en el sistema operativo Windows con XAMPP

Paso 10: Después de habilitar el módulo Ejecutar comandos de Magento:

Configuración de php bin / magento: actualización

Configuración de php bin / magento: static-content: deploy -f

php bin / magento c: c

php bin / magento c: f

chmod -R 777 generado / var / pub /

Página del producto del sitio web, página del carrito de anuncios y página de pago después de la instalación:

Espero que este blog le resulte útil para comprender el flujo de cómo se puede crear cualquier módulo en Magento para mejorar la funcionalidad de los productos.

Servicios de Desarrollo Web

¿Está buscando una empresa de desarrollo web confiable? Nuestros desarrolladores web altamente calificados nos permiten ofrecer servicios de desarrollo web orientados a resultados. Póngase en contacto con nuestro equipo para comprender cómo podemos ayudarlo a lograr sus objetivos comerciales.



invitado
1 Comentario
Comentarios en línea
Ver todos los comentarios
Axel
Axel
Enero 4, 2023 10: 20 am

Hola, gracias por la lección. El contenido del archivo di.xml habría sido apreciado para una mejor comprensión de su artículo. Saludos

1
0
Me encantaría tus pensamientos, por favor comenta.x