Magento 2: aggiungi un campo personalizzato ai modelli di opzioni del prodotto
Pubblicato: 2021-02-04L'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.
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`.
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!