Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Note

TODO - BE documentation and review of documentation is needed

There is template with display free shiping bar

vendor/creativestyle/magesuite-shipping-addons/view/frontend/templates/cart/free-shipping-bar.phtml
Code Block
<script type="text/x-magento-init">
    {
        "[data-block='free-shipping-bar']": {
            "Magento_Ui/js/core/app": <?php /* @escapeNotVerified */ echo $block->getJsLayout() ?>
        },
        "*": {
            "Magento_Ui/js/block-loader": "<?= /* @escapeNotVerified */ $block->getViewFileUrl('images/loader-1.gif') ?>"
        }
    }
</script>

We calculate freeShipingForm and priceFormat in plugin for getJsLayout method

For Cart Sidebar:

vendor/creativestyle/magesuite-shipping-addons/Plugin/Checkout/Block/Cart/Sidebar/AddFreeShippingBarVariables.php:40
Code Block
class AddFreeShippingBarVariables
{
    public function afterGetJsLayout(\Magento\Checkout\Block\Cart\Sidebar $subject, $jsLayout)
    {
        $jsLayout = json_decode($jsLayout, true);

        $freeShippingBarConfig = $this->arrayManager->get(self::FREE_SHIPPING_BAR_CONFIG_PATH, $jsLayout);

        if (!empty($freeShippingBarConfig)) {
            $freeShippingBarConfig['freeShippingFrom'] = $this->shippingMethodsHelper->getMinimumFreeShippingAmount();
            $freeShippingBarConfig['priceFormat'] = $this->taxHelper->getPriceFormat($this->storeManager->getStore()->getId());

            $jsLayout = $this->arrayManager->set(self::FREE_SHIPPING_BAR_CONFIG_PATH, $jsLayout, $freeShippingBarConfig);
        }

        return json_encode($jsLayout);
    }
}

or for Totals

vendor/creativestyle/magesuite-shipping-addons/Plugin/Checkout/Block/Cart/Totals/AddFreeShippingBarVariables.php:40
Code Block
class AddFreeShippingBarVariables
{
    public function afterGetJsLayout(\Magento\Checkout\Block\Cart\Totals $subject, $jsLayout)
    {
        $jsLayout = json_decode($jsLayout, true);

        $freeShippingBarConfig = $this->arrayManager->get(self::FREE_SHIPPING_BAR_CONFIG_PATH, $jsLayout);

        if (!empty($freeShippingBarConfig)) {
            $freeShippingBarConfig['freeShippingFrom'] = $this->shippingMethodsHelper->getMinimumFreeShippingAmount();
            $freeShippingBarConfig['priceFormat'] = $this->taxHelper->getPriceFormat($this->storeManager->getStore()->getId());

            $jsLayout = $this->arrayManager->set(self::FREE_SHIPPING_BAR_CONFIG_PATH, $jsLayout, $freeShippingBarConfig);
        }

        return json_encode($jsLayout);
    }
}

Calculating minimum amount

vendor/creativestyle/magesuite-shipping-addons/Helper/ShippingMethods.php:21
Code Block
class ShippingMethods extends \Magento\Framework\App\Helper\AbstractHelper
{
    public function getMinimumFreeShippingAmount()
    {
        $minimumAmount = null;

        foreach ($this->freeShippingMethodsProvider->getShippingMethodsWithFreeShipping() as $methodData) {
            if (!$minimumAmount || (int) $methodData['value'] < $minimumAmount) {
                $minimumAmount = (int) $methodData['value'];
            }
        }

        return $minimumAmount;
    }
}

vendor/creativestyle/magesuite-shipping-addons/Service/FreeShippingMethodsProvider.php:37
Code Block
class FreeShippingMethodsProvider
{
    public function getShippingMethodsWithFreeShipping()
    {
        $activeCarriers = $this->shippingConfig->getActiveCarriers();
        $methods = [];

        foreach ($activeCarriers as $code => $model) {
            .....

            $freeShippingSubtotal = $this->configuration->getFreeShippingSubtotal($code, $subtotalField);
            $freeShippingTitle = $this->configuration->getFreeShippingTitle($code);

            $methods[$code] = [
                'title' => $freeShippingTitle,
                'value' => $freeShippingSubtotal
            ];
        }

        return $methods;
    }
}

Frontend

Note

“Free shipping bar” component is disabled by default. In order to show the bar every child theme has to enable it in XML

...

There are the following options that can be changed from the XML file:

name

default value

componentDisabled

true

template

MageSuite_ShippingAddons/cart/free-shipping-bar

fulfilledText

Free shipping applied

displayThresholdValues

true

shippingIconUrl

images/icons/shipping.svg

Minicart free shipping bar:

...