Magento 2: aggiungi un campo personalizzato ai modelli di opzioni del prodotto

Pubblicato: 2021-02-04

L'estensione Opzioni prodotto avanzate ti consente non solo di gestire le opzioni sulle pagine dei prodotti, ma anche di creare vari modelli di opzioni e assegnarli in massa a prodotti specifici.

Questo articolo fornisce linee guida dettagliate sull'aggiunta di campi personalizzati Magento per opzioni e modelli di opzioni in conformità con le best practice e gli standard Advanced Product Options (APO).

Sommario

  • Cosa sono i campi personalizzati avanzati?
  • Linee guida passo passo
    • Prima di iniziare
    • Passo 1. Riscrittura di classe
    • Passaggio 2. Riscrittura dell'iniezione delle dipendenze
    • Passaggio 3. Creazione di una nuova classe
    • Passaggio 4. Aumento della versione
    • Passaggio #5. Finale
  • Ricapitolare

Cosa sono i campi personalizzati avanzati?

L'estensione Advanced Product Options è stata creata per offrire possibilità versatili. Tuttavia, poiché ogni azienda è diversa e distinta, può essere richiesta la personalizzazione per completare gli obiettivi una tantum. Questo è particolarmente vero quando si assegnano in massa modelli di opzioni e campi di prodotti avanzati aggiunti alle tue offerte.

Linee guida passo passo

Prima di iniziare

  • Leggi l'articolo su come aggiungere un nuovo campo nell'opzione personalizzata, Magento. È disponibile qui.

Useremo e modificheremo l'esempio dal post del blog menzionato, in cui abbiamo aggiunto un campo personalizzato Magento 2 ad APO.

Opzioni del prodotto Magento

Passo 1. Riscrittura di classe

Le tabelle create per i modelli memorizzano tutti gli attributi necessari come tabelle Magento principali.

Quando Magento aggiungiamo un campo personalizzato all'opzione del prodotto o all'attributo per un'opzione o i suoi valori, è anche necessario aggiungere subito questo campo personalizzato avanzato ai modelli. A meno che tu non intenda utilizzarlo nei modelli.

A tale scopo, abbiamo creato il programma di installazione personalizzato `app/code/MageWorx/OptionBase/Model/Installer.php` nel nostro modulo Option_Base principale.

Questo programma di installazione ti aiuta a Magento aggiungere campi per opzioni, valori di opzione e modelli in modo più conveniente.

A differenza dell'esempio precedente in cui abbiamo creato uno schema del campo richiesto in app/code/VendorName/OptionGtin/Setup/InstallSchema.php , dovremo riscrivere questa classe e aggiungere una connessione al nostro programma di installazione personalizzato:

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

Passaggio 2. Riscrittura dell'iniezione delle dipendenze

Quindi, riscriviamo `dependency injection` e cambiamo `app/code/VendorName/OptionGtin/etc/di.xml` aggiungendo il nostro programma di installazione personalizzato:

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

Passaggio 3. Creazione di una nuova classe

È ora di creare una classe che contenga gli schemi dei campi obbligatori che prima si trovavano in `app/code/VendorName/OptionGtin/Setup/InstallSchema.php`.

Crea la classe `app/code/VendorName/OptionGtin/Model/InstallSchema.php` con il codice seguente:

 <?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 []; } }

Passaggio 4. Aumento della versione

Dato che abbiamo già installato il modulo OptionGtin con il campo `gtin` nella tabella `catalog_product_option`, è necessario creare la sua unica classe e aumentare la versione dell'estensione.

Abbiamo bisogno dell'aumento della versione per eseguire l'installazione ancora una volta e completare l'installazione sul campo `gtin` nella tabella dei modelli richiesti.

`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(); } }

Ora, aumenta la versione del modulo:

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

Passaggio #5. Finale

Tutto il duro lavoro è finito. L'unica cosa rimasta è eseguire il comando di installazione `bin/magento setup:upgrade` e controllare che il nostro campo sia scritto nella tabella dei modelli corrispondenti.

Nel nostro caso, è la tabella `mageworx_optiontemplates_group_option`.

aggiungi un campo personalizzato avanzato al modello

Ricapitolare

Ci auguriamo che la nostra serie di articoli dedicati all'aumento della personalizzazione delle Opzioni di prodotto avanzate sia utile.

Ora sai come aggiungere un campo personalizzato al modello e utilizzare al meglio i modelli di opzioni del prodotto in Magento 2.

Se mancano specifiche possibilità di personalizzazione nell'estensione Opzioni prodotto avanzate, inviare una richiesta a [email protected] . Faremo del nostro meglio per aiutarti!

opzioni personalizzate dipendenti da magento 2

Prenota una demo dal vivo con Mageworx