Mageworx Zaawansowane opcje produktu Dostosowywanie
Opublikowany: 2020-06-09Bez względu na to, jak solidne jest rozwiązanie, dostosowanie może być wymagane do osiągnięcia określonych celów lub preferencji biznesowych.
Po kilku prośbach otrzymanych przez nasz zespół pomocy technicznej dotyczących możliwości pobrania pól Weight i WeightType z okna modalnego w rozszerzeniu Zaawansowane opcje produktu Magento 2, z przyjemnością podzielimy się krótkim przewodnikiem na temat sposobów łatwego osiągnięcia tego celu. Czytaj dalej, aby uzyskać łatwe do wykonania wskazówki.
Spis treści
- Przewodnik krok po kroku dotyczący dostosowywania zaawansowanych opcji produktu
- Krok 1. Tworzenie nowego modułu
- Krok 2. Kopiowanie klas
- Krok 3. Modyfikacja klasy
- Krok 4. Zastępowanie klasy
- Krok #5. Instalacja nowego modułu
- Dolna linia
Przewodnik krok po kroku dotyczący dostosowywania zaawansowanych opcji produktu
Oto jak wyglądają pola Typ wagi i wagi w gotowym rozszerzeniu Zaawansowane opcje produktu:
Aby wyświetlić te pola poza oknem modalnym, musisz wykonać pięć prostych kroków:
Krok 1. Tworzenie nowego modułu
Zacznij od stworzenia nowego modułu: VendorName_OptionCustomFieldWeight
.
Za to,
- Utwórz katalog
app/code/VendorName/OptionCustomFieldWeight
, - Wygeneruj i wypełnij trzy standardowe pliki, które są zwykle używane do rejestracji modułu, tj.
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__ );
Krok 2. Kopiowanie klas
Następnie musisz znaleźć i skopiować następującą klasę: /app/code/MageWorx/OptionFeatures/Ui/DataProvider/Product/Form/Modifier/Features.php
do /app/code/VendorName/OptionCustomFieldWight/Ui/DataProvider/Product/Form/Modifier/Features.php
.
Krok 3. Modyfikacja klasy
Teraz zmodyfikujmy skopiowaną klasę. Aby to zrobić, musisz:
a) Zmień namespace
naszej klasy na VendorName\OptionCustomFieldWeight\Ui\DataProvider\Product\Form\Modifier;
i dodaj klasy, które będą nam potrzebne trochę później. Te zajęcia są
use MageWorx\OptionFeatures\Model\Config\Source\Product\Options\Weight as ProductOptionsWeight;
oraz
use Magento\Ui\Component\Form\Element\Input;
Jeśli wszystko zostało zrobione poprawnie, powinno to wyglądać następująco:
…. 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) Dodaj MageWorx\OptionFeatures\Model\Config\Source\Product\Options\Weight
do naszego konstruktora:
…. /** * @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) Znajdź metodę getValueFeaturesFieldsConfig()
:
/** * The custom option value fields config * * @return array */ protected function getValueFeaturesFieldsConfig() { $fields = []; $fields[Helper::KEY_IS_DEFAULT] = $this->getIsDefaultConfig(148); return $fields; }
I dodaj metody getWeightConfig()
i getWeightTypeConfig()
do tablicy z niestandardowymi polami dla niestandardowych wartości opcji. Te metody zaimplementują odpowiednią konfigurację. Teraz metoda getValueFeaturesFieldsConfig()
musi wyglądać następująco:
/** * 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) Po metodzie getValueFeaturesFieldsConfig()
zaimplementujmy getWeightConfig()
i getWeightTypeConfig()
metody konfiguracji pól:
/** * 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, ], ], ], ], ]; }
Krok 4. Zastępowanie klasy
Najwyższy czas, aby nasza zmodyfikowana klasa /app/code/VendorName/OptionCustomFieldWight/Ui/DataProvider/Product/Form/Modifier/Features.php
zaczęła działać zamiast oryginalnego /app/code/VendorName/OptionCustomFieldWight/Ui/DataProvider/Product/Form/Modifier/Features.php
. Aby to osiągnąć, musimy to nadpisać w pliku konfiguracyjnym zależności. W tym celu utwórzmy plik /app/code/VendorName/OptionCustomFieldWeight/etc/adminhtml/di.xml
i dodajmy następujący kod:
<?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>
Krok #5. Instalacja nowego modułu
Jesteśmy prawie na miejscu! Pozostało już tylko zainstalować nasz nowy moduł.
Na początek uruchom następujące polecenie:
php bin/magento module:status
Zobaczysz listę włączonych i wyłączonych modułów. Nasz nowy moduł VendorName_OptionCustomFieldWight
powinien znajdować się w obrębie tych wyłączonych.
Włączmy to:
php bin/magento module:enable VendorName_OptionCustomFieldWeight
Po zaktualizowaniu bazy danych
php bin/magento setup:upgrade
zobaczysz następujący wynik:
Gratulacje! Pomyślnie usunięto pola Waga i Typ wagi z okna modalnego.
Dolna linia
Mamy nadzieję, że ten przewodnik krok po kroku pomógł Ci łatwo dostosować rozszerzenie Zaawansowane opcje produktu, a tym samym osiągnąć Twoje preferencje. Jeśli masz jakieś pytania lub trudności, możesz zostawić komentarz w polu komentarzy poniżej. W przeciwnym razie nasz zespół wsparcia zawsze chętnie pomoże pod adresem [email protected] ! =)