Magento 2: เพิ่มฟิลด์ที่กำหนดเองให้กับเทมเพลตตัวเลือกผลิตภัณฑ์
เผยแพร่แล้ว: 2021-02-04ส่วนขยายตัวเลือกผลิตภัณฑ์ขั้นสูงช่วยให้คุณสามารถจัดการกับตัวเลือกต่างๆ ในหน้าผลิตภัณฑ์ได้ไม่เพียงเท่านั้น แต่ยังสร้างเทมเพลตตัวเลือกต่างๆ และกำหนดจำนวนมากให้กับผลิตภัณฑ์เฉพาะ
บทความนี้ให้แนวทางทีละขั้นตอนในการเพิ่มฟิลด์แบบกำหนดเอง Magento สำหรับตัวเลือกและเทมเพลตตัวเลือกที่สอดคล้องกับแนวทางปฏิบัติและมาตรฐานผลิตภัณฑ์ขั้นสูงของ Advanced Product Options (APO)
สารบัญ
- ฟิลด์กำหนดเองขั้นสูงคืออะไร
- คำแนะนำทีละขั้นตอน
- ก่อนที่เราจะเริ่มต้น
- ขั้นตอนที่ 1. คลาสรีไรท์
- ขั้นตอนที่ # 2 การเขียนการพึ่งพาการฉีดใหม่
- ขั้นตอนที่ #3 การสร้างคลาสใหม่
- ขั้นตอนที่ #4 เพิ่มเวอร์ชัน
- ขั้นตอนที่ #5 ตอนจบ
- สรุป
ฟิลด์กำหนดเองขั้นสูงคืออะไร
ส่วนขยาย Advanced Product Options สร้างขึ้นเพื่อนำเสนอความเป็นไปได้ที่หลากหลาย อย่างไรก็ตาม เนื่องจากทุกธุรกิจมีความแตกต่างและแตกต่าง การปรับแต่งจึงจำเป็นเพื่อเสริมวัตถุประสงค์แบบครั้งเดียว โดยเฉพาะอย่างยิ่งในกรณีที่เทมเพลตตัวเลือกการกำหนดจำนวนมากและฟิลด์ผลิตภัณฑ์ขั้นสูงที่เพิ่มเข้ามาในข้อเสนอของคุณ
คำแนะนำทีละขั้นตอน
ก่อนที่เราจะเริ่มต้น
- อ่านบทความเกี่ยวกับวิธีการเพิ่มฟิลด์ใหม่ในตัวเลือกที่กำหนดเอง Magento มีจำหน่ายแล้วที่นี่
เราจะใช้และแก้ไขตัวอย่างจากโพสต์บล็อกที่กล่าวถึง ซึ่งเราได้เพิ่มฟิลด์ที่กำหนดเองของ Magento 2 ลงใน APO
ขั้นตอนที่ 1. คลาสรีไรท์
ตารางที่สร้างขึ้นสำหรับเทมเพลตจะเก็บแอตทริบิวต์ที่จำเป็นทั้งหมดไว้เป็นตารางวีโอไอพีหลัก
เมื่อเรา Magento เพิ่มฟิลด์แบบกำหนดเองให้กับตัวเลือกผลิตภัณฑ์หรือแอตทริบิวต์สำหรับตัวเลือกหรือค่าของมัน จำเป็นต้องเพิ่มฟิลด์แบบกำหนดเองขั้นสูงนี้ไปยังเทมเพลตทันที เว้นแต่คุณไม่ได้ตั้งใจจะใช้มันในแม่แบบ
เพื่อจุดประสงค์นี้ เราได้สร้างโปรแกรมติดตั้ง `app/code/MageWorx/OptionBase/Model/Installer.php` ที่กำหนดเองในโมดูล Option_Base หลักของเรา
โปรแกรมติดตั้งนี้ช่วยให้คุณเพิ่มช่อง Magento สำหรับตัวเลือก ค่าตัวเลือก และเทมเพลตได้สะดวกยิ่งขึ้น
ต่างจากในตัวอย่างก่อนหน้านี้ที่เราสร้างสคีมาของฟิลด์ที่จำเป็นใน app/code/VendorName/OptionGtin/Setup/InstallSchema.php
เราจะต้องเขียนคลาสนี้ใหม่และเพิ่มการเชื่อมต่อกับตัวติดตั้งแบบกำหนดเองของเรา:
<?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(); } }
ขั้นตอนที่ # 2 การเขียนการพึ่งพาการฉีดใหม่
ต่อไป มาเขียน 'การพึ่งพาการฉีด' ใหม่และเปลี่ยน 'app/code/VendorName/OptionGtin/etc/di.xml' โดยเพิ่มตัวติดตั้งแบบกำหนดเองของเรา:
<?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>
ขั้นตอนที่ #3 การสร้างคลาสใหม่
ได้เวลาสร้างคลาสที่มีสคีมาของฟิลด์ที่จำเป็นซึ่งเคยอยู่ใน `app/code/VendorName/OptionGtin/Setup/InstallSchema.php`
สร้างคลาส `app/code/VendorName/OptionGtin/Model/InstallSchema.php` ด้วยรหัสต่อไปนี้:
<?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 []; } }
ขั้นตอนที่ #4 เพิ่มเวอร์ชัน
เนื่องจากเรามีโมดูล OptionGtin ที่ติดตั้งอยู่แล้วพร้อมช่อง "gtin" ในตาราง "catalog_product_option" จึงจำเป็นต้องสร้างคลาสเดียวและเพิ่มเวอร์ชันของส่วนขยาย
เราจำเป็นต้องเพิ่มเวอร์ชันเพื่อเรียกใช้การติดตั้งอีกครั้ง และทำการติดตั้งช่อง "gtin" ลงในตารางเทมเพลตที่จำเป็นให้เสร็จสิ้น
`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(); } }
ตอนนี้ เพิ่มเวอร์ชันของโมดูล:
`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>
ขั้นตอนที่ #5 ตอนจบ
การทำงานหนักทั้งหมดจบลงแล้ว สิ่งเดียวที่เหลือคือการเรียกใช้คำสั่งการติดตั้ง `bin/magento setup:upgrade` และตรวจสอบว่าฟิลด์ของเราเขียนอยู่ในตารางเทมเพลตที่เกี่ยวข้อง
ในกรณีของเรา มันคือตาราง `mageworx_optiontemplates_group_option`
สรุป
เราหวังว่าคุณจะพบว่าชุดบทความของเราที่เน้นไปที่การเพิ่มความสามารถในการปรับแต่งตัวเลือกผลิตภัณฑ์ขั้นสูงมีประโยชน์
ตอนนี้ คุณรู้วิธีเพิ่มฟิลด์ที่กำหนดเองลงในเทมเพลตและใช้ประโยชน์สูงสุดจากเทมเพลตตัวเลือกผลิตภัณฑ์ใน Magento 2
หากคุณไม่มีความเป็นไปได้ในการปรับแต่งเฉพาะในส่วนขยาย Advanced Product Options โปรดส่งคำขอที่ [email protected] เราจะพยายามอย่างเต็มที่เพื่อช่วยคุณ!