Personalizare avansată a opțiunilor de produs Mageworx
Publicat: 2020-06-09Indiferent 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ță:
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,
- Creați directorul
app/code/VendorName/OptionCustomFieldWeight
, - 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:
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] ! =)