Magento 2:向产品选项模板添加自定义字段
已发表: 2021-02-04高级产品选项扩展允许您不仅处理产品页面上的选项,还可以创建各种选项模板并将它们批量分配给特定产品。
本文为您提供有关按照高级产品选项 (APO) 最佳实践和标准为选项和选项模板添加自定义字段 Magento 的分步指南。
目录
- 什么是高级自定义字段?
- 分步指南
- 在我们开始之前
- 步骤1。 类重写
- 步骤 # 2. 依赖注入重写
- 步骤#3。 新班级创建
- 第4步。 版本增加
- 步骤#5。 压轴
- 回顾
什么是高级自定义字段?
高级产品选项扩展旨在提供多种可能性。 但是,由于每项业务都不同且独特,因此可能需要定制来补充一次性目标。 在向您的产品批量分配选项模板和添加的高级产品字段时尤其如此。
分步指南
在我们开始之前
- 阅读有关如何在自定义选项 Magento 中添加新字段的文章。 它在这里可用。
我们将使用和修改上述博客文章中的示例,其中我们向 APO 添加了一个 Magento 2 自定义字段。
步骤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]提交请求。 我们将尽最大努力帮助您!