Magento 2:向產品選項模板添加自定義字段

已發表: 2021-02-04

高級產品選項擴展允許您不僅處理產品頁面上的選項,還可以創建各種選項模板並將它們批量分配給特定產品。

本文為您提供有關按照高級產品選項 (APO) 最佳實踐和標準為選項和選項模板添加自定義字段 Magento 的分步指南。

目錄

  • 什麼是高級自定義字段?
  • 分步指南
    • 在我們開始之前
    • 步驟1。 類重寫
    • 步驟 # 2. 依賴注入重寫
    • 步驟#3。 新班級創建
    • 第4步。 版本增加
    • 步驟#5。 壓軸
  • 回顧

什麼是高級自定義字段?

高級產品選項擴展旨在提供多種可能性。 但是,由於每項業務都不同且獨特,因此可能需要定制來補充一次性目標。 在向您的產品批量分配選項模板和添加的高級產品字段時尤其如此。

分步指南

在我們開始之前

  • 閱讀有關如何在自定義選項 Magento 中添加新字段的文章。 它在這裡可用。

我們將使用和修改上述博客文章中的示例,其中我們向 APO 添加了一個 Magento 2 自定義字段。

Magento 產品選項

步驟1。 類重寫

為模板創建的表將所有必要的屬性存儲為核心 Magento 表。

當我們 Magento 將自定義字段添加到產品選項或選項或其值的屬性時,還需要立即將此高級自定義字段添加到模板中。 除非您不打算在模板中使用它。

為此,我們在我們的主 Option_Base 模塊中創建了自定義的 `app/code/MageWorx/OptionBase/Model/Installer.php` 安裝程序。

此安裝程序可幫助您更方便地為 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. 依賴注入重寫

接下來,讓我們重寫 `dependency injection` 並通過添加我們的自定義安裝程序來更改 `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步。 版本增加

由於我們已經在 `catalog_product_option` 表中安裝了帶有 `gtin` 字段的 OptionGtin 模塊,因此需要創建一個類並增加擴展的版本。

我們需要增加版本以再次運行安裝並完成 `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 中的產品選項模板。

如果您在高級產品選項擴展中缺少特定的定制可能性,請在[email protected]提交請求。 我們將盡最大努力幫助您!

magento 2 依賴的自定義選項

使用 Mageworx 預訂現場演示