Personalizare avansată a opțiunilor de produs Mageworx

Publicat: 2020-06-09

Indiferent cât de robustă este o soluție, personalizarea poate fi necesară pentru a atinge obiectivele sau preferințele specifice afacerii.

În urma unor solicitări primite de echipa noastră de asistență cu privire la capacitatea de a prelua câmpurile Greutate și Tip Greutate din Fereastra Modal din extensia Opțiuni avansate de produs Magento 2, suntem bucuroși să vă împărtășim un ghid rapid despre mijloacele de a atinge cu ușurință acest obiectiv. Citiți mai departe pentru instrucțiuni ușor de urmat.

Cuprins

  • Ghid pas cu pas pentru personalizarea opțiunilor avansate de produs
    • Pasul 1. Crearea unui nou modul
    • Pasul 2. Copierea clasei
    • Pasul 3. Modificarea clasei
    • Pasul #4. Depășirea clasei
    • Pasul #5. Instalare modul nou
  • Concluzie

Ghid pas cu pas pentru personalizarea opțiunilor avansate de produs

Iată cum arată câmpurile Greutate și Tip de greutate în extensia Opțiuni avansate de produs de pe piață:

Opțiuni avansate de produs MageWorx Personalizare | Blog MageWorx

Pentru a afișa aceste câmpuri în afara ferestrei modale, va trebui să urmați acești cinci pași simpli:

Pasul 1. Crearea unui nou modul

Începeți cu crearea unui modul nou: VendorName_OptionCustomFieldWeight .

Pentru asta,

  1. Creați directorul app/code/VendorName/OptionCustomFieldWeight ,
  2. Generați și completați trei fișiere standard care sunt utilizate în mod normal pentru a înregistra un modul, adică 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__ );

Pasul 2. Copierea clasei

Apoi, trebuie să găsiți și să copiați următoarea clasă: /app/code/MageWorx/OptionFeatures/Ui/DataProvider/Product/Form/Modifier/Features.php   la /app/code/VendorName/OptionCustomFieldWight/Ui/DataProvider/Product/Form/Modifier/Features.php .

Pasul 3. Modificarea clasei

Acum, să modificăm clasa copiată. Pentru a face asta, trebuie să:

a) Schimbați spațiul de namespace al clasei noastre în VendorName\OptionCustomFieldWeight\Ui\DataProvider\Product\Form\Modifier;

și adăugați clasele de care vom avea nevoie puțin mai târziu. Aceste clase sunt

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

și

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

Dacă totul este făcut corect, ar trebui să arate după cum urmează:

 …. 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) Adăugați obiectul MageWorx\OptionFeatures\Model\Config\Source\Product\Options\Weight la constructorul nostru:

 …. /** * @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) Găsiți metoda getValueFeaturesFieldsConfig() :

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

Și adăugați getWeightConfig() și getWeightTypeConfig() la matrice cu câmpuri personalizate pentru valorile opțiunilor personalizate. Aceste metode vor implementa o configurație corespunzătoare. Acum, metoda getValueFeaturesFieldsConfig() trebuie să arate după cum urmează:

 /** * 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) După metoda getValueFeaturesFieldsConfig() , să implementăm getWeightConfig() și getWeightTypeConfig() de configurare a câmpurilor:

 /** * 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, ], ], ], ], ]; }

Pasul #4. Depășirea clasei

Este timpul ca clasa noastră modificată /app/code/VendorName/OptionCustomFieldWight/Ui/DataProvider/Product/Form/Modifier/Features.php să înceapă să funcționeze în locul /app/code/VendorName/OptionCustomFieldWight/Ui/DataProvider/Product/Form/Modifier/Features.php . Pentru a realiza acest lucru, trebuie să o înlocuim în fișierul de configurare a dependențelor. Pentru asta, să creăm fișierul /app/code/VendorName/OptionCustomFieldWeight/etc/adminhtml/di.xml și să adăugăm următorul cod:

 <?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>

Pasul #5. Instalare modul nou

Aproape am ajuns! Singurul lucru rămas este să instalați noul nostru modul.

Pentru început, rulați următoarea comandă:

php bin/magento module:status

Veți vedea o listă de module activate și dezactivate. Noul nostru modul VendorName_OptionCustomFieldWight ar trebui să fie localizat în cadrul celor dezactivate.

Să-l activăm:

php bin/magento module:enable VendorName_OptionCustomFieldWeight

După ce actualizați baza de date,

php bin/magento setup:upgrade

veți vedea următorul rezultat:

Personalizare opțiuni avansate de produs MageWorx | Blog MageWorx

Felicitări! Ați eliminat cu succes câmpurile Greutate și Tip de greutate din fereastra modală.

Concluzie

Sperăm că acest ghid pas cu pas v-a ajutat să personalizați cu ușurință extensia Opțiuni avansate de produs și astfel să vă atingeți preferințele. Dacă aveți întrebări sau dificultăți, nu ezitați să lăsați un comentariu în caseta de comentarii de mai jos. În caz contrar, echipa noastră de asistență este întotdeauna bucuroasă să vă asiste la [email protected] ! =)

Rezervați o demonstrație live cu Mageworx