Magento 2: เพิ่มฟิลด์ที่กำหนดเองให้กับเทมเพลตตัวเลือกผลิตภัณฑ์

เผยแพร่แล้ว: 2021-02-04

ส่วนขยายตัวเลือกผลิตภัณฑ์ขั้นสูงช่วยให้คุณสามารถจัดการกับตัวเลือกต่างๆ ในหน้าผลิตภัณฑ์ได้ไม่เพียงเท่านั้น แต่ยังสร้างเทมเพลตตัวเลือกต่างๆ และกำหนดจำนวนมากให้กับผลิตภัณฑ์เฉพาะ

บทความนี้ให้แนวทางทีละขั้นตอนในการเพิ่มฟิลด์แบบกำหนดเอง Magento สำหรับตัวเลือกและเทมเพลตตัวเลือกที่สอดคล้องกับแนวทางปฏิบัติและมาตรฐานผลิตภัณฑ์ขั้นสูงของ Advanced Product Options (APO)

สารบัญ

  • ฟิลด์กำหนดเองขั้นสูงคืออะไร
  • คำแนะนำทีละขั้นตอน
    • ก่อนที่เราจะเริ่มต้น
    • ขั้นตอนที่ 1. คลาสรีไรท์
    • ขั้นตอนที่ # 2 การเขียนการพึ่งพาการฉีดใหม่
    • ขั้นตอนที่ #3 การสร้างคลาสใหม่
    • ขั้นตอนที่ #4 เพิ่มเวอร์ชัน
    • ขั้นตอนที่ #5 ตอนจบ
  • สรุป

ฟิลด์กำหนดเองขั้นสูงคืออะไร

ส่วนขยาย Advanced Product Options สร้างขึ้นเพื่อนำเสนอความเป็นไปได้ที่หลากหลาย อย่างไรก็ตาม เนื่องจากทุกธุรกิจมีความแตกต่างและแตกต่าง การปรับแต่งจึงจำเป็นเพื่อเสริมวัตถุประสงค์แบบครั้งเดียว โดยเฉพาะอย่างยิ่งในกรณีที่เทมเพลตตัวเลือกการกำหนดจำนวนมากและฟิลด์ผลิตภัณฑ์ขั้นสูงที่เพิ่มเข้ามาในข้อเสนอของคุณ

คำแนะนำทีละขั้นตอน

ก่อนที่เราจะเริ่มต้น

  • อ่านบทความเกี่ยวกับวิธีการเพิ่มฟิลด์ใหม่ในตัวเลือกที่กำหนดเอง Magento มีจำหน่ายแล้วที่นี่

เราจะใช้และแก้ไขตัวอย่างจากโพสต์บล็อกที่กล่าวถึง ซึ่งเราได้เพิ่มฟิลด์ที่กำหนดเองของ Magento 2 ลงใน APO

ตัวเลือกผลิตภัณฑ์ Magento

ขั้นตอนที่ 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] เราจะพยายามอย่างเต็มที่เพื่อช่วยคุณ!

magento 2 ขึ้นอยู่กับตัวเลือกที่กำหนดเอง

จองการสาธิตสดกับ Mageworx