通过在购物车页面中使用AJAX添加数量更新选项,有助于改善Magento 2网站的用户体验。

按照以下简单步骤在Magento 2中创建新扩展,来添加AJAX功能以更新购物车页面中的商品数量。

步骤1:

在以下文件路径中创建一个名为registration.php的新php文件,

文件路径:app/code/Alwayly/AutoUpdateCartItemQty/registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Alwayly_AutoUpdateCartItemQty',
    __DIR__
);

第2步:

在以下文件路径中创建名为module.xml的xml文件以定义新模块,

文件路径:app/code/Alwayly/AutoUpdateCartItemQty/etc/module.xml

在这里,我们必须指定我们的自定义模块的名称,如Alwayly_AutoUpdateCartItemQty和它的安装版本如下,

<?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="Alwayly_AutoUpdateCartItemQty" setup_version="1.0.0">
    </module>
</config>

第3步:

在以下文件路径中创建名为checkout_cart_index.xml的xml文件,

文件路径:app/code/Alwayly/AutoUpdateCartItemQty/view/frontend/layout/checkout_cart_index.xml

在此文件中,我们必须指定自定义模块的模板文件,如下所示,

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
     <body>
          <referenceContainer name="content">
               <block class="Magento\Framework\View\Element\Template" name="auto.update.cart.item.qty" template="Alwayly_AutoUpdateCartItemQty::script.phtml" after="-"/>
          </referenceContainer>
     </body>
</page>

第4步:

在以下文件路径中创建名为script.phtml的phtml文件,

文件路径:app/code/Alwayly/AutoUpdateCartItemQty/view/frontend/templates/script.phtml

以下是script.phtml文件的代码,该文件将用于在结帐页面加载我们的自定义模块js文件,

<script>
    require ([
        'jquery'
    ],
    function ($) {
        $(window).on("load", function () {
            require([          
               'Alwayly_AutoUpdateCartItemQty/js/cartItemQtyUpdate'
            ]);
        });
    });
</script>

第5步:

最后,在以下文件路径中创建名为cartItemQtyUpdate.js的JS文件,

文件路径:app/code/Alwayly/AutoUpdateCartItemQty/view/frontend/web/js/cartItemQtyUpdate.js

在此文件中,我们必须添加以下代码,用于在更改qty字段值时使用ajax更新购物车的商品数量,

define([
    'jquery',
    'Magento_Checkout/js/action/get-totals',
    'Magento_Customer/js/customer-data'
], function ($, getTotalsAction, customerData) {
 
    $(document).ready(function(){
        $(document).on('change', 'input[name$="[qty]"]', function(){
            var form = $('form#form-validate');
            $.ajax({
                url: form.attr('action'),
                data: form.serialize(),
                showLoader: true,
                success: function (res) {
                    var parsedResponse = $.parseHTML(res);
                    var result = $(parsedResponse).find("#form-validate");
                    var sections = ['cart'];
 
                    $("#form-validate").replaceWith(result);
 
                    /* This is for reloading the minicart */
                    customerData.reload(sections, true);
 
                    /* This is for reloading the totals summary  */
                    var deferred = $.Deferred();
                    getTotalsAction([], deferred);
                },
                error: function (xhr, status, error) {
                    var err = eval("(" + xhr.responseText + ")");
                    console.log(err.Message);
                }
            });
        });
    });
});

完成上述步骤后,在Magento 2安装的根目录下运行以下SSH命令,

php bin/magento setup:upgrade

然后,清除所有Magento缓存并检查购物车页面中的数量更新选项。

Note:我们已经使用Luma主题在Magento 2.3上测试了上述代码。