Sie können das Ereignis beobachten sales_quote_address_collect_totals_after
und erreichen. Dazu müssen Sie ein Modul einrichten und ein Ereignis konfigurieren. Nehmen wir an, unser Modul ist MStack_Exchange
.
Datei : app\code\MStack\Exchange\etc\events.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="sales_quote_address_collect_totals_after">
<observer name="changeTaxTotal" instance="MStack\Exchange\Observer\ChangeTaxTotal"/>
</event>
</config>
Datei : app\code\MStack\Exchange\Observer\ChangeTaxTotal.php
<?php
namespace MStack\Exchange\Observer;
use \Magento\Framework\Event\ObserverInterface;
use \Magento\Framework\Event\Observer;
class ChangeTaxTotal implements ObserverInterface
{
public $additionalTaxAmt = 2;
public function execute(Observer $observer)
{
/** @var Magento\Quote\Model\Quote\Address\Total */
$total = $observer->getData('total');
//make sure tax value exist
if (count($total->getAppliedTaxes()) > 0) {
$total->addTotalAmount('tax', $this->additionalTaxAmt);
}
return $this;
}
}
Der wichtige Aufruf hier ist : $total->addTotalAmount('tax', $this->additionalTaxAmt);
. Dies wird 2
mit dem bestehenden Steuerbetrag addiert und ich denke, das ist es, was Sie in Ihrem Fall brauchen. Was Sie also tun müssen, ist, durch $this->additionalTaxAmt
Ihren Steuerpufferwert zu ersetzen .
Das Ereignis sales_quote_address_collect_totals_after
wird ausgelöst, kurz nachdem die Gesamtberechnung abgeschlossen war, und wird somit zum perfekten Ort zum Herumspielen.
Wenn Sie neugierig sind, wo diese Gesamtberechnungen stattfinden, müssen Sie sich mit Magento\Quote\Model\Quote\TotalsCollector::collect()
und Magento\Quote\Model\Quote\TotalsCollector::collectAddressTotals()
Methoden befassen .
custom amount
kommst du ?