चेकआउट पृष्ठ ताज़ा मुद्दा


14

सबसे पहले मैं अपने मुद्दे को समझने के लिए कुछ स्क्रीन शॉट्स देना चाहता हूं।

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

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

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

अब मैं यहां संबंधित कोड जोड़ना चाहता हूं।

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\Model\CompositeConfigProvider">
            <arguments>
                <argument name="configProviders" xsi:type="array">
                    <item name="checkout_deliverysign_block" xsi:type="object">Kensium\DeliverySign\Model\DeliverySignConfigProvider</item>
                </argument>
            </arguments>
        </type>
    </config>

DeliverySignConfigProvider

<?php
namespace Kensium\DeliverySign\Model;

use Magento\Checkout\Model\ConfigProviderInterface;
use Magento\Store\Model\ScopeInterface;

class DeliverySignConfigProvider implements ConfigProviderInterface
{
    /**
     * @var \Magento\Framework\App\Config\ScopeConfigInterface
     */
    protected $scopeConfiguration;

    protected $checkoutSession;

    protected $logger;

    /**
     * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfiguration
     * @codeCoverageIgnore
     */
    public function __construct(
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfiguration,
        \Magento\Checkout\Model\Session $checkoutSession,
        \Psr\Log\LoggerInterface $logger

    )
    {
        $this->scopeConfiguration = $scopeConfiguration;
        $this->checkoutSession=$checkoutSession;
        $this->logger=$logger;
    }

    /**
     * {@inheritdoc}
     */
    public function getConfig()
    {
        $deliverySignConfig = [];
        $enabled = $this->scopeConfiguration->getValue('deliverysign/deliverysign/status', ScopeInterface::SCOPE_STORE);
        $minimumOrderAmount = $this->scopeConfiguration->getValue('deliverysign/deliverysign/minimum_order_amount', ScopeInterface::SCOPE_STORE);
        $quote=$this->checkoutSession->getQuote();
        $subtotal=$quote->getSubtotal();
        $this->logger->addDebug($subtotal);
        $deliverySignConfig['delivery_sign_amount'] = $this->scopeConfiguration->getValue('deliverysign/deliverysign/deliverysign_amount', ScopeInterface::SCOPE_STORE);
        $deliverySignConfig['show_hide_deliverysign_block'] = ($enabled && ($minimumOrderAmount<$subtotal) && $quote->getFee()) ? true : false;
        $deliverySignConfig['show_hide_deliverysign_shipblock'] = ($enabled && ($minimumOrderAmount<$subtotal)) ? true : false;
        return $deliverySignConfig;
    }
}

अधिक जानकारी के लिए कृपया नीचे देखें

https://github.com/sivajik34/Delivery-Signature-Magento2

DeliverySignConfigProviderजब आप अगले बटन पर क्लिक करते हैं, तो मेरा अवलोकन ऑब्जेक्ट नहीं है , केवल जब आप पृष्ठ को फिर से लोड कर रहे हैं तो इसकी कॉलिंग । क्या आप इस पर मेरी कोई मदद कर सकते हैं?


अपने Github स्रोत कोड को ठीक से काम न करें! आप प्लगइन की घोषणा नहीं करते हैं Plugin/Checkout/Model/ShippingInformationManagement.php
खोआ TruongDinh

जवाबों:


4

मुझे लगता है कि हमें कुल सारांश को पुनः लोड करने की आवश्यकता नहीं है। क्योंकि, नेक्स्ट बटन पर क्लिक करने पर, मैग्नेटो V1/carts/mine/shipping-informationकुल योगों की फिर से गणना करने और हमारे डेटा को टोटल डेटा को आउटपुट करने के लिए एक अनुरोध (एपीआई) करेगा ।

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

इसलिए, यदि हम शुल्क की जांच करना चाहते हैं, तो हमें प्रतिक्रिया की जांच करनी चाहिए total_segments

जब भुगतान कदम के बगल में क्लिक करें , तो शिपिंग सूचना विक्रेता / मैगनेटो / मॉड्यूल-चेकआउट / व्यू / फ्रंटएंड / वेब / जेएस / व्यू / शिपिंग.जेएस सेट करने का अनुरोध है।

             /**
             * Set shipping information handler
             */
            setShippingInformation: function () {
                if (this.validateShippingInformation()) {
                    setShippingInformationAction().done(
                        function () {
                            stepNavigator.next();
                        }
                    );
                }
            }

यह अनुरोध योगों की फिर से गणना करेगा।

आपके मामले में, हमारे HTML टेम्पलेट में, यह एक isDisplayed()फ़ंक्शन होना चाहिए :

Kensium / DeliverySign / देखें / दृश्यपटल / वेब / टेम्पलेट / चेकआउट / गाड़ी / योग / fee.html

<!-- ko if: isDisplayed() -->
<tr class="totals fee excl" data-bind="visible: canVisibleDeliverySignBlock">
    <th class="mark" colspan="1" scope="row" data-bind="text: title"></th>
    <td class="amount">
        <span class="price" data-bind="text: getValue()"></span>
    </td>
</tr>
<!-- /ko -->

isDisplayed()फ़ंक्शन की जाँच करें :

Kensium / DeliverySign / देखें / दृश्यपटल / वेब / js / देखें / चेकआउट / गाड़ी / योग / fee.js

define([
    'ko',
    'uiComponent',
    'Magento_Checkout/js/model/quote',
    'Magento_Catalog/js/price-utils',
    'Magento_Checkout/js/model/totals'

], function (ko, Component, quote, priceUtils, totals) {
    'use strict';
    var show_hide_deliverysign_blockConfig = window.checkoutConfig.show_hide_deliverysign_block;
    var delivery_sign_amount = window.checkoutConfig.delivery_sign_amount;

    return Component.extend({

        totals: quote.getTotals(),
        canVisibleDeliverySignBlock: show_hide_deliverysign_blockConfig,
        getFormattedPrice: ko.observable(priceUtils.formatPrice(delivery_sign_amount, quote.getPriceFormat())),

        isDisplayed: function () {
            return this.getValue() != 0;
        },
        getValue: function() {
            var price = 0;
            if (this.totals() && totals.getSegment('fee')) {
                price = totals.getSegment('fee').value;
            }
            return this.getFormattedPrice(price);
        }
    });
});

यह फ़ंक्शन feeप्रतिक्रिया से योग के सेगमेंट की जाँच करेगा ।

मैं यहां एक गिट पुल बनाता हूं ।

नोट: सुनिश्चित करें कि आपके शुल्क की गणना सही तरीके से की गई है। भुगतान चरण पर, कृपया जांच लें कि प्रतिक्रिया में हमारा शुल्क है।


यह ठीक से काम नहीं कर रहा है। आप एक बार जांच करें।
शिवकुमार

TypeError: totals.getSegment (...) nullprice = totals.getSegment ('शुल्क') है। मूल्य;
शिवकुमार

जांच करनी चाहिए if (this.totals() && totals.getSegment('fee'))। मैं भूल गया।
खोआ TruongDinh

0

आपको चेकआउट 'भुगतान-सेवा.ज' मॉडल वर्ग को अधिलेखित करने की आवश्यकता है । आप इस तरह से कर सकते हैं:

# Kensium / DeliverySign / देखें / दृश्यपटल / requirejs-config.js
var config = {
    "नक्शा": {
        "*": {
            'Magento_Checkout / js / मॉडल / शिपिंग-सेव-प्रोसेसर / डिफ़ॉल्ट': 'Kensium_DeliverySign / js / मॉडल / शिपिंग-सेव-प्रोसेसर / डिफ़ॉल्ट'
            'Magento_Checkout / js / मॉडल / भुगतान-सेवा': 'Kensium_DeliverySign / js / मॉडल / भुगतान-सेवा'
        }
    }
};

तो केंसियम / डिलीवरीसाइन / व्यू / फ्रंटएंड / वेब / जेएस / मॉडल / भुगतान-सेवा.जेज और कंटेंट होना चाहिए

/ **
 * कॉपीराइट © 2016 Magento। सभी अधिकार सुरक्षित।
 * लाइसेंस के विवरण के लिए COPYING.txt देखें।
 * /
परिभाषित करते हैं (
    [
        'अंडरस्कोर',
        'Magento_Checkout / js / मॉडल / उद्धरण',
        'Magento_Checkout / js / मॉडल / भुगतान / विधि-सूची',
        'Magento_Checkout / js / कार्रवाई / चयन भुगतान न-विधि',
        'Magento_Checkout / js / मॉडल / योग'
    ],
    फ़ंक्शन (_, उद्धरण, मेथोडलिस्ट, चयनपुनिशनथ, योग) {
        'सख्त का उपयोग करें';
        var freeMethodCode = 'मुक्त';

        वापसी {
            नि: शुल्क उपलब्ध है:
            / **
             * भुगतान के तरीकों की सूची तैयार करें
             * @ अपार {ऐरे} तरीके
             * /
            setPaymentMethods: फ़ंक्शन (विधियाँ) {
                वर स्व = यह,
                    freeMethod,
                    filteredMethods,
                    methodIsAvailable;

                freeMethod = _.find (विधियाँ, कार्य (विधि))
                    वापसी का तरीका। मेथोड = = फ्रीमेथोडकोड;
                });
                this.isFreeAvailable = freeMethod? सही गलत;

                if (self.isFreeAvailable && freeMethod && quot.totals ()। grand_total <= 0) {
                    methods.splice (0, methods.length, freeMethod);
                    selectPaymentMethod (freeMethod);
                }
                फ़िल्टर्डमेथोड्स = _.without (तरीके, फ्रीमैथोड);

                अगर (फ़िल्टर किए गए मेथोडेसिवेलिटी === 1) {
                    selectPaymentMethod (filteredMethods [0]);
                } और अगर (भाव.पेमेंटमेथोड ()) {
                    MethodIsAvailable = methods.some (फ़ंक्शन (आइटम) {
                        वापसी आइटम ।.method === बोली।पेमेंटमैथोड () विधि;
                    });
                    // उपलब्ध नहीं होने पर चयनित भुगतान पद्धति को परेशान करें
                    अगर (मेथडवाइज़र उपलब्ध है) {
                        selectPaymentMethod (शून्य);
                    }
                }
                methodList (तरीकों);
                totals.isLoading (सही);
                window.checkoutConfig.show_hide_deliverysign_block = 1;
                (गलत) totals.isLoading;
            },
            / **
             * उपलब्ध भुगतान विधियों की सूची प्राप्त करें।
             * @ ग्रेट {ऐरे}
             * /
            getAvailablePaymentMethods: फ़ंक्शन () {
                var तरीके = [],
                    स्व = यह;
                _.each (मेथालिस्ट) (, फंक्शन (विधि) {
                    अगर (self.isFreeAvailable && (
                            quot.totals ()। Grand_total 0 && method.method! == freeMethodCode
                        ) || ! self.isFreeAvailable
                    ) {
                        methods.push (विधि);
                    }
                });

                वापसी के तरीके;
            }
        };
    }
);

हटाएं पब / स्थिर / दृश्यपटल / Magento / लुमा / en_US / Kensium_DeliverySign यदि पहले से ही मौजूद

निम्नलिखित आदेश को चलाएं

php bin / magento सेटअप: स्थिर-सामग्री: परिनियोजित


यह ठीक से काम नहीं कर रहा है। आप एक बार जांच करें।
शिवकुमार

0

आपको डिलीवरी साइन पर एक सत्र का नाम भी बनाना चाहिए। तो यह आपके नियंत्रक के लिए प्रत्येक पोस्ट अनुरोध पर कार्ट परिवर्तन को फिर से लोड करेगा। मूल रूप से, एक्शन नोड नियंत्रक पथ को इंगित करता है और अनुभाग नोड परिभाषित करता है कि किस क्लाइंट-साइड सामग्री को अपडेट किया जाना चाहिए। इस बदलाव को लागू करने के लिए कैश फ्लश किया जाना है। Checkout/etc/frontend/sections.xml उदाहरण के लिए एक sections.xmlमें जाँच करेंetc/frontend

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Customer:etc/sections.xsd">
    <action name="youraction/process/observer">
        <section name="cart"/>
    </action>
</config>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.