Mageworx Zaawansowane opcje produktu Dostosowywanie

Opublikowany: 2020-06-09

Bez 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:

Zaawansowane opcje produktu MageWorx Dostosowywanie | Blog MageWorx

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,

  1. Utwórz katalog app/code/VendorName/OptionCustomFieldWeight ,
  2. 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:

Zaawansowane opcje produktu MageWorx Dostosowywanie | Blog MageWorx

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] ! =)

Zarezerwuj demo na żywo z Mageworx