"खाली कार्ट" बटन को मिनिकार्ट में कैसे जोड़ें


10

आप Magento 2 में मिनिकार्ट में "खाली कार्ट" बटन कैसे जोड़ सकते हैं ।

यहां छवि विवरण दर्ज करें

क्या यह लेआउट xml के साथ संभव है?

जवाबों:


15

मैंने आपके प्रश्न के लिए एक उचित मॉड्यूल बनाया है:

हमें कस्टम js घटक और HTML टेम्पलेट की घोषणा करने की आवश्यकता है:

एप्लिकेशन / कोड / विक्रेता / MiniCart / देखें / दृश्यपटल / लेआउट / default.xml

<?xml version="1.0"?>

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="minicart">
            <arguments>
                <argument name="jsLayout" xsi:type="array">
                    <item name="types" xsi:type="array"/>
                    <item name="components" xsi:type="array">
                        <item name="minicart_content" xsi:type="array">
                            <item name="component" xsi:type="string">Vendor_MiniCart/js/view/minicart</item>
                            <item name="config" xsi:type="array">
                                <item name="template" xsi:type="string">Vendor_MiniCart/minicart/content</item>
                            </item>
                        </item>
                    </item>
                </argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

एप्लिकेशन / कोड / विक्रेता / MiniCart / देखें / दृश्यपटल / वेब / js / देखें / minicart.js

   define([
    'jquery',
    'Magento_Checkout/js/view/minicart',
    'Magento_Ui/js/modal/alert',
    'Magento_Ui/js/modal/confirm'
], function ($ ,Component, alert, confirm) {
    'use strict';

    return Component.extend({
        confirmMessage: $.mage.__('Are you sure you would like to remove all items from the shopping cart?'),
        emptyCartUrl: window.checkout.emptyMiniCart,

        emptyCartAction: function (element) {
            var self = this,
                href = self.emptyCartUrl;
            $(element).on('click', function () {
                var el = this;
                confirm({
                    content: self.confirmMessage,
                    actions: {
                        confirm: function () {
                            self._removeAllItems(href, el);
                        },
                        always: function (event) {
                            event.stopImmediatePropagation();
                        }
                    }
                });
            });
        },

        _removeAllItems: function (href, elem) {
            $.ajax({
                url: href,
                type: 'post',
                dataType: 'json',
                beforeSend: function () {
                    $(elem).attr('disabled', 'disabled');
                },
                complete: function () {
                    $(elem).attr('disabled', null);
                }

            }).done(function (response) {
                if (!response.errors) {

                } else {
                    var msg = response.message;

                    if (msg) {
                        alert({
                            content: msg
                        });
                    }
                }
            }).fail(function (error) {
                console.log(JSON.stringify(error));
            });
        }
    });
});

emptyCartUrl: window.checkout.emptyMiniCart,हमें चेकआउट कॉन्फिग से खाली लिंक मिलेगा: app/code/Vendor/MiniCart/Plugin/Cart/ConfigPlugin.php(बाद में घोषित करें)।

हमें मूल फ़ाइल से मिनीकार्ट सामग्री की प्रतिलिपि बनाने की आवश्यकता है vendor/magento/module-checkout/view/frontend/web/template/minicart/content.html:। और फिर, हमारी कस्टम फ़ाइल में, हमें एक्शन टेक्स्ट जोड़ना होगा:

एप्लिकेशन / कोड / विक्रेता / MiniCart / देखें / दृश्यपटल / वेब / टेम्पलेट / minicart / content.html

 <!-- ko if: getCartParam('summary_count') -->
    <div class="actions">
        <div class="secondary">
            <a class="action empty-cart" id="empty-minicart" data-bind="afterRender: emptyCartAction">
                <span><!-- ko i18n: 'Empty Cart Now' --><!-- /ko --></span>
            </a>
        </div>
    </div>
 <!-- /ko -->

डिक्लेयर DI को चेकआउट कॉन्फिगर करने के लिए खाली लिंक जोड़ने के लिए:

एप्लिकेशन / कोड / विक्रेता / MiniCart / etc / दृश्यपटल / di.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Checkout\Block\Cart\Sidebar">
        <plugin name="empty_cart_url" type="Vendor\MiniCart\Plugin\Cart\ConfigPlugin" sortOrder="20" />
    </type>
</config>

एप्लिकेशन / कोड / विक्रेता / MiniCart / प्लगइन / गाड़ी / ConfigPlugin.php

<?php

namespace Vendor\MiniCart\Plugin\Cart;

use Magento\Framework\UrlInterface;

class ConfigPlugin
{
    /**
     * @var UrlInterface
     */
    protected $url;

    /**
     * ConfigPlugin constructor.
     * @param UrlInterface $url
     */
    public function __construct(
        UrlInterface $url
    ) {
        $this->url = $url;
    }

    /**
     * @param \Magento\Checkout\Block\Cart\Sidebar $subject
     * @param array $result
     * @return array
     */
    public function afterGetConfig(
        \Magento\Checkout\Block\Cart\Sidebar $subject,
        array $result
    ) {
        $result['emptyMiniCart'] = $this->url->getUrl('minicart/cart/emptycart');
        return $result;
    }
}

अब, हमें कंट्रोलर बनाने की जरूरत है:

एप्लिकेशन / कोड / विक्रेता / MiniCart / etc / दृश्यपटल / routes.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="standard">
        <route id="minicart" frontName="minicart">
            <module name="Vendor_MiniCart" />
        </route>
    </router>
</config>

एप्लिकेशन / कोड / विक्रेता / MiniCart / नियंत्रक / गाड़ी / EmptyCart.php

<?php

namespace Vendor\MiniCart\Controller\Cart;

use Magento\Framework\Controller\Result\JsonFactory;
use Magento\Framework\Json\Helper\Data;
use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Checkout\Model\Session;
use Psr\Log\LoggerInterface;

class EmptyCart extends Action
{
    /**
     * @var Session
     */
    protected $checkoutSession;

    /**
     * @var JsonFactory
     */
    protected $jsonFactory;

    /**
     * @var Data
     */
    protected $jsonHelper;

    /**
     * @var LoggerInterface
     */
    protected $logger;

    /**
     * @var Magento\Checkout\Model\Cart
     */
    protected $cart;

    /**
     * EmptyCart constructor.
     *
     * @param Context $context
     * @param Session $session
     * @param JsonFactory $jsonFactory
     * @param Data $jsonHelper
     * @param LoggerInterface $logger
     */
    public function __construct(
        Context $context,
        Session $session,
        JsonFactory $jsonFactory,
        Data $jsonHelper,
        LoggerInterface $logger,
        \Magento\Checkout\Model\Cart $cart
    ) {
        $this->checkoutSession = $session;
        $this->jsonFactory = $jsonFactory;
        $this->jsonHelper = $jsonHelper;
        $this->logger = $logger;
        $this->cart = $cart;
        parent::__construct($context);
    }

    /**
     * Ajax execute
     *
     */
    public function execute()
    {
        $response = [
            'errors' => false
        ];

        if ($this->getRequest()->isAjax()) {
            try {
                $this->cart->truncate()->save();
                $response['message'] = __('Empty Cart.');

            } catch (\Exception $e) {
                $response = [
                    'errors' => true,
                    'message' => __('Some thing went wrong.')
                ];
                $this->logger->critical($e);
            }
        } else {
            $response = [
                'errors' => true,
                'message' => __('Need to access via Ajax.')
            ];
        }
        /** @var \Magento\Framework\Controller\Result\Raw $resultRaw */
        $resultJson = $this->jsonFactory->create();
        return $resultJson->setData($response);
    }
}

कार्ट अनुभाग पुनः लोड करने की आवश्यकता:

एप्लिकेशन / कोड / विक्रेता / MiniCart / etc / दृश्यपटल / sections.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Customer:etc/sections.xsd">
    <action name="minicart/cart/empty">
        <section name="cart"/>
    </action>
</config>

बनाने के लिए registration.phpऔर याद रखेंmodule.xml

एप्लिकेशन / कोड / विक्रेता / MiniCart / registration.php

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Vendor_MiniCart',
    __DIR__
);

एप्लिकेशन / कोड / विक्रेता / MiniCart / 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="Vendor_MiniCart" setup_version="1.0.0"/>
</config>

[IMAGES DEMO]

मिनी गाड़ी:

यहां छवि विवरण दर्ज करें

संदेश की पुष्टि:

यहां छवि विवरण दर्ज करें


इस तरह के विस्तृत और पूर्ण समाधान के लिए धन्यवाद! यह काम किया, कोड को छोड़कर खाली गाड़ी को। इसे 2.1.10 पर काम करने के लिए मुझे इसे थोड़ा सा बदलना पड़ा है pastebin.com/sYmhqYRL
Viperet

2
और यहां तक ​​कि थोड़ा छोटा pastebin.com/2tMEMdeA
Viperet

1
@ वाइपरेट मैं आपसे सहमत हूं। का उपयोग करना चाहिए $this->cart->truncate()->save();। मेरे उत्तर को संपादित करने के लिए स्वतंत्र महसूस करें।
खोआ TruongDinh

@KhoaTruongDinh मिनी कार्ट उपरोक्त कोड को लागू करने के बाद केवल "खाली कार्ट नाउ" बटन दिखाती है। कोई भी समाधान?
विशाल

1
मेरा Magento संस्करण 2.2.6 है। क्या आप मेरी मदद कर सकते हैं?
रोहन हापानी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.