Magento 2: Benutzerdefiniertes Feld zu Produktoptionsvorlagen hinzufügen
Veröffentlicht: 2021-02-04Mit der Erweiterung „Erweiterte Produktoptionen“ können Sie nicht nur mit Optionen auf Produktseiten umgehen, sondern auch verschiedene Optionsvorlagen erstellen und diese bestimmten Produkten massenweise zuweisen.
Dieser Artikel enthält schrittweise Anleitungen zum Hinzufügen von benutzerdefinierten Feldern zu Magento für Optionen und Optionsvorlagen in Übereinstimmung mit den Best Practices und Standards für erweiterte Produktoptionen (APO).
Inhaltsverzeichnis
- Was sind erweiterte benutzerdefinierte Felder?
- Schritt-für-Schritt-Anleitungen
- Bevor wir anfangen
- Schritt 1. Klasse umschreiben
- Schritt Nr. 2. Neuschreiben der Abhängigkeitsinjektion
- Schritt 3. Neue Klassenerstellung
- Schritt 4. Versionserhöhung
- Schritt #5. Finale
- Rekapitulieren
Was sind erweiterte benutzerdefinierte Felder?
Die Erweiterung Erweiterte Produktoptionen wurde entwickelt, um vielseitige Möglichkeiten zu bieten. Da jedoch jedes Unternehmen anders und individuell ist, kann eine Anpassung erforderlich sein, um einmalige Ziele zu ergänzen. Dies ist insbesondere der Fall, wenn Sie Ihren Angeboten Optionsvorlagen und die hinzugefügten erweiterten Produktfelder massenweise zuweisen.
Schritt-für-Schritt-Anleitungen
Bevor wir anfangen
- Lesen Sie den Artikel darüber, wie Sie ein neues Feld in der benutzerdefinierten Option Magento hinzufügen. Es ist hier erhältlich.
Wir werden das Beispiel aus dem erwähnten Blogbeitrag verwenden und modifizieren, in dem wir ein benutzerdefiniertes Magento 2-Feld zu APO hinzugefügt haben.
Schritt 1. Klasse umschreiben
Tabellen, die für Vorlagen erstellt werden, speichern alle erforderlichen Attribute als Magento-Kerntabellen.
Wenn wir Magento ein benutzerdefiniertes Feld zu einer Produktoption oder einem Attribut für eine Option oder ihre Werte hinzufügen, ist es auch erforderlich, dieses erweiterte benutzerdefinierte Feld sofort zu den Vorlagen hinzuzufügen. Es sei denn, Sie beabsichtigen nicht, es in den Vorlagen zu verwenden.
Zu diesem Zweck haben wir den benutzerdefinierten Installer „app/code/MageWorx/OptionBase/Model/Installer.php“ in unserem Hauptmodul Option_Base erstellt.
Dieses Installationsprogramm hilft Ihnen, Magento bequemer Felder für Optionen, Optionswerte und Vorlagen hinzuzufügen.
Anders als im vorherigen Beispiel, in dem wir ein Schema des erforderlichen Felds in app/code/VendorName/OptionGtin/Setup/InstallSchema.php
haben, müssen wir diese Klasse neu schreiben und eine Verbindung zu unserem benutzerdefinierten Installationsprogramm hinzufügen:
<?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(); } }
Schritt Nr. 2. Neuschreiben der Abhängigkeitsinjektion
Als nächstes schreiben wir "dependency injection" neu und ändern "app/code/VendorName/OptionGtin/etc/di.xml", indem wir unser benutzerdefiniertes Installationsprogramm hinzufügen:
<?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>
Schritt 3. Neue Klassenerstellung
Es ist an der Zeit, eine Klasse zu erstellen, die Schemata der erforderlichen Felder enthält, die sich früher in `app/code/VendorName/OptionGtin/Setup/InstallSchema.php` befanden.
Erstellen Sie die Klasse „app/code/VendorName/OptionGtin/Model/InstallSchema.php“ mit dem folgenden Code:
<?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 []; } }
Schritt 4. Versionserhöhung
Da wir bereits das installierte OptionGtin-Modul mit dem `gtin`-Feld in der `catalog_product_option`-Tabelle haben, ist es erforderlich, seine eine Klasse zu erstellen und die Version der Erweiterung zu erhöhen.
Wir benötigen die Versionserhöhung, um die Installation noch einmal auszuführen und die Installation des Felds „gtin“ für die Tabelle der erforderlichen Vorlagen abzuschließen.
`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(); } }
Erhöhen Sie nun die Version des Moduls:
`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>
Schritt #5. Finale
All die harte Arbeit ist vorbei. Das Einzige, was übrig bleibt, ist, den Installationsbefehl `bin/magento setup:upgrade` auszuführen und zu überprüfen, ob unser Feld in der entsprechenden Vorlagentabelle geschrieben ist.
In unserem Fall ist es die Tabelle „mageworx_optiontemplates_group_option“.
Rekapitulieren
Wir hoffen, dass Sie unsere Artikelserie zur Verbesserung der Anpassbarkeit der erweiterten Produktoptionen nützlich finden.
Jetzt wissen Sie, wie Sie der Vorlage ein benutzerdefiniertes Feld hinzufügen und die Produktoptionsvorlagen in Magento 2 optimal nutzen.
Wenn Ihnen bestimmte Anpassungsmöglichkeiten in der Erweiterung "Erweiterte Produktoptionen" fehlen, senden Sie bitte eine Anfrage an [email protected] . Wir werden unser Bestes tun, um Ihnen zu helfen!