masalah penyegaran laman checkout

14

Pertama-tama saya ingin memberikan tangkapan layar untuk memahami masalah saya.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Sekarang saya ingin menambahkan kode terkait di sini.

etc / frontend / 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;
    }
}

Silakan temukan di bawah untuk detail lebih lanjut

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

Pengamatan saya adalah DeliverySignConfigProviderobjek tidak memanggil saat Anda mengklik tombol berikutnya , hanya pemanggilannya saat Anda memuat ulang halaman . Adakah yang bisa membantu saya dalam hal ini?

sivakumar
sumber
Tampaknya kode sumber Github Anda tidak berfungsi dengan baik! Anda tidak mendeklarasikan Plugin Plugin/Checkout/Model/ShippingInformationManagement.php.
Khoa TruongDinh

Jawaban:

4

Saya pikir kita tidak perlu memuat ulang ringkasan total. Karena, ketika mengklik tombol Next , Magento akan membuat permintaan (API) V1/carts/mine/shipping-informationuntuk menghitung ulang total dan menampilkan total data ke templat kami.

masukkan deskripsi gambar di sini

Jadi, jika kita ingin memeriksa biayanya, kita harus memeriksa jawabannya total_segments

Ketika mengklik Di sebelah langkah pembayaran, ada permintaan untuk mengatur vendor informasi pengiriman / magento / module-checkout / view / frontend / web / js / view / shipping.js

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

Permintaan ini akan menghitung ulang totalnya.

Dalam kasus Anda, dalam templat html kami, itu harus memiliki isDisplayed()fungsi:

Kensium / DeliverySign / view / frontend / web / template / checkout / cart / total / 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 -->

Periksa isDisplayed()fungsi:

Kensium / DeliverySign / view / frontend / web / js / view / checkout / keranjang / total / 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);
        }
    });
});

Fungsi ini akan memeriksa total feesegmen dari respons.

Saya membuat git menarik di sini .

CATATAN: Pastikan biaya Anda dihitung dengan benar. Pada langkah pembayaran, harap periksa respons sudah termasuk biaya kami.

Khoa TruongDinh
sumber
ini tidak berfungsi sebagaimana mestinya. Anda dapat memeriksa sekali.
sivakumar
TypeError: totals.getSegment (...) adalah nullprice = totals.getSegment ('fee'). Value;
sivakumar
Harus memeriksa if (this.totals() && totals.getSegment('fee')). Saya lupa.
Khoa TruongDinh
0

Anda perlu menimpa checkout kelas model 'payment-service.js' . Anda dapat melakukan ini dengan cara berikut:

# Kensium / DeliverySign / view / frontend / requireejs-config.js
var config = {
    "map": {
        "*": {
            'Magento_Checkout / js / model / pengiriman-save-processor / default': 'Kensium_DeliverySign / js / model / pengiriman-save-processor / default',
            'Magento_Checkout / js / model / layanan pembayaran': 'Kensium_DeliverySign / js / model / layanan pembayaran'
        }
    }
};

Jadi buat Kensium / DeliverySign / view / frontend / web / js / model / payment-service.js dan konten harus

/ **
 * Hak Cipta © 2016 Magento. Seluruh hak cipta.
 * Lihat COPYING.txt untuk perincian lisensi.
 * /
menetapkan(
    [
        'menggarisbawahi',
        'Magento_Checkout / js / model / quote',
        'Magento_Checkout / js / model / pembayaran / daftar-metode',
        'Magento_Checkout / js / action / select-payment-method',
        'Magento_Checkout / js / model / totals'
    ],
    function (_, quote, methodList, selectPaymentMethod, total) {
        'gunakan yang ketat';
        var freeMethodCode = 'gratis';

        kembali {
            isFreeTersedia: false,
            / **
             * Mengisi daftar metode pembayaran
             * @param {Array} metode
             * /
            setPaymentMethods: function (methods) {
                var self = ini,
                    gratisMetode,
                    Metode yang difilter,
                    methodIsTersedia;

                freeMethod = _.find (metode, fungsi (metode) {
                    return method.method === freeMethodCode;
                });
                this.isFreeAvailable = gratisMetode? benar salah;

                if (self.isFreeAvailable && freeMethod && quote.totals (). grand_total <= 0) {
                    methods.splice (0, methods.length, freeMethod);
                    selectPaymentMethod (freeMethod);
                }
                filteredMethods = _.without (metode, freeMethod);

                if (filteredMethods.length === 1) {
                    selectPaymentMethod (filteredMethods [0]);
                } lain jika (quote.paymentMethod ()) {
                    methodIsAvailable = methods.some (fungsi (item) {
                        return item.method === quote.paymentMethod (). metode;
                    });
                    // Hapus pengaturan metode pembayaran yang dipilih jika tidak tersedia
                    if (! methodIsAvailable) {
                        selectPaymentMethod (null);
                    }
                }
                methodList (metode);
                totals.isLoading (true);
                window.checkoutConfig.show_hide_deliverysign_block = 1;
                totals.isLoading (false);
            },
            / **
             * Dapatkan daftar metode pembayaran yang tersedia.
             * @returns {Array}
             * /
            getAvailablePaymentMethods: function () {
                metode var = [],
                    diri = ini;
                _.each (methodList (), fungsi (metode) {
                    if (self.isFree Tersedia && (
                            quote.totals (). grand_total 0 && method.method! == freeMethodCode
                        ) || ! self.isFree Tersedia
                    ) {
                        methods.push (metode);
                    }
                });

                metode pengembalian;
            }
        };
    }
);

Hapus pub / static / frontend / Magento / luma / en_US / Kensium_DeliverySign jika sudah ada

Jalankan perintah penyebaran berikut

setup php bin / magento: static-content: deploy

Sohel Rana
sumber
ini tidak berfungsi sebagaimana mestinya. Anda dapat memeriksa sekali.
sivakumar
0

Anda juga harus membuat nama sesi pada Tanda Pengiriman. Jadi ini akan memuat perubahan keranjang pada setiap permintaan POST ke controller Anda. Pada dasarnya, simpul tindakan menunjukkan jalur pengontrol dan simpul bagian menentukan konten sisi klien mana yang harus diperbarui. Tembolok harus dibilas agar perubahan ini berlaku. Periksa Checkout/etc/frontend/sections.xml Misalnya a sections.xmlinetc/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>
Minh
sumber