En primer lugar, quiero dar algunas capturas de pantalla para comprender mi problema.
Ahora quiero agregar código relacionado aquí.
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;
}
}
A continuación encontrará más detalles.
https://github.com/sivajik34/Delivery-Signature-Magento2
Mi observación es que el DeliverySignConfigProviderobjeto no llama cuando haces clic en el botón Siguiente , solo llama cuando vuelves a cargar la página . ¿Alguien me puede ayudar en esto?
magento2
checkout
knockoutjs
sivakumar
fuente
fuente




Plugin/Checkout/Model/ShippingInformationManagement.php.Respuestas:
Creo que no necesitamos volver a cargar el resumen total. Porque, cuando haga clic en el botón Siguiente , Magento realizará una solicitud (API)
V1/carts/mine/shipping-informationpara volver a calcular los totales y enviar los datos de totales a nuestras plantillas.Entonces, si queremos verificar la tarifa, debemos verificar la respuesta
total_segmentsCuando haga clic en Al lado del paso de pago, hay una solicitud para configurar la información de envío vendor / magento / module-checkout / view / frontend / web / js / view / shipping.js
Esta solicitud volverá a calcular los totales.
En su caso, en nuestra plantilla html, debería tener una
isDisplayed()función:Kensium / DeliverySign / view / frontend / web / template / checkout / cart / totals / fee.html
Comprobar
isDisplayed()función:Kensium / DeliverySign / view / frontend / web / js / view / checkout / cart / totals / fee.js
Esta función verificará el
feesegmento de totales de la respuesta.Hago un tirón aquí .
NOTA: Asegúrese de que su tarifa se calcule correctamente. En el paso de pago, verifique que la respuesta tenga nuestra tarifa.
fuente
if (this.totals() && totals.getSegment('fee')). Olvidé.Debe sobrescribir la clase de modelo de pago 'service-service.js' . Puede hacer esto de la siguiente manera:
# Kensium / DeliverySign / view / frontend / requirejs-config.js var config = { "mapa": { "*": { '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' } } };Así que cree Kensium / DeliverySign / view / frontend / web / js / model / payment-service.js y el contenido debe ser
/ ** * Copyright © 2016 Magento. Todos los derechos reservados. * Ver COPYING.txt para detalles de la licencia. * / definir( [ 'guion bajo', '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, totales) { 'uso estricto'; var freeMethodCode = 'free'; regreso { isFreeAvailable: falso, / ** * Rellene la lista de métodos de pago * @param {Array} métodos * / setPaymentMethods: function (métodos) { var self = this, freeMethod, Métodos filtrados, methodIsAvailable; freeMethod = _.find (métodos, función (método) { return method.method === freeMethodCode; }); this.isFreeAvailable = freeMethod? verdadero Falso; if (self.isFreeAvailable && freeMethod && quote.totals (). grand_total <= 0) { métodos.splice (0, métodos.longitud, método libre); selectPaymentMethod (freeMethod); } filterMethods = _.without (métodos, freeMethod); if (filterMethods.length === 1) { selectPaymentMethod (filterMethods [0]); } else if (quote.paymentMethod ()) { methodIsAvailable = method.some (function (item) { return item.method === quote.paymentMethod (). method; }); // Desarmar el método de pago seleccionado si no está disponible if (! methodIsAvailable) { selectPaymentMethod (nulo); } } lista de métodos (métodos); totals.isLoading (verdadero); window.checkoutConfig.show_hide_deliverysign_block = 1; totals.isLoading (falso); }, / ** * Obtenga la lista de métodos de pago disponibles. * @returns {Array} * / getAvailablePaymentMethods: function () { métodos var = [], auto = esto; _.each (methodList (), function (method) { if (self.isFreeAvailable && ( quote.totals (). grand_total 0 && method.method! == freeMethodCode ) || ! self.isFreeAvailable ) { métodos.push (método); } }); métodos de devolución; } }; } );Eliminar pub / static / frontend / Magento / luma / en_US / Kensium_DeliverySign si ya existe
Ejecute el siguiente comando de despliegue
php bin / magento setup: static-content: deploy
fuente
También debe crear un nombre de sesión en Delivery Sign. Entonces, esto recargaría los cambios del carrito en cada solicitud POST a su controlador. Básicamente, el nodo de acción indica la ruta del controlador y el nodo de sección define qué contenido del lado del cliente debe actualizarse. Los cachés deben ser vaciados para que se aplique este cambio. Marque,
Checkout/etc/frontend/sections.xmlpor ejemplo, unsections.xmlenetc/frontendfuente