vấn đề làm mới trang thanh toán


14

Trước hết tôi muốn đưa ra một số ảnh chụp màn hình để hiểu vấn đề của tôi.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Bây giờ tôi muốn thêm mã liên quan ở đây.

vv / 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;
    }
}

Vui lòng tìm bên dưới để biết thêm chi tiết

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

Quan sát của tôi là DeliverySignConfigProviderđối tượng không gọi khi bạn nhấp vào nút tiếp theo , chỉ gọi nó khi bạn đang tải lại trang . Bạn có thể giúp tôi về điều này?


Có vẻ như mã nguồn Github của bạn không hoạt động đúng! Bạn không khai báo Plugin Plugin/Checkout/Model/ShippingInformationManagement.php.
Khoa TruongDinh

Câu trả lời:


4

Tôi nghĩ rằng chúng ta không cần phải tải lại tổng kết. Bởi vì, khi nhấp vào nút Tiếp theo , Magento sẽ đưa ra yêu cầu (API) V1/carts/mine/shipping-informationđể tính lại tổng số và xuất dữ liệu tổng cho các mẫu của chúng tôi.

nhập mô tả hình ảnh ở đây

Vì vậy, nếu chúng ta muốn kiểm tra phí, chúng ta nên kiểm tra phản hồi total_segments

Khi bấm vào Bên cạnh bước thanh toán, có một yêu cầu đặt nhà cung cấp thông tin vận chuyển / magento / mô-đun kiểm tra / xem / frontend / web / js / view / Shipping.js

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

Yêu cầu này sẽ tính lại tổng số.

Trong trường hợp của bạn, trong mẫu html của chúng tôi, nó sẽ có một isDisplayed()hàm:

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

Kiểm tra isDisplayed()chức năng:

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

Hàm này sẽ kiểm tra tổng số fee phân đoạn từ phản hồi.

Tôi làm một cái kéo ở đây .

LƯU Ý: Đảm bảo phí của bạn được tính đúng cách. Trên bước thanh toán, vui lòng kiểm tra phản hồi có phí của chúng tôi.


Nó không hoạt động đúng. Bạn có thể kiểm tra một lần.
sivakumar

LoạiError: totals.getSegment (...) là nullprice = totals.getSegment ('phí'). Value;
sivakumar

Nên kiểm tra if (this.totals() && totals.getSegment('fee')) . Tôi quên mất.
Khoa TruongDinh

0

Bạn cần ghi đè kiểm tra lớp mô hình 'Payment-service.js' thanh toán . Bạn có thể làm theo cách sau:

# Kensium / DeliverySign / view / frontend / allowjs-config.js
cấu hình var = {
    "bản đồ": {
        "*": {
            'Magento_Checkout / js / model / Shipping-save-bộ xử lý / mặc định': 'Kensium_DeliverySign / js / model / Shipping-save-bộ xử lý / mặc định',
            'Magento_Checkout / js / model / dịch vụ thanh toán': 'Kensium_DeliverySign / js / model / dịch vụ thanh toán'
        }
    }
};

Vì vậy, tạo ra nội dung của Zackium / DeliverySign / view / frontend / web / js / model / Payment-service.js và nội dung

/ **
 * Bản quyền © 2016 Magento. Đã đăng ký Bản quyền.
 * Xem COPYING.txt để biết chi tiết giấy phép.
 * /
định nghĩa(
    [
        'gạch dưới',
        'Magento_Checkout / js / model / quote',
        'Magento_Checkout / js / mô hình / thanh toán / danh sách phương thức',
        'Magento_Checkout / js / hành động / chọn phương thức thanh toán',
        'Magento_Checkout / js / model / tổng số'
    ],
    hàm (_, quote, methodList, selectPaymentMethod, totals) {
        'Sử dụng nghiêm ngặt';
        var freeMethodCode = 'miễn phí';

        trở về {
            isFreeAv Available: sai,
            / **
             * Điền vào danh sách các phương thức thanh toán
             Các phương thức * @param {Array}
             * /
            setPaymentMethods: function (phương thức) {
                var tự = cái này,
                    miễn phí,
                    đã lọcMethods,
                    phương thức Có sẵn;

                freeMethod = _.find (phương thức, hàm (phương thức) {
                    phương thức trả về.method === freeMethodCode;
                });
                this .isFreeAv Available = freeMethod? đúng sai;

                if (self.isFreeAv Available && freeMethod && quote.totals (). grand_total <= 0) {
                    phương thức.splice (0, phương thức.length, freeMethod);
                    chọnPaymentMethod (freeMethod);
                }
                filteredMethods = _.without (phương thức, freeMethod);

                if (được lọcMethods.length === 1) {
                    selectPaymentMethod (filteredMethods [0]);
                } if if (quote.paymentMethod ()) {
                    methodIsAv Available = method.some (function (item) {
                        return item.method === quote.paymentMethod (). phương thức;
                    });
                    // Bỏ đặt phương thức thanh toán đã chọn nếu không khả dụng
                    if (! methodIsAv Available) {
                        chọnPaymentMethod (null);
                    }
                }
                phương thứcList (phương thức);
                totals.isLoading (đúng);
                window.checkoutConfig.show_ leather_deliverysign_block = 1;
                totals.isLoading (sai);
            },
            / **
             * Lấy danh sách các phương thức thanh toán có sẵn.
             * @returns {Mảng}
             * /
            getAv AvailablePaymentMethods: function () {
                phương thức var = [],
                    tự = cái này;
                _.each (methodList (), function (phương thức) {
                    if (self.isFreeAv Available && (
                            quote.totals (). grand_total 0 && method.method! == freeMethodCode
                        ) || ! self.isFreeAv Available
                    ) {
                        phương thức.push (phương thức);
                    }
                });

                phương thức trả về;
            }
        };
    }
);

Xóa pub / static / frontend / Magento / luma / en_US / Kensium_DeliverySign nếu đã tồn tại

Chạy theo lệnh triển khai

Thiết lập php bin / magento: static-content: triển khai


Nó không hoạt động đúng. Bạn có thể kiểm tra một lần.
sivakumar

0

Bạn cũng nên tạo một tên phiên trên Dấu hiệu giao hàng. Vì vậy, điều này sẽ tải lại các thay đổi giỏ hàng trên mỗi yêu cầu POST cho bộ điều khiển của bạn. Về cơ bản, nút hành động chỉ ra đường dẫn của bộ điều khiển và nút phần xác định nội dung phía máy khách nào sẽ được cập nhật. Bộ nhớ cache phải được xóa để thay đổi này được áp dụng. Kiểm tra Checkout/etc/frontend/sections.xml ví dụ a sections.xmltrongetc/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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.