проблема обновления страницы оформления заказа


Прежде всего я хочу дать несколько снимков экрана, чтобы понять мою проблему.

enter image description here

enter image description here

enter image description here

Теперь я хочу добавить сюда связанный код.

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>

Поставщик конфигурации deliverysignconfig

<?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 объект не вызывается, когда вы нажимаете кнопку "Далее", только его вызов, когда вы перезагружаете страницу. Кто-нибудь может мне в этом помочь?

Author: sivakumar, 2016-07-09

3 answers

Я думаю, что нам не нужно перезагружать общую сводку. Потому что, когда вы нажмете кнопку Далее, Magento отправит запрос(API) V1/carts/mine/shipping-information, чтобы пересчитать итоги и вывести итоговые данные в наши шаблоны.

enter image description here

Итак, если мы хотим проверить плату, мы должны проверить ответ total_segments

Когда нажимаете Далее на шаг оплаты, появляется запрос на настройку доставки информация vendor/magento/module-checkout/view/frontend/web/js/view/shipping.js

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

Этот запрос пересчитает итоговые значения.

В вашем случае в нашем html-шаблоне он должен иметь функцию isDisplayed():

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 -->

Проверка isDisplayed() функция:

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);
        }
    });
});

Эта функция проверит сегмент итогов fee из ответа.

Я заставляю мерзавца тянуть здесь.

ПРИМЕЧАНИЕ: Убедитесь, что ваш гонорар рассчитан правильно. На этапе оплаты, пожалуйста, проверьте, что в ответе указана наша плата.

 4
Author: Khoa TruongDinh, 2016-07-27 06:22:50

Вам нужно перезаписать проверку 'payment-service.js ' класс модели. Вы можете сделать это следующим образом:

#Kensium/DeliverySign/view/frontend/requirejs-config.js
var config = {
    "map": {
        "*": {
            'Magento_Checkout/js/model/shipping-save-processor/default': 'Kensium_DeliverySign/js/model/shipping-save-processor/default',
            'Magento_Checkout/js/model/payment-service': 'Kensium_DeliverySign/js/model/payment-service'
        }
    }
};

Так что создавайте Kensium/DeliverySign/view/frontend/web/js/model/payment-service.js и содержание должно быть

/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
define(
    [
        'underscore',
        'Magento_Checkout/js/model/quote',
        'Magento_Checkout/js/model/payment/method-list',
        'Magento_Checkout/js/action/select-payment-method',
        'Magento_Checkout/js/model/totals'
    ],
    function (_, quote, methodList, selectPaymentMethod, totals) {
        'use strict';
        var freeMethodCode = 'free';

        return {
            isFreeAvailable: false,
            /**
             * Populate the list of payment methods
             * @param {Array} methods
             */
            setPaymentMethods: function (methods) {
                var self = this,
                    freeMethod,
                    filteredMethods,
                    methodIsAvailable;

                freeMethod = _.find(methods, function (method) {
                    return method.method === freeMethodCode;
                });
                this.isFreeAvailable = freeMethod ? true : false;

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

                if (filteredMethods.length === 1) {
                    selectPaymentMethod(filteredMethods[0]);
                } else if (quote.paymentMethod()) {
                    methodIsAvailable = methods.some(function (item) {
                        return item.method === quote.paymentMethod().method;
                    });
                    //Unset selected payment method if not available
                    if (!methodIsAvailable) {
                        selectPaymentMethod(null);
                    }
                }
                methodList(methods);
                totals.isLoading(true);
                window.checkoutConfig.show_hide_deliverysign_block = 1;
                totals.isLoading(false);
            },
            /**
             * Get the list of available payment methods.
             * @returns {Array}
             */
            getAvailablePaymentMethods: function () {
                var methods = [],
                    self = this;
                _.each(methodList(), function (method) {
                    if (self.isFreeAvailable && (
                            quote.totals().grand_total  0 && method.method !== freeMethodCode
                        ) || !self.isFreeAvailable
                    ) {
                        methods.push(method);
                    }
                });

                return methods;
            }
        };
    }
);

Удалить pub/статический/интерфейс/Magento/luma/en_US/kensium_deliverysign, если он уже существует

Выполните следующую команду развертывания

Настройка Php bin/magento: статический контент: развертывание

 0
Author: Sohel Rana, 2016-07-21 13:53:10

Вы также должны создать имя сеанса на знаке доставки. Таким образом, это приведет к перезагрузке изменений корзины при каждом запросе на отправку вашему контроллеру. По сути, узел действия указывает путь контроллера, а узел раздела определяет, какое содержимое на стороне клиента должно быть обновлено. Для применения этого изменения кэши должны быть очищены. Проверка 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>
 0
Author: Minh, 2016-07-21 16:47:32