Magento 2 : ajouter un champ personnalisé aux modèles d'options de produit

Publié: 2021-02-04

L'extension Advanced Product Options vous permet non seulement de gérer les options sur les pages de produits, mais également de créer divers modèles d'options et de les affecter en masse à des produits spécifiques.

Cet article vous fournit des instructions étape par étape sur l'ajout de champs personnalisés Magento pour les options et les modèles d'options conformément aux meilleures pratiques et normes Advanced Product Options (APO).

Table des matières

  • Que sont les champs personnalisés avancés ?
  • Directives étape par étape
    • Avant que nous commencions
    • Étape 1. Réécriture de classe
    • Étape # 2. Réécriture de l'injection de dépendance
    • Étape 3. Création d'une nouvelle classe
    • Étape 4. Augmentation de version
    • Étape #5. Final
  • résumer

Que sont les champs personnalisés avancés ?

L'extension Advanced Product Options a été conçue pour offrir des possibilités polyvalentes. Cependant, comme chaque entreprise est différente et distincte, une personnalisation peut être nécessaire pour compléter des objectifs ponctuels. C'est particulièrement le cas lors de l'attribution en masse de modèles d'options et des champs de produits avancés ajoutés à vos offres.

Directives étape par étape

Avant que nous commencions

  • Lisez l'article sur la façon d'ajouter un nouveau champ dans l'option personnalisée, Magento. Il est disponible ici.

Nous allons utiliser et modifier l'exemple du billet de blog mentionné, où nous avons ajouté un champ personnalisé Magento 2 à APO.

Options de produits Magento

Étape 1. Réécriture de classe

Les tables créées pour les modèles stockent tous les attributs nécessaires en tant que tables principales de Magento.

Lorsque nous ajoutons à Magento un champ personnalisé à une option de produit ou un attribut pour une option ou ses valeurs, il est également nécessaire d'ajouter immédiatement ce champ personnalisé avancé aux modèles. Sauf si vous n'avez pas l'intention de l'utiliser dans les modèles.

À cette fin, nous avons créé le programme d'installation personnalisé `app/code/MageWorx/OptionBase/Model/Installer.php` dans notre module principal Option_Base.

Ce programme d'installation vous aide à Magento à ajouter des champs pour les options, les valeurs d'option et les modèles plus facilement.

Contrairement à l'exemple précédent où nous avons créé un schéma du champ requis dans app/code/VendorName/OptionGtin/Setup/InstallSchema.php , nous devrons réécrire cette classe et ajouter une connexion à notre installateur personnalisé :

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

Étape # 2. Réécriture de l'injection de dépendance

Ensuite, réécrivons `injection de dépendance` et modifions `app/code/VendorName/OptionGtin/etc/di.xml` en ajoutant notre programme d'installation personnalisé :

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

Étape 3. Création d'une nouvelle classe

Il est temps de créer une classe contenant les schémas des champs obligatoires qui se trouvaient auparavant dans `app/code/VendorName/OptionGtin/Setup/InstallSchema.php`.

Créez la classe `app/code/VendorName/OptionGtin/Model/InstallSchema.php` avec le code suivant :

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

Étape 4. Augmentation de version

Comme nous avons déjà installé le module OptionGtin avec le champ `gtin` dans la table `catalog_product_option`, il est nécessaire de créer sa classe unique et d'augmenter la version de l'extension.

Nous avons besoin de l'augmentation de la version pour relancer l'installation et terminer l'installation du champ `gtin` dans la table des modèles requis.

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

Maintenant, augmentez la version du module :

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

Étape #5. Final

Tout le travail acharné est terminé. Il ne reste plus qu'à lancer la commande d'installation `bin/magento setup:upgrade` et à vérifier que notre champ est écrit dans la table des templates correspondants.

Dans notre cas, il s'agit de la table `mageworx_optiontemplates_group_option`.

ajouter un champ personnalisé avancé au modèle

résumer

Nous espérons que vous trouverez utile notre série d'articles consacrés à l'augmentation de la personnalisation des options de produit avancées.

Vous savez maintenant comment ajouter un champ personnalisé au modèle et tirer le meilleur parti des modèles d'options de produit dans Magento 2.

S'il vous manque des possibilités de personnalisation spécifiques dans l'extension Advanced Product Options, veuillez soumettre une demande à [email protected] . Nous ferons de notre mieux pour vous aider !

options personnalisées dépendantes de magento 2

Réservez une démo en direct avec Mageworx