Magento 2: agregue un campo personalizado a las plantillas de opciones de productos
Publicado: 2021-02-04La extensión Opciones avanzadas de productos le permite tratar no solo con las opciones en las páginas de productos, sino también crear varias plantillas de opciones y asignarlas en masa a productos específicos.
Este artículo le brinda pautas paso a paso sobre cómo agregar campos personalizados Magento para opciones y plantillas de opciones de conformidad con las mejores prácticas y estándares de Opciones avanzadas de productos (APO).
Tabla de contenido
- ¿Qué son los campos personalizados avanzados?
- Directrices paso a paso
- Antes de que comencemos
- Paso 1. Reescritura de clase
- Paso # 2. Reescritura de inyección de dependencia
- Paso 3. Creación de nueva clase
- Paso 4. Aumento de versión
- Paso #5. Final
- Resumen
¿Qué son los campos personalizados avanzados?
La extensión Advanced Product Options se creó para ofrecer posibilidades versátiles. Sin embargo, dado que cada negocio es diferente y distinto, puede ser necesaria la personalización para complementar objetivos únicos. Este es especialmente el caso cuando se asignan masivamente plantillas de opciones y los campos de productos avanzados agregados a sus ofertas.
Directrices paso a paso
Antes de que comencemos
- Lea el artículo sobre cómo agregar un nuevo campo en la opción personalizada, Magento. Está disponible aquí.
Usaremos y modificaremos el ejemplo de la publicación de blog mencionada, donde agregamos un campo personalizado de Magento 2 a APO.
Paso 1. Reescritura de clase
Las tablas que se crean para las plantillas almacenan todos los atributos necesarios como las tablas principales de Magento.
Cuando Magento agrega un campo personalizado a la opción del producto o atributo para una opción o sus valores, también es necesario agregar este campo personalizado avanzado a las plantillas de inmediato. A menos que no tenga la intención de usarlo en las plantillas.
Para este propósito, creamos el instalador `app/code/MageWorx/OptionBase/Model/Installer.php` personalizado en nuestro módulo principal Option_Base.
Este instalador lo ayuda a Magento a agregar campos para opciones, valores de opciones y plantillas de manera más conveniente.
A diferencia del ejemplo anterior en el que creamos un esquema del campo requerido en app/code/VendorName/OptionGtin/Setup/InstallSchema.php
, necesitaremos reescribir esta clase y agregar una conexión a nuestro instalador personalizado:
<?php namespace VendorName\OptionGtin\Setup; use Magento\Framework\Setup\InstallSchemaInterface; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\SchemaSetupInterface; /** * @codeCoverageIgnore */ class InstallSchema implements InstallSchemaInterface { /** * @var \MageWorx\OptionBase\Model\Installer */ protected $optionBaseInstaller; /** * @param \MageWorx\OptionBase\Model\Installer $optionBaseInstaller */ public function __construct( \MageWorx\OptionBase\Model\Installer $optionBaseInstaller ) { $this->optionBaseInstaller = $optionBaseInstaller; } /** * {@inheritdoc} * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function install(SchemaSetupInterface $setup, ModuleContextInterface $context) { $installer = $setup; $installer->startSetup(); $this->optionBaseInstaller->install(); $installer->endSetup(); } }
Paso # 2. Reescritura de inyección de dependencia
A continuación, reescribamos `inyección de dependencia` y cambiemos `app/code/VendorName/OptionGtin/etc/di.xml` agregando nuestro instalador personalizado:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <!-- Data --> <type name="MageWorx\OptionBase\Model\Product\Option\Attributes"> <arguments> <argument name="data" xsi:type="array"> <item name="gtin" xsi:type="object">VendorName\OptionGtin\Model\Attribute\Option\Gtin</item> </argument> </arguments> </type> <!-- Installation --> <type name="MageWorx\OptionBase\Model\Installer"> <arguments> <argument name="installSchema" xsi:type="array"> <item name="option_gtin_install_schema_data" xsi:type="object">VendorName\OptionGtin\Model\InstallSchema</item> </argument> </arguments> </type> </config>
Paso 3. Creación de nueva clase
Es hora de crear una clase que contenga esquemas de los campos obligatorios que solían estar ubicados en `app/code/VendorName/OptionGtin/Setup/InstallSchema.php`.
Crea la clase `app/code/VendorName/OptionGtin/Model/InstallSchema.php` con el siguiente código:
<?php namespace VendorName\OptionGtin\Model; use Magento\Framework\DB\Ddl\Table; class InstallSchema implements \MageWorx\OptionBase\Api\InstallSchemaInterface { /** * Get module table prefix * * @return string */ public function getModuleTablePrefix() { return ''; } /** * Retrieve module fields data array * * @return array */ public function getData() { $dataArray = [ [ 'table_name' => 'catalog_product_option', 'field_name' => 'gtin', 'params' => [ 'type' => Table::TYPE_INTEGER, 'unsigned' => true, 'nullable' => false, 'comment' => 'Option gtin', ] ], ]; return $dataArray; } /** * Retrieve module indexes data array * * @return array */ public function getIndexes() { return []; } /** * Retrieve module foreign keys data array * * @return array */ public function getForeignKeys() { return []; } }
Paso 4. Aumento de versión
Como ya tenemos instalado el módulo OptionGtin con el campo `gtin` en la tabla `catalog_product_option`, es necesario crear su única clase y aumentar la versión de la extensión.
Necesitamos el aumento de versión para ejecutar la instalación una vez más y finalizar la instalación del campo `gtin` en la tabla de plantillas requeridas.
`aplicación/código/Nombre del proveedor/OptionGtin/Setup/UpgradeSchema.php`
<?php namespace VendorName\OptionGtin\Setup; use Magento\Framework\Setup\UpgradeSchemaInterface; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\SchemaSetupInterface; use MageWorx\OptionFeatures\Model\OptionDescription; use MageWorx\OptionFeatures\Model\OptionTypeDescription; use MageWorx\OptionFeatures\Model\Image; use MageWorx\OptionFeatures\Model\OptionTypeIsDefault; class UpgradeSchema implements UpgradeSchemaInterface { /** * @var \MageWorx\OptionBase\Model\Installer */ protected $optionBaseInstaller; /** * @var SchemaSetupInterface */ protected $setup; /** * UpgradeSchema constructor. * * @param \MageWorx\OptionBase\Model\Installer $optionBaseInstaller */ public function __construct( \MageWorx\OptionBase\Model\Installer $optionBaseInstaller ) { $this->optionBaseInstaller = $optionBaseInstaller; } /** * {@inheritdoc} */ public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context) { $this->setup = $setup; $this->optionBaseInstaller->install(); } }
Ahora, aumente la versión del módulo:
`app/code/VendorName/OptionGtin/etc/module.xml`
<?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="VendorName_OptionGtin" setup_version="1.0.1"> <sequence> <module name="Magento_Catalog"/> <module name="MageWorx_OptionBase"/> <module name="MageWorx_OptionFeatures"/> </sequence> </module> </config>
Paso #5. Final
Todo el trabajo duro ha terminado. Lo único que queda es ejecutar el comando de instalación `bin/magento setup:upgrade` y verificar que nuestro campo esté escrito en la tabla de plantillas correspondiente.
En nuestro caso, es la tabla `mageworx_optiontemplates_group_option`.
Resumen
Esperamos que encuentre útil nuestra serie de artículos dedicados a aumentar la personalización de Opciones avanzadas de productos.
Ahora ya sabe cómo agregar un campo personalizado a la plantilla y aprovechar al máximo las plantillas de opciones de productos en Magento 2.
Si le faltan posibilidades de personalización específicas en la extensión Opciones avanzadas de productos, envíe una solicitud a [email protected] . ¡Haremos todo lo posible para ayudarte!