Вызов функции-члена getAccountNo() на нулевом Magento 2
Я расширяю раздел shipping method
на странице checkout
, и он хорошо отображается.
Но это вызывает ошибку при нажатии кнопки "Далее" после заполнения shipping address
и shipping method
информации на странице checkout
.
Ошибка: Неустранимая ошибка: "Вызов функции-члена getCommentCode() при нулевом значении"
Для этого я написал ниже ниже изображение, показывающее мое пользовательское поле
Когда я отлаживаю $addressInformation->getExtensionAttributes();
, возвращается значение null.
Не могли бы вы, пожалуйста, подсказать мне, где я ошибся?
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>
Вы можете увидеть здесь в качестве примера.