Magento 2: agregue un campo personalizado a las plantillas de opciones de productos

Publicado: 2021-02-04

La 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.

Opciones de productos Magento

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`.

agregar un campo personalizado avanzado a la plantilla

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!

opciones personalizadas dependientes de magento 2

Reserve una demostración en vivo con Mageworx