Прежде всего я хочу сделать несколько снимков экрана, чтобы понять мою проблему.
Теперь я хочу добавить соответствующий код здесь.
и т.д. / интерфейс / 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;
}
}
Пожалуйста, найдите ниже для более подробной информации
https://github.com/sivajik34/Delivery-Signature-Magento2
Мое наблюдение состоит в том, что DeliverySignConfigProvider
объект не вызывает, когда вы нажимаете следующую кнопку , только его вызов, когда вы перезагружаете страницу . Можете ли вы помочь мне в этом?
magento2
checkout
knockoutjs
Sivakumar
источник
источник
Plugin/Checkout/Model/ShippingInformationManagement.php
.Ответы:
Я думаю, что нам не нужно перезагружать общее резюме. Потому что, когда вы нажимаете кнопку « Далее» , Magento отправляет запрос (API)
V1/carts/mine/shipping-information
на пересчет итогов и вывод данных итогов в наши шаблоны.Итак, если мы хотим проверить плату, мы должны проверить ответ
total_segments
При нажатии рядом с шагом оплаты появляется запрос на установку информации о доставке vendor / magento / module-checkout / view / frontend / web / js / view / shipping.js
Этот запрос пересчитает итоги.
В вашем случае в нашем html-шаблоне должна быть
isDisplayed()
функция:Kensium / DeliverySign / вид / интерфейс / веб / шаблон / выписка / корзина / итоги / fee.html
Проверьте
isDisplayed()
функцию:Kensium / DeliverySign / вид / интерфейс / веб / JS / просмотр / Checkout / корзины / Итоговые / fee.js
Эта функция будет проверять итоговый
fee
сегмент из ответа.Я делаю мерзавец здесь .
ПРИМЕЧАНИЕ: убедитесь, что ваша плата рассчитана правильно. На этапе оплаты, пожалуйста, проверьте ответ имеет наш сбор.
источник
if (this.totals() && totals.getSegment('fee'))
. Я забылВам необходимо перезаписать контрольный класс модели payment-service.js . Вы можете сделать это следующим образом:
Поэтому создайте Kensium / DeliverySign / view / frontend / web / js / model / payment-service.js и контент должен быть
Удалить паб / статический / внешний интерфейс / Magento / luma / en_US / Kensium_DeliverySign, если он уже существует
Запустите следующую команду развертывания
php bin / magento setup: static-content: deploy
источник
Вы должны также создать имя сеанса в Delivery Sign. Так что это перезагрузит изменения корзины при каждом запросе POST к вашему контроллеру. По существу, узел действия указывает путь к контроллеру, а узел раздела определяет, какое содержимое на стороне клиента должно быть обновлено. Кэши должны быть сброшены для применения этого изменения. Проверьте,
Checkout/etc/frontend/sections.xml
например,sections.xml
вetc/frontend
источник