Magento 2: Dodaj pole niestandardowe do szablonów opcji produktu
Opublikowany: 2021-02-04Rozszerzenie Zaawansowane opcje produktu pozwala nie tylko radzić sobie z opcjami na stronach produktów, ale także tworzyć różne szablony opcji i masowo przypisywać je do określonych produktów.
Ten artykuł zawiera wskazówki krok po kroku dotyczące dodawania pól niestandardowych Magento dla opcji i szablonów opcji zgodnie z najlepszymi praktykami i standardami Advanced Product Options (APO).
Spis treści
- Co to są zaawansowane pola niestandardowe?
- Wytyczne krok po kroku
- Zanim zaczniemy
- Krok 1. Przepisywanie klasy
- Krok # 2. Przepisywanie wstrzykiwania zależności
- Krok 3. Tworzenie nowej klasy
- Krok 4. Zwiększenie wersji
- Krok #5. Finał
- Podsumowanie
Co to są zaawansowane pola niestandardowe?
Rozszerzenie Advanced Product Options zostało stworzone, aby oferować wszechstronne możliwości. Jednak ponieważ każda firma jest inna i odrębna, dostosowanie może być wymagane w celu uzupełnienia jednorazowych celów. Dzieje się tak zwłaszcza w przypadku masowego przypisywania szablonów opcji i dodawania zaawansowanych pól produktowych do Twojej oferty.
Wytyczne krok po kroku
Zanim zaczniemy
- Przeczytaj artykuł o tym, jak dodać nowe pole w opcji niestandardowej Magento. Jest dostępny tutaj.
Wykorzystamy i zmodyfikujemy przykład ze wspomnianego wpisu na blogu, w którym dodaliśmy niestandardowe pole Magento 2 do APO.
Krok 1. Przepisywanie klasy
Tabele tworzone dla szablonów przechowują wszystkie niezbędne atrybuty jako podstawowe tabele Magento.
Kiedy Magento dodamy niestandardowe pole do opcji produktu lub atrybutu dla opcji lub jego wartości, wymagane jest również dodanie tego zaawansowanego niestandardowego pola do szablonów od razu. Chyba że nie zamierzasz go używać w szablonach.
W tym celu stworzyliśmy niestandardowy instalator `app/code/MageWorx/OptionBase/Model/Installer.php` w naszym głównym module Option_Base.
Ten instalator pomaga Magento wygodniej dodawać pola dla opcji, wartości opcji i szablonów.
W przeciwieństwie do poprzedniego przykładu, w którym stworzyliśmy schemat wymaganego pola w app/code/VendorName/OptionGtin/Setup/InstallSchema.php
, będziemy musieli przepisać tę klasę i dodać połączenie do naszego niestandardowego instalatora:
<?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(); } }
Krok # 2. Przepisywanie wstrzykiwania zależności
Następnie przepiszmy `dependency injection` i zmieńmy `app/code/VendorName/OptionGtin/etc/di.xml` poprzez dodanie naszego niestandardowego instalatora:
<?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>
Krok 3. Tworzenie nowej klasy
Czas stworzyć klasę zawierającą schematy wymaganych pól, które kiedyś znajdowały się w `app/code/VendorName/OptionGtin/Setup/InstallSchema.php`.

Utwórz klasę `app/code/VendorName/OptionGtin/Model/InstallSchema.php` z następującym kodem:
<?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 []; } }
Krok 4. Zwiększenie wersji
Ponieważ mamy już zainstalowany moduł OptionGtin z polem `gtin` w tabeli `catalog_product_option`, wymagane jest utworzenie jego jednej klasy i zwiększenie wersji rozszerzenia.
Potrzebujemy zwiększenia wersji, aby ponownie uruchomić instalację i zakończyć instalację pola `gtin` do tabeli wymaganych szablonów.
`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(); } }
Teraz zwiększ wersję modułu:
`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>
Krok #5. Finał
Cała ciężka praca się skończyła. Pozostało tylko uruchomić polecenie instalacji `bin/magento setup:upgrade` i sprawdzić, czy nasze pole jest zapisane w odpowiedniej tabeli szablonów.
W naszym przypadku jest to tabela `mageworx_optiontemplates_group_option`.

Podsumowanie
Mamy nadzieję, że nasza seria artykułów poświęconych zwiększaniu możliwości dostosowywania zaawansowanych opcji produktu okaże się przydatna.
Teraz wiesz, jak dodać niestandardowe pole do szablonu i jak najlepiej wykorzystać szablony opcji produktu w Magento 2.
Jeśli brakuje Ci konkretnych możliwości dostosowywania w rozszerzeniu Zaawansowane opcje produktu, prześlij zgłoszenie na adres [email protected] . Dołożymy wszelkich starań, aby Ci pomóc!