Antes de tudo, quero dar algumas capturas de tela para entender meu problema.
Agora eu quero adicionar código relacionado aqui.
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;
}
}
Por favor, encontre abaixo para mais detalhes
https://github.com/sivajik34/Delivery-Signature-Magento2
Minha observação é que o DeliverySignConfigProvider
objeto não está chamando quando você clica no botão Avançar , apenas quando está recarregando a página . Alguém pode me ajudar nisso?
magento2
checkout
knockoutjs
sivakumar
fonte
fonte
Plugin/Checkout/Model/ShippingInformationManagement.php
.Respostas:
Acho que não precisamos recarregar o resumo total. Porque, quando clicar no botão Avançar , o Magento fará uma solicitação (API)
V1/carts/mine/shipping-information
para recalcular os totais e enviar os dados de totais para nossos modelos.Então, se quisermos verificar a taxa, devemos verificar a resposta
total_segments
Ao clicar em Avançar para a etapa de pagamento, há uma solicitação para definir o fornecedor das informações de remessa / magento / check-out do módulo / view / frontend / web / js / view / shipping.js
Esta solicitação irá recalcular os totais.
No seu caso, em nosso modelo html, ele deve ter uma
isDisplayed()
função:Kensium / DeliverySign / view / frontend / web / template / checkout / cart / totals / fee.html
Verifique a
isDisplayed()
função:Kensium / DeliverySign / view / frontend / web / js / view / checkout / carrinho / totals / fee.js
Esta função irá verificar o
fee
segmento de totais da resposta.Eu faço um idiota puxar aqui .
NOTA: Verifique se sua taxa é calculada da maneira correta. Na etapa de pagamento, verifique se a resposta está com nossa taxa.
fonte
if (this.totals() && totals.getSegment('fee'))
. Eu esqueci.Você precisa substituir a classe de modelo do checkout 'payment-service.js' . Você pode fazer o seguinte:
Portanto, crie Kensium / DeliverySign / view / frontend / web / js / model / payment-service.js e o conteúdo deve ser
Excluir pub / static / frontend / Magento / luma / pt_BR / Kensium_DeliverySign se já existir
Execute o seguinte comando deploy
configuração do bin php / magento: static-content: deploy
fonte
Você também deve criar um nome de sessão no sinal de entrega. Portanto, isso recarregaria as alterações do carrinho em cada solicitação POST no seu controlador. Basicamente, o nó de ação indica o caminho do controlador e o nó da seção define qual conteúdo do lado do cliente deve ser atualizado. Os caches precisam ser liberados para que essa alteração seja aplicada. Marque
Checkout/etc/frontend/sections.xml
Por exemplo, umsections.xml
emetc/frontend
fonte