Mageworx 高度な製品オプションのカスタマイズ
公開: 2020-06-09ソリューションがどれほど堅牢であっても、ビジネス固有の目的や好みを達成するためにカスタマイズが必要になる場合があります。
Magento 2 Advanced Product Options 拡張機能のモーダル ウィンドウからWeightフィールドとWeightTypeフィールドを取得する機能に関して、サポート チームが受け取ったいくつかのリクエストを受けて、その目的を簡単に達成するための手段に関する簡単なハウツー ガイドを共有できることをうれしく思います。 わかりやすいガイドラインについては、以下をお読みください。
目次
- 高度な製品オプションのカスタマイズに関するステップバイステップ ガイド
- ステップ1。 新しいモジュールの作成
- ステップ2。 クラスのコピー
- ステップ#3。 クラスの変更
- ステップ#4。 クラスのオーバーライド
- ステップ#5。 新しいモジュールのインストール
- 結論
高度な製品オプションのカスタマイズに関するステップバイステップ ガイド
これは、すぐに使用できる Advanced Product Options 拡張機能でWeight & Weight Typeフィールドがどのように見えるかです:
これらのフィールドをモーダル ウィンドウの外に表示するには、次の 5 つの簡単な手順に従う必要があります。
ステップ1。 新しいモジュールの作成
新しいモジュールVendorName_OptionCustomFieldWeight
の作成から始めます。
そのために、
-
app/code/VendorName/OptionCustomFieldWeight
ディレクトリを作成し、 - モジュールの登録に通常使用される 3 つの標準ファイル (
composer.json
、etc/module.xml
、registration.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 の代わりに、 /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/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
次の結果が表示されます。
おめでとう! モーダル ウィンドウからWeight & Weight Typeフィールドを正常に削除しました。
結論
このステップバイステップ ガイドが、Advanced Product Options 拡張機能を簡単にカスタマイズして、好みを実現するのに役立つことを願っています。 質問や問題がある場合は、下のコメント ボックスにコメントを残してください。 それ以外の場合は、サポート チームが[email protected]でいつでも喜んでお手伝いいたします。 =)