Zunächst möchte ich einige Screenshots geben, um mein Problem zu verstehen.
Jetzt möchte ich hier verwandten Code hinzufügen.
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;
}
}
Weitere Details finden Sie weiter unten
https://github.com/sivajik34/Delivery-Signature-Magento2
Meine Beobachtung ist, dass das DeliverySignConfigProvider
Objekt nicht aufruft, wenn Sie auf die Schaltfläche " Weiter" klicken , sondern nur, wenn Sie die Seite neu laden . Kann mir jemand dabei helfen?
magento2
checkout
knockoutjs
sivakumar
quelle
quelle
Plugin/Checkout/Model/ShippingInformationManagement.php
.Antworten:
Ich denke, wir müssen die Gesamtübersicht nicht neu laden. Wenn Sie auf die Schaltfläche Weiter klicken , fordert Magento eine API
V1/carts/mine/shipping-information
an, um die Gesamtsummen neu zu berechnen und die Gesamtdaten an unsere Vorlagen auszugeben.Wenn wir also die Gebühr überprüfen möchten, sollten wir die Antwort überprüfen
total_segments
Wenn Sie neben dem Zahlungsschritt auf Weiter klicken, werden Sie aufgefordert, die Versandinformationen für den Anbieter / magento / module-checkout / view / frontend / web / js / view / shipping.js festzulegen
Diese Anforderung berechnet die Gesamtsummen neu.
In Ihrem Fall sollte es in unserer HTML-Vorlage eine
isDisplayed()
Funktion haben:Kensium / DeliverySign / view / frontend / web / template / checkout / cart / totals / fee.html
isDisplayed()
Funktion prüfen :Kensium / DeliverySign / view / frontend / web / js / view / checkout / cart / totals / fee.js
Diese Funktion überprüft das Summensegment
fee
aus der Antwort.Ich mache einen Git - Pull hier .
HINWEIS: Stellen Sie sicher, dass Ihre Gebühr richtig berechnet wird. Bitte überprüfen Sie im Zahlungsschritt, ob die Antwort unsere Gebühr enthält.
quelle
if (this.totals() && totals.getSegment('fee'))
. Ich habe vergessen.Sie müssen die Modellklasse "payment-service.js" überschreiben . Sie können dies folgendermaßen tun:
Also erstelle Kensium / DeliverySign / view / frontend / web / js / model / payment-service.js und der Inhalt sollte sein
Löschen Sie pub / static / frontend / Magento / luma / de_DE / Kensium_DeliverySign, falls bereits vorhanden
Führen Sie den folgenden Bereitstellungsbefehl aus
php bin / magento setup: static-content: deploy
quelle
Sie sollten auch einen Sitzungsnamen auf dem Zustellungszeichen erstellen. Dies würde also die Warenkorbänderungen bei jeder POST-Anforderung an Ihren Controller neu laden. Grundsätzlich gibt der Aktionsknoten den Controller-Pfad an und der Abschnittsknoten definiert, welcher clientseitige Inhalt aktualisiert werden soll. Caches müssen geleert werden, damit diese Änderung wirksam wird. Prüfen
Checkout/etc/frontend/sections.xml
Sie beispielsweise einsections.xml
inetc/frontend
quelle