So fügen Sie dem Abschnitt für Rechnungsadressen in magento2 ein neues benutzerdefiniertes Feld hinzu


7

Ich habe versucht, ein neues Feld im Abschnitt "Magento2-Rechnungsadresse" hinzuzufügen. Ich bin dem folgenden Link gefolgt, um ein neues Feld im Versandadressblock hinzuzufügen

http://oyenetwork.com/articles/magento2-devliery-date-module-creation-from-scratch/

Ich habe erfolgreich ein neues Feld zum Abschnitt mit der Versandadresse hinzugefügt. Aber auf meiner Website habe ich " Virtuelle Produkte " verwendet. Daher möchte ich mein neues benutzerdefiniertes Feld zum Abrechnungsbereich hinzufügen. Ich habe gerade den Code " LayoutProcessorPlugin.php " wie unten geändert

$ jsLayout ['Komponenten'] ['Kasse'] ['Kinder'] ['Schritte'] ['Kinder'] ['Abrechnungsschritt'] ['Kinder'] ['Zahlung'] ['Kinder'] [ 'Zahlungsliste'] ['Kinder'] ['Lieferdatum']

anstatt

$ jsLayout ['Komponenten'] ['Kasse'] ['Kinder'] ['Schritte'] ['Kinder'] ['Versandschritt'] ['Kinder'] ['Versandadresse'] ['Kinder'] [ 'Versandadresse-Feldset'] ['Kinder'] ['Lieferdatum']

Aber es funktioniert nicht. Wie füge ich mein neues benutzerdefiniertes Feld zum Rechnungsadressblock in magento2 hinzu?

Antworten:


13

Sie müssen ein Plugin in Ihrem benutzerdefinierten Modul erstellen (das, mit dem Sie das benutzerdefinierte Attribut erstellt haben) und über den folgenden Code verfügen:

namespace Package\Name\Plugin\Checkout;

class LayoutProcessor
{
    public function afterProcess(
        \Magento\Checkout\Block\Checkout\LayoutProcessor $subject,
        array $jsLayout
    ) {
        // Loop all payment methods (because billing address is appended to the payments)
        $configuration = $jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']['payment']['children']['payments-list']['children'];
        foreach ($configuration as $paymentGroup => $groupConfig) {
            if (isset($groupConfig['component']) AND $groupConfig['component'] === 'Magento_Checkout/js/view/billing-address') {

                $jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
                ['payment']['children']['payments-list']['children'][$paymentGroup]['children']['form-fields']['children']['custom_attribute_code'] = [
                    'component' => 'Magento_Ui/js/form/element/abstract',
                    'config' => [
                        'template' => 'ui/form/field',
                        'elementTmpl' => 'ui/form/element/input',
                        'id' => 'custom_attribute_id',
                    ],
                    'dataScope' => $groupConfig['dataScopePrefix'] . '.custom_attribute_id',
                    'label' => __('Custom attribute label'),
                    'provider' => 'checkoutProvider',
                    'visible' => true,
                    'validation' => [
                        'required-entry' => true,
                        'min_text_length' => 0,
                    ],
                    'sortOrder' => 300,
                    'id' => 'custom_attribute_id'
                ];
            }
        }

        return $jsLayout;
    }
}

Hoffe das hilft


Wie kann ich danach einen benutzerdefinierten Adressattributwert in der Angebotstabelle für die Rechnungsadresse speichern?
Chirag

dafür solltest du ein Plugin für das Zitat erstellen, um das neue Feld hinzuzufügen
Vlad Patru

Wie füge ich Dropdown und Optionsfeld hinzu?
Manish

@ Manish Ich verstehe die Frage nicht, wofür brauchst du Dropdown / Radiobutton? Höchstwahrscheinlich sollten Sie überprüfen, welche Formularelemente unterstützt werden, und die ändern elementTmploder einen neuen Typ erstellen, falls der gewünschte noch nicht fertig ist. Schauen Sie in der Magento_UIKomponente dafür
Vlad Patru


0

@ Vlad Patru ist absolut richtig.

Ich möchte nur hinzufügen, dass diese Schleife aller Zahlungsmethoden in erhalten wird $configuration. Es ist jedoch zu beachten, dass die Checkout-Konfiguration ab Magento 2.1.4 eine zusätzliche Option zum Anzeigen der Abrechnungsadresse ein (Stores -> Konfiguration -> Checkout -> Checkout-Optionen) enthält . Es gibt zwei mögliche Werte:

Zahlungsmethode - Die Rechnungsadresse wird pro Zahlungsmethode angezeigt

Zahlungsseite - Die Rechnungsadresse wird über den Zahlungsmethoden angezeigt

Daher $configuationwerden alle Zahlungsmethoden nur zurückgegeben, wenn Rechnungsadresse anzeigen gemäß Zahlungsmethode ausgewählt ist .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.