Mageworx Erweiterte Produktoptionen Anpassung
Veröffentlicht: 2020-06-09Unabhängig davon, wie robust eine Lösung ist, kann eine Anpassung erforderlich sein, um geschäftsspezifische Ziele oder Präferenzen zu erreichen.
Nach einigen Anfragen, die unser Support-Team bezüglich der Möglichkeit erhalten hat, die Felder „ Weight “ und „WeightType“ aus dem Modal-Fenster in der Erweiterung „Magento 2 Advanced Product Options“ zu übernehmen, stellen wir Ihnen gerne eine kurze Anleitung zur Verfügung, mit der Sie dieses Ziel einfach erreichen können. Lesen Sie weiter für leicht verständliche Richtlinien.
Inhaltsverzeichnis
- Schritt-für-Schritt-Anleitung zur Anpassung erweiterter Produktoptionen
- Schritt 1. Erstellung eines neuen Moduls
- Schritt 2. Klasse Kopieren
- Schritt 3. Klassenänderung
- Schritt 4. Überschreiben der Klasse
- Schritt #5. Neue Modulinstallation
- Endeffekt
Schritt-für-Schritt-Anleitung zur Anpassung erweiterter Produktoptionen
So sehen die Felder „ Gewicht “ und „ Gewichtstyp “ in der Erweiterung „Erweiterte Produktoptionen“ standardmäßig aus:
Um diese Felder außerhalb des modalen Fensters anzuzeigen, müssen Sie diese fünf einfachen Schritte befolgen:
Schritt 1. Erstellung eines neuen Moduls
Beginnen Sie mit der Erstellung eines neuen Moduls: VendorName_OptionCustomFieldWeight
.
Dafür,
- Erstellen Sie das Verzeichnis
app/code/VendorName/OptionCustomFieldWeight
, - Generieren und füllen Sie drei Standarddateien aus, die normalerweise zum Registrieren eines Moduls verwendet werden, dh
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__ );
Schritt 2. Klasse Kopieren
Als nächstes müssen Sie die folgende Klasse finden und kopieren: /app/code/MageWorx/OptionFeatures/Ui/DataProvider/Product/Form/Modifier/Features.php
zu /app/code/VendorName/OptionCustomFieldWight/Ui/DataProvider/Product/Form/Modifier/Features.php
.
Schritt 3. Klassenänderung
Lassen Sie uns nun die kopierte Klasse ändern. Dazu müssen Sie:
a) Ändern Sie den namespace
unserer Klasse in VendorName\OptionCustomFieldWeight\Ui\DataProvider\Product\Form\Modifier;
und fügen Sie die Klassen hinzu, die wir etwas später benötigen. Diese Klassen sind
use MageWorx\OptionFeatures\Model\Config\Source\Product\Options\Weight as ProductOptionsWeight;
und
use Magento\Ui\Component\Form\Element\Input;
Wenn alles richtig gemacht ist, sollte dies wie folgt aussehen:
…. 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) Fügen Sie das MageWorx\OptionFeatures\Model\Config\Source\Product\Options\Weight
unserem Konstruktor hinzu:
…. /** * @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) Suchen Sie die Methode getValueFeaturesFieldsConfig()
:
/** * The custom option value fields config * * @return array */ protected function getValueFeaturesFieldsConfig() { $fields = []; $fields[Helper::KEY_IS_DEFAULT] = $this->getIsDefaultConfig(148); return $fields; }
Fügen Sie dem Array mit benutzerdefinierten Feldern für benutzerdefinierte Optionswerte die Methoden getWeightConfig()
und getWeightTypeConfig()
. Diese Methoden implementieren eine entsprechende Konfiguration. Nun muss die Methode getValueFeaturesFieldsConfig()
wie folgt aussehen:
/** * 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) Lassen Sie uns nach der getValueFeaturesFieldsConfig()
-Methode die getWeightConfig()
und implementieren getWeightTypeConfig()
Methoden der Feldkonfiguration:
/** * 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, ], ], ], ], ]; }
Schritt 4. Überschreiben der Klasse
Es ist höchste Zeit, dass unsere /app/code/VendorName/OptionCustomFieldWight/Ui/DataProvider/Product/Form/Modifier/Features.php
geänderte Klasse anstelle der ursprünglichen /app/code/VendorName/OptionCustomFieldWight/Ui/DataProvider/Product/Form/Modifier/Features.php
. Um dies zu erreichen, müssen wir es in der Abhängigkeitskonfigurationsdatei überschreiben. Erstellen wir dazu die Datei /app/code/VendorName/OptionCustomFieldWeight/etc/adminhtml/di.xml
und fügen den folgenden Code hinzu:
<?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>
Schritt #5. Neue Modulinstallation
Wir sind fast da! Jetzt müssen Sie nur noch unser neues Modul installieren.
Führen Sie zunächst den folgenden Befehl aus:
php bin/magento module:status
Sie sehen eine Liste der aktivierten und deaktivierten Module. Unser neues VendorName_OptionCustomFieldWight
-Modul sollte sich in den deaktivierten Modulen befinden.
Aktivieren wir es:
php bin/magento module:enable VendorName_OptionCustomFieldWeight
Nachdem Sie die Datenbank aktualisiert haben,
php bin/magento setup:upgrade
Sie sehen das folgende Ergebnis:
Herzliche Glückwünsche! Sie haben die Felder „Gewicht“ und „Gewichtstyp “ erfolgreich aus dem Modalfenster entfernt.
Endeffekt
Wir hoffen, dass Ihnen diese Schritt-für-Schritt-Anleitung dabei geholfen hat, die Erweiterung „Erweiterte Produktoptionen“ einfach anzupassen und so Ihre Präferenzen zu erreichen. Sollten Sie Fragen oder Schwierigkeiten haben, können Sie gerne einen Kommentar im Kommentarfeld unten hinterlassen. Ansonsten steht Ihnen unser Support-Team unter [email protected] jederzeit gerne zur Verfügung! =)