Mageworx 高级产品选项定制

已发表: 2020-06-09

无论解决方案多么强大,都可能需要进行定制才能实现特定于业务的目标或偏好。

根据我们的支持团队收到的关于能够从 Magento 2 高级产品选项扩展中的模态窗口中获取权重类型字段的请求,我们很高兴分享有关轻松实现该目标的方法的快速操作指南。 请继续阅读以获取易于遵循的指南。

目录

  • 高级产品选项定制分步指南
    • 步骤1。 新模块创建
    • 第2步。 类复制
    • 步骤#3。 类修改
    • 第4步。 覆盖类
    • 步骤#5。 新模块安装
  • 底线

高级产品选项定制分步指南

这是开箱即用的高级产品选项扩展中的重量重量类型字段的外观:

MageWorx 高级产品选项定制 | MageWorx 博客

要在模式窗口之外显示这些字段,您需要执行以下五个简单步骤:

步骤1。 新模块创建

从创建一个新模块开始: VendorName_OptionCustomFieldWeight

为了那个原因,

  1. 创建app/code/VendorName/OptionCustomFieldWeight目录,
  2. 生成并填写三个通常用于注册模块的标准文件,即composer.jsonetc/module.xmlregistration.php

1) composer.json

 "name": "vendorname/module-optioncustomfieldweight", "description": "N/A", "require": { "magento/framework" : ">=101.0.0 <103", "mageworx/module-optionfeatures" : ">=2.16.1" }, "type": "magento2-module", "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "files": [ "registration.php" ], "psr-4": { "VendorName\\OptionCustomFieldWeight\\": "" } } }

2) 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_OptionCustomFieldWeight" setup_version="2.0.0"> <sequence> <module name="Magento_Catalog"/> <module name="MageWorx_OptionBase"/> <module name="MageWorx_OptionFeatures"/> </sequence> </module> </config>

3) registration.php

 <?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'VendorName_OptionCustomFieldWeight', __DIR__ );

第2步。 类复制

接下来,您需要找到并复制以下类: /app/code/MageWorx/OptionFeatures/Ui/DataProvider/Product/Form/Modifier/Features.php  /app/code/VendorName/OptionCustomFieldWight/Ui/DataProvider/Product/Form/Modifier/Features.php

步骤#3。 类修改

现在,让我们修改复制的类。 为此,您需要:

a) 将我们类的namespace更改为VendorName\OptionCustomFieldWeight\Ui\DataProvider\Product\Form\Modifier;

并添加我们稍后需要的类。 这些类是

use MageWorx\OptionFeatures\Model\Config\Source\Product\Options\Weight as ProductOptionsWeight;

use Magento\Ui\Component\Form\Element\Input;

如果一切都正确完成,这应该如下所示:

 …. namespace VendorName\OptionCustomFieldWeight\Ui\DataProvider\Product\Form\Modifier; use MageWorx\OptionBase\Ui\DataProvider\Product\Form\Modifier\ModifierInterface; use MageWorx\OptionFeatures\Helper\Data as Helper; use Magento\Ui\Component\Form\Element\Hidden; use Magento\Ui\Component\Modal; use Magento\Framework\UrlInterface; use Magento\Framework\App\Request\Http; use MageWorx\OptionFeatures\Model\Config\Source\ShareableLinkMode as SourceConfig; use MageWorx\OptionFeatures\Model\Config\Source\Product\Options\Weight as ProductOptionsWeight; use Magento\Ui\Component\Form\Element\Input; class Features extends AbstractModifier implements ModifierInterface { ….

b) 将MageWorx\OptionFeatures\Model\Config\Source\Product\Options\Weight类对象添加到我们的构造函数中:

 …. /** * @var ProductOptionsWeight */ protected $productOptionsWeight; /** * @param ArrayManager $arrayManager * @param StoreManagerInterface $storeManager * @param LocatorInterface $locator * @param Helper $helper * @param Http $request * @param UrlInterface $urlBuilder * @param SourceConfig $sourceConfig * @param ProductOptionsWeight $productOptionsWeight */ public function __construct( ArrayManager $arrayManager, StoreManagerInterface $storeManager, LocatorInterface $locator, Helper $helper, Http $request, SourceConfig $sourceConfig, UrlInterface $urlBuilder, ProductOptionsWeight $productOptionsWeight ) { $this->arrayManager = $arrayManager; $this->storeManager = $storeManager; $this->locator = $locator; $this->helper = $helper; $this->request = $request; $this->sourceConfig = $sourceConfig; $this->urlBuilder = $urlBuilder; $this->productOptionsWeight = $productOptionsWeight; } …..

c) 找到getValueFeaturesFieldsConfig()方法:

 /** * The custom option value fields config * * @return array */ protected function getValueFeaturesFieldsConfig() { $fields = []; $fields[Helper::KEY_IS_DEFAULT] = $this->getIsDefaultConfig(148); return $fields; }

并将getWeightConfig()getWeightTypeConfig()方法添加到具有自定义选项值的自定义字段的数组中。 这些方法将实现相应的配置。 现在, getValueFeaturesFieldsConfig()方法必须如下所示:

 /** * The custom option value fields config * * @return array */ protected function getValueFeaturesFieldsConfig() { $fields = []; $fields[Helper::KEY_IS_DEFAULT] = $this->getIsDefaultConfig(148); if ($this->helper->isWeightEnabled()) { $fields[Helper::KEY_WEIGHT] = $this->getWeightConfig(34); $fields[Helper::KEY_WEIGHT_TYPE] = $this->getWeightTypeConfig(35); } return $fields; }

d) 在getValueFeaturesFieldsConfig()方法之后,让我们实现getWeightConfig() 字段配置的getWeightTypeConfig()方法:

 /** * Get weight unit name * * @return mixed */ protected function getWeightUnit() { try { $unit = $this->locator->getStore()->getConfig('general/locale/weight_unit'); } catch (\Exception $e) { $unit = $this->storeManager->getStore()->getConfig('general/locale/weight_unit'); } return $unit; } /** * Weight field config * * @param $sortOrder * @return array */ protected function getWeightConfig($sortOrder) { return [ 'arguments' => [ 'data' => [ 'config' => [ 'label' => __('Weight'), 'componentType' => Field::NAME, 'component' => 'Magento_Catalog/js/components/custom-options-component', 'template' => 'Magento_Catalog/form/field', 'formElement' => Input::NAME, 'dataScope' => Helper::KEY_WEIGHT, 'dataType' => Number::NAME, 'validation' => [ 'validate-number' => true, 'validate-zero-or-greater' => true, ], 'sortOrder' => $sortOrder, 'additionalClasses' => 'admin__field-small', 'addbefore' => $this->getWeightUnit(), 'addbeforePool' => $this->productOptionsWeight ->prefixesToOptionArray($this->getWeightUnit()), 'imports' => [ 'disabled' => '!${$.provider}:' . self::DATA_SCOPE_PRODUCT . '.product_has_weight:value', ], ], ], ], ]; } /** * Weight field config * * @param $sortOrder * @return array */ protected function getWeightTypeConfig($sortOrder) { return [ 'arguments' => [ 'data' => [ 'config' => [ 'label' => __('Weight Type'), 'component' => 'MageWorx_OptionFeatures/js/component/custom-options-weight-type', 'componentType' => Field::NAME, 'formElement' => Select::NAME, 'dataScope' => Helper::KEY_WEIGHT_TYPE, 'dataType' => Text::NAME, 'sortOrder' => $sortOrder, 'options' => $this->productOptionsWeight->toOptionArray(), 'imports' => [ 'weightIndex' => Helper::KEY_WEIGHT, ], ], ], ], ]; }

第4步。 覆盖类

现在是我们的/app/code/VendorName/OptionCustomFieldWight/Ui/DataProvider/Product/Form/Modifier/Features.php修改类开始工作的时候了,而不是原来的/app/code/VendorName/OptionCustomFieldWight/Ui/DataProvider/Product/Form/Modifier/Features.php 。 为此,我们需要在依赖项配置文件中覆盖它。 为此,让我们创建/app/code/VendorName/OptionCustomFieldWeight/etc/adminhtml/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"> <preference for="MageWorx\OptionFeatures\Ui\DataProvider\Product\Form\Modifier\Features" type="VendorName\OptionCustomFieldWeight\Ui\DataProvider\Product\Form\Modifier\Features"/> </config>

步骤#5。 新模块安装

我们就快到了! 剩下的就是安装我们的新模块。

首先,运行以下命令:

php bin/magento module:status

您将看到启用和禁用模块的列表。 我们新的VendorName_OptionCustomFieldWight模块应该位于禁用的模块中。

让我们启用它:

php bin/magento module:enable VendorName_OptionCustomFieldWeight

更新数据库后,

php bin/magento setup:upgrade

您将看到以下结果:

MageWorx 高级产品选项定制 | MageWorx 博客

恭喜! 您已成功从模式窗口中删除了重量重量类型字段。

底线

我们希望这个分步指南可以帮助您轻松自定义高级产品选项扩展,从而实现您的偏好。 如果您有任何问题或困难,请随时在下面的评论框中发表评论。 否则,我们的支持团队很乐意在[email protected]提供帮助! =)

使用 Mageworx 预订现场演示