Вызов функции-члена getAccountNo() на нулевом Magento 2


Я расширяю раздел shipping method на странице checkout, и он хорошо отображается.

Но это вызывает ошибку при нажатии кнопки "Далее" после заполнения shipping address и shipping method информации на странице checkout.

Ошибка: Неустранимая ошибка: "Вызов функции-члена getCommentCode() при нулевом значении"

Для этого я написал ниже ниже изображение, показывающее мое пользовательское поле

enter image description here

Когда я отлаживаю $addressInformation->getExtensionAttributes();, возвращается значение null.

Не могли бы вы, пожалуйста, подсказать мне, где я ошибся?

Author: Bojjaiah, 2016-04-14

1 answers

Таким образом, вам нужно передать значение через js, в этом случае вам нужно перезаписать следующий js Magento/Checkout/view/frontend/web/js/model/shipping-save-processor/default.js

Итак, вы идете следующим путем:

Создать Learning/ABlock/view/frontend/requirejs-config.js


var config = {
    "map": {
        "*": {
            'Magento_Checkout/js/model/shipping-save-processor/default': 'Learning_ABlock/js/model/shipping-save-processor/default'
        }
    }
};

Создать Learning/ABlock/view/frontend/web/js/model/shipping-save-processor/default.js


/*global define,alert*/
define(
    [
        'jquery',
        'ko',
        'Magento_Checkout/js/model/quote',
        'Magento_Checkout/js/model/resource-url-manager',
        'mage/storage',
        'Magento_Checkout/js/model/payment-service',
        'Magento_Checkout/js/model/payment/method-converter',
        'Magento_Checkout/js/model/error-processor',
        'Magento_Checkout/js/model/full-screen-loader',
        'Magento_Checkout/js/action/select-billing-address'
    ],
    function (
        $,
        ko,
        quote,
        resourceUrlManager,
        storage,
        paymentService,
        methodConverter,
        errorProcessor,
        fullScreenLoader,
        selectBillingAddressAction
    ) {
        'use strict';

        return {
            saveShippingInformation: function () {
                var payload;

                if (!quote.billingAddress()) {
                    selectBillingAddressAction(quote.shippingAddress());
                }

                payload = {
                    addressInformation: {
                        shipping_address: quote.shippingAddress(),
                        billing_address: quote.billingAddress(),
                        shipping_method_code: quote.shippingMethod().method_code,
                        shipping_carrier_code: quote.shippingMethod().carrier_code,
                        extension_attributes:{
                            account_no: $('[name="account_no"]').val()
                        }
                    }
                };

                fullScreenLoader.startLoader();

                return storage.post(
                    resourceUrlManager.getUrlForSetShippingInformation(quote),
                    JSON.stringify(payload)
                ).done(
                    function (response) {
                        quote.setTotals(response.totals);
                        paymentService.setPaymentMethods(methodConverter(response.payment_methods));
                        fullScreenLoader.stopLoader();
                    }
                ).fail(
                    function (response) {
                        errorProcessor.process(response);
                        fullScreenLoader.stopLoader();
                    }
                );
            }
        };
    }
);

На самом деле вам нужно передать входное значение атрибуты расширения


extension_attributes:{
                            account_no: $('[name="account_no"]').val()
                        }

Еще кое-что, измените свой Learning/ABlock/view/web/template/checkout/shipping/additional-block.html


<div xmlns="http://www.w3.org/1999/html">
    <div class="field">
        <label class="label" for="account_no">
            </span>
        </label>
        <div class="control">
            <input class="input-text" id="account_no" name="account_no" type="text" />
        </div>
    </div>
</div>

Вы можете увидеть здесь в качестве примера.

 2
Author: Sohel Rana, 2016-04-15 11:22:12