চেকআউট পৃষ্ঠা রিফ্রেশ ইস্যু


14

সবার আগে আমি আমার সমস্যাটি বুঝতে কিছু স্ক্রিন শট দিতে চাই।

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখন আমি এখানে সম্পর্কিত কোড যুক্ত করতে চাই।

ইত্যাদি / ফ্রন্টএন্ড / 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অবজেক্টটি যখন আপনি পরবর্তী বোতামটি ক্লিক করেন তখন কল করা হয় না , কেবল পৃষ্ঠাটি পুনরায় লোড করার সময় তার কলিং । আপনি কি আমাকে এই বিষয়ে সাহায্য করতে পারেন?


আপনার গিথুব উত্স কোডটি সঠিকভাবে কাজ করছে না বলে মনে হচ্ছে! আপনি প্লাগিন ঘোষণা করবেন না Plugin/Checkout/Model/ShippingInformationManagement.php
খোয়া ট্রুংডিনহ

উত্তর:


4

আমি মনে করি আমাদের মোট সংক্ষিপ্তসার পুনরায় লোড করার দরকার নেই। কারণ, নেক্সট বোতামটি ক্লিক করার সময় , ম্যাজেন্টো মোট পরিমাণগুলি V1/carts/mine/shipping-informationপুনরায় গণনা করতে এবং আমাদের টেমপ্লেগুলিতে মোট ডেটা আউটপুট করার জন্য একটি অনুরোধ (এপিআই) তৈরি করবে ।

এখানে চিত্র বর্ণনা লিখুন

সুতরাং, আমরা যদি ফিটি পরীক্ষা করতে চাই, আমাদের প্রতিক্রিয়াটি পরীক্ষা করা উচিত total_segments

অর্থপ্রদানের পদক্ষেপের পাশে ক্লিক করুন , শিপিং তথ্য বিক্রেতা / ম্যাজেন্টো / মডিউল-চেকআউট / ভিউ / ফ্রন্টএন্ড / ওয়েব / জেএস / ভিউ / শিপিং.জেএস সেট করার জন্য একটি অনুরোধ রইল

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

এই অনুরোধটি মোটের জন্য পুনরায় গণনা করবে।

আপনার ক্ষেত্রে, আমাদের এইচটিএমএল টেমপ্লেটে এটির একটি 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প্রতিক্রিয়া থেকে মোট বিভাগটি পরীক্ষা করবে ।

আমি এখানে একটি গিট টান ।

দ্রষ্টব্য: আপনার ফি সঠিকভাবে গণনা করা হয়েছে তা নিশ্চিত করুন। অর্থপ্রদানের পদক্ষেপে, দয়া করে প্রতিক্রিয়াটি দেখুন আমাদের ফি রয়েছে।


এটি সঠিকভাবে কাজ করছে না an আপনি একবার পরীক্ষা করে দেখতে পারেন।
শিবকুমার

প্রকারের ত্রুটি: টোটালস.গেটস্যাগমেন্ট (...) হল নালপ্রাইস = টোটালস.জেটসেজমেন্ট ('ফি') value মান;
শিবকুমার

চেক করা উচিত if (this.totals() && totals.getSegment('fee'))। আমি ভুলে গেছি.
খোোয়া ট্রুংডিনহ

0

আপনার চেকআউট 'পেমেন্ট-সার্ভিস.জেএস' মডেল ক্লাসটি ওভাররাইট করতে হবে । আপনি নিম্নলিখিত পদ্ধতিতে এটি করতে পারেন:

# Kensium / DeliverySign / দৃশ্য / ফ্রন্টএন্ড / requirejs-config.js
var কনফিগারেশন =
    "মানচিত্র": {
        "*":
            'ম্যাজেন্টো_চেকআউট / জেএস / মডেল / শিপিং-সেভ-প্রসেসর / ডিফল্ট': 'ক্যান্সিয়াম_ডেলিভারি সাইন / জেএস / মডেল / শিপিং-সেভ-প্রসেসর / ডিফল্ট',
            'ম্যাজেন্টো_চেকআউট / জেএস / মডেল / পেমেন্ট-পরিষেবা': 'ক্যান্সিয়াম_ডেলিভারি সাইন / জেএস / মডেল / পেমেন্ট-পরিষেবা'
        }
    }
};

সুতরাং কেনসিয়াম / ডেলিভারি সাইন / ভিউ / ফ্রন্টএন্ড / ওয়েব / জেএস / মডেল / পেমেন্ট-সার্ভিস.জেএস তৈরি করুন এবং সামগ্রীগুলি হওয়া উচিত

/ **
 * কপিরাইট © 2016 ম্যাজেন্টো। সমস্ত অধিকার সংরক্ষিত.
 * লাইসেন্সের বিবরণের জন্য কপিআইএনটিএসটিএক্স দেখুন।
 * /
সংজ্ঞায়িত (
    [
        'আন্ডারস্কোর',
        'Magento_Checkout / JS / মডেল / উদ্ধৃতি',
        'Magento_Checkout / JS / মডেল / পেমেন্ট / পদ্ধতি-তালিকা',
        'Magento_Checkout / JS / কর্ম / নির্বাচন পেমেন্ট-পদ্ধতি',
        'Magento_Checkout / JS / মডেল / মোট'
    ],
    ফাংশন (_, উদ্ধৃতি, মেথডলিস্ট, সিলেক্ট পেমেন্টমেথড, মোট) {
        'কঠোর ব্যবহার';
        var freeMethodCode = 'ফ্রি';

        ফিরে
            isFreeAv উপলভ্য: মিথ্যা,
            / **
             * প্রদানের পদ্ধতির তালিকার তালিকা তৈরি করুন
             * @ পরিম {অ্যারে} পদ্ধতি
             * /
            setPaymentMethods: ফাংশন (পদ্ধতি) {
                ভার স্ব = এটি,
                    freeMethod,
                    filteredMethods,
                    methodIsAvailable;

                ফ্রিমেথড = _ফাইন্ড (পদ্ধতি, ফাংশন (পদ্ধতি) {
                    রিটার্ন মেথড.মোথড === ফ্রিমথডকোড;
                });
                this.isFreeAv উপলভ্য = ফ্রিমেথোদ? সত্য মিথ্যা;

                যদি (স্ব.আইসফ্রি উপলভ্য && ফ্রি মেঠোড এবং& quotes.totals ()। গ্র্যান্ড_টোটাল <= 0)
                    মেথডস.স্প্লাইস (0, মেথডেসথ লেন্থ, ফ্রিমেথড);
                    selectPaymentMethod (freeMethod);
                }
                ফিল্টারডমেথডস = _.বিহীন (পদ্ধতি, ফ্রিমেথড);

                যদি (ফিল্টারযুক্ত মেথডস দৈর্ঘ্য === 1) {
                    selectPaymentMethod (filteredMethods [0]);
                } অন্যথায় যদি (quote.paymentMethod ()) {
                    পদ্ধতিIsAv উপলভ্য = পদ্ধতি.সোম (ফাংশন (আইটেম) {
                        রিটার্ন আইটেম.মোথড === কোট.পমেন্টমেন্ট ম্যাথোড ()। পদ্ধতি;
                    });
                    // উপলভ্য না হলে নির্বাচিত অর্থ প্রদানের পদ্ধতিটি আনসেট করুন
                    যদি (! পদ্ধতিIs উপলভ্য) {
                        selectPaymentMethod (নাল);
                    }
                }
                methodList (পদ্ধতি);
                totals.isLoading (সত্য);
                window.checkoutConfig.show_hide_deliverysign_ block = 1;
                (মিথ্যা) totals.isLoading;
            },
            / **
             * উপলব্ধ পেমেন্ট পদ্ধতির তালিকা পান।
             * @ রিটার্নস {অ্যারে
             * /
            getAvailablePaymentMethods: ফাংশন () {
                বিভিন্ন পদ্ধতি = [],
                    স্ব = এই;
                _.ইচ (মেথডলিস্ট (), ফাংশন (পদ্ধতি)
                    যদি (self.isFreeAv উপলভ্য &&) (
                            উদ্ধৃতি.টোটাল ()। গ্র্যান্ড_টোটাল 0 && পদ্ধতি.মোথড! == ফ্রিমথডকোড
                        ) || ! self.isFreeAvailable
                    ) {
                        methods.push (পদ্ধতি);
                    }
                });

                রিটার্ন পদ্ধতি;
            }
        };
    }
);

মুছে ফেলুন পাব / স্ট্যাটিক / ফ্রন্টএন্ড / Magento / Luma / en_US / Kensium_DeliverySign যদি ইতিমধ্যে বিদ্যমান

কমান্ড ডিপ্লয় করে নিম্নলিখিতটি চালান

পিএইচপি বিন / ম্যাজেন্টো সেটআপ: স্ট্যাটিক-সামগ্রী: মোতায়েন করুন


এটি সঠিকভাবে কাজ করছে না an আপনি একবার পরীক্ষা করে দেখতে পারেন।
শিবকুমার

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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.