Magento 2: Tambahkan Bidang Kustom ke Templat Opsi Produk
Diterbitkan: 2021-02-04Ekstensi Opsi Produk Lanjutan memungkinkan Anda untuk menangani tidak hanya opsi pada halaman produk tetapi juga untuk membuat berbagai templat opsi dan menetapkannya secara massal ke produk tertentu.
Artikel ini memberi Anda panduan langkah demi langkah tentang menambahkan bidang kustom Magento untuk opsi dan templat opsi sesuai dengan praktik dan standar terbaik Opsi Produk Lanjutan (APO).
Daftar isi
- Apa itu Bidang Kustom Lanjutan?
- Panduan Langkah-demi-Langkah
- Sebelum Kita Mulai
- Langkah 1. Kelas Menulis Ulang
- Langkah # 2. Penulisan Ulang Injeksi Ketergantungan
- Langkah #3. Pembuatan Kelas Baru
- Langkah #4. Peningkatan Versi
- Langkah #5. Akhir
- rekap
Apa itu Bidang Kustom Lanjutan?
Ekstensi Opsi Produk Lanjutan dibuat untuk menawarkan kemungkinan serbaguna. Namun, karena setiap bisnis berbeda dan berbeda, penyesuaian dapat diperlukan untuk melengkapi tujuan satu kali. Ini terutama terjadi ketika templat opsi penugasan massal dan bidang produk lanjutan ditambahkan ke penawaran Anda.
Panduan Langkah-demi-Langkah
Sebelum Kita Mulai
- Baca artikel tentang cara menambahkan bidang baru di opsi khusus, Magento. Ini tersedia di sini.
Kami akan menggunakan dan memodifikasi contoh dari posting blog yang disebutkan, di mana kami menambahkan bidang khusus Magento 2 ke APO.
Langkah 1. Kelas Menulis Ulang
Tabel yang dibuat untuk template menyimpan semua atribut yang diperlukan sebagai tabel inti Magento.
Saat kami Magento menambahkan bidang khusus ke opsi produk atau atribut untuk opsi atau nilainya, bidang khusus lanjutan ini juga harus ditambahkan langsung ke template. Kecuali jika Anda tidak bermaksud menggunakannya dalam template.
Untuk tujuan ini, kami membuat penginstal `app/code/MageWorx/OptionBase/Model/Installer.php` khusus di modul Option_Base utama kami.
Pemasang ini membantu Anda untuk Magento menambahkan bidang untuk opsi, nilai opsi, dan templat dengan lebih mudah.
Tidak seperti pada contoh sebelumnya di mana kami membuat skema bidang yang diperlukan di app/code/VendorName/OptionGtin/Setup/InstallSchema.php
, kami perlu menulis ulang kelas ini dan menambahkan koneksi ke penginstal khusus kami:
<?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(); } }
Langkah # 2. Penulisan Ulang Injeksi Ketergantungan
Selanjutnya, mari kita tulis ulang `dependency injection` dan ubah `app/code/VendorName/OptionGtin/etc/di.xml` dengan menambahkan installer khusus kita:
<?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>
Langkah #3. Pembuatan Kelas Baru
Saatnya membuat kelas yang berisi skema bidang wajib yang dulunya terletak di `app/code/VendorName/OptionGtin/Setup/InstallSchema.php`.
Buat kelas `app/code/VendorName/OptionGtin/Model/InstallSchema.php` dengan kode berikut:
<?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 []; } }
Langkah #4. Peningkatan Versi
Karena kita telah menginstal modul OptionGtin dengan bidang `gtin` di tabel `catalog_product_option`, modul ini diperlukan untuk membuat satu kelasnya dan meningkatkan versi ekstensinya.
Kita memerlukan peningkatan versi untuk menjalankan instalasi sekali lagi dan menyelesaikan instalasi bidang `gtin` ke tabel template yang diperlukan.
`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(); } }
Sekarang, tingkatkan versi modul:
`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>
Langkah #5. Akhir
Semua kerja keras sudah berakhir. Satu-satunya yang tersisa adalah menjalankan perintah instalasi `bin/magento setup:upgrade` dan memeriksa apakah bidang kita ditulis dalam tabel template yang sesuai.
Dalam kasus kami, ini adalah tabel `mageworx_optiontemplates_group_option`.
rekap
Kami harap rangkaian artikel kami yang didedikasikan untuk meningkatkan kemampuan penyesuaian Opsi Produk Lanjutan bermanfaat bagi Anda.
Sekarang, Anda tahu cara menambahkan bidang khusus ke templat dan memanfaatkan templat opsi produk sebaik-baiknya di Magento 2.
Jika Anda melewatkan kemungkinan penyesuaian khusus dalam ekstensi Opsi Produk Lanjutan, kirimkan permintaan di [dilindungi email] . Kami akan melakukan yang terbaik untuk membantu Anda!