Magento 2: adicionar campos personalizados aos modelos de opções de produtos

Publicados: 2021-02-04

A extensão Advanced Product Options permite que você lide não apenas com opções nas páginas de produtos, mas também crie vários modelos de opções e atribua-os em massa a produtos específicos.

Este artigo fornece orientações passo a passo sobre como adicionar campos personalizados Magento para opções e modelos de opções em conformidade com as melhores práticas e padrões de Opções Avançadas de Produto (APO).

Índice

  • O que são campos personalizados avançados?
  • Diretrizes passo a passo
    • Antes de começarmos
    • Passo 1. Reescrita de classe
    • Etapa # 2. Reescrita de Injeção de Dependência
    • Etapa 3. Criação de nova classe
    • Passo 4. Aumento de versão
    • Passo #5. Final
  • Recapitular

O que são campos personalizados avançados?

A extensão Advanced Product Options foi criada para oferecer possibilidades versáteis. No entanto, como cada negócio é diferente e distinto, a personalização pode ser necessária para complementar objetivos pontuais. Este é especialmente o caso ao atribuir modelos de opções em massa e os campos de produtos avançados adicionados às suas ofertas.

Diretrizes passo a passo

Antes de começarmos

  • Leia o artigo sobre como adicionar um novo campo na opção personalizada, Magento. Está disponível aqui.

Usaremos e modificaremos o exemplo da postagem do blog mencionada, onde adicionamos um campo personalizado do Magento 2 ao APO.

Opções de produtos Magento

Passo 1. Reescrita de classe

As tabelas que são criadas para modelos armazenam todos os atributos necessários como as tabelas principais do Magento.

Quando o Magento adiciona um campo personalizado à opção ou atributo do produto para uma opção ou seus valores, também é necessário adicionar esse campo personalizado avançado aos modelos imediatamente. A menos que você não pretenda usá-lo nos modelos.

Para este propósito, criamos o instalador customizado `app/code/MageWorx/OptionBase/Model/Installer.php` em nosso módulo Option_Base principal.

Este instalador ajuda você a adicionar campos para opções, valores de opção e modelos do Magento de forma mais conveniente.

Ao contrário do exemplo anterior, onde criamos um esquema do campo obrigatório em app/code/VendorName/OptionGtin/Setup/InstallSchema.php , precisaremos reescrever essa classe e adicionar uma conexão ao nosso 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(); } }

Etapa # 2. Reescrita de Injeção de Dependência

Em seguida, vamos reescrever `injeção de dependência` e alterar `app/code/VendorName/OptionGtin/etc/di.xml` adicionando nosso 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>

Etapa 3. Criação de nova classe

É hora de criar uma classe que contenha esquemas dos campos obrigatórios que costumavam estar localizados em `app/code/VendorName/OptionGtin/Setup/InstallSchema.php`.

Crie a classe `app/code/VendorName/OptionGtin/Model/InstallSchema.php` com o seguinte 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 []; } }

Passo 4. Aumento de versão

Como já temos o módulo OptionGtin instalado com o campo `gtin` na tabela `catalog_product_option`, é necessário criar sua classe única e aumentar a versão da extensão.

Precisamos do aumento de versão para executar a instalação novamente e finalizar a instalação do campo `gtin` na tabela de templates necessários.

`app/code/VendorName/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(); } }

Agora, aumente a versão do 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>

Passo #5. Final

Todo o trabalho duro acabou. A única coisa que resta é executar o comando de instalação `bin/magento setup:upgrade` e verificar se nosso campo está escrito na tabela de templates correspondente.

No nosso caso, é a tabela `mageworx_optiontemplates_group_option`.

adicionar campo personalizado avançado ao modelo

Recapitular

Esperamos que você ache útil nossa série de artigos dedicados a aumentar a personalização das Opções Avançadas de Produto.

Agora, você sabe como adicionar um campo personalizado ao modelo e fazer o melhor uso dos modelos de opção de produto no Magento 2.

Se você estiver perdendo possibilidades específicas de personalização na extensão Opções avançadas de produto, envie uma solicitação em [email protected] . Faremos o nosso melhor para ajudá-lo!

opções personalizadas dependentes do magento 2

Reserve uma demonstração ao vivo com o Mageworx