Magento2 | PWA | GraphQL

Display popup after product is added to cart and show suggested products to the user in slider view


In this post we wiil check how to Display popup after product is added to cart and show suggested products to the user in slider view.

We will  give admin configuration options to choose from best selling, Latest Products or Random products.

Let's start by creating custom module.

You can find complete module on Github at Magelearn_CartPopup





Add registration.php file in it:

1
2
3
4
5
6
7
8
9
<?php
 
use Magento\Framework\Component\ComponentRegistrar;
 
ComponentRegistrar::register(
    ComponentRegistrar::MODULE,
    'Magelearn_CartPopup',
    __DIR__
);

Add composer.json file in it:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
    "name": "magelearn/module-cartpopup",
    "description": "display popup after product is added to cart and show suggested products to the user",
    "type": "magento2-module",
    "license": "OSL-3.0",
    "authors": [
        {
            "email": "info@mage2gen.com",
            "name": "Mage2Gen"
        },
        {
            "email": "vijaymrami@gmail.com",
            "name": "vijay rami"
        }
    ],
    "minimum-stability": "dev",
    "autoload": {
        "files": [
            "registration.php"
        ],
        "psr-4": {
            "Magelearn\\CartPopup\\": ""
        }
    }
}

Add etc/module.xml file in it:

1
2
3
4
5
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Magelearn_CartPopup" setup_version="0.0.1" >
    </module>
</config>

Now first we will give some admin configuration to choose which products (best selling, Latest Products or Random products) will be display in slider and some other option.

Create app/code/Magelearn/CartPopup/etc/adminhtml/system.xml file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0"?>
        xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
    <system>
        <section id="cartpopup" translate="label" type="text" sortOrder="200" showInDefault="1" showInWebsite="1"
                 showInStore="1">
            <label>Add to Cart PopUp</label>
            <tab>catalog</tab>
            <resource>Magelearn_CartPopup::cartpopup</resource>
            <group id="settings" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1">
                <label>Add To Cart PopUp</label>
                <field id="enabled" translate="label" type="select" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
                    <label>Enable/Disable Popup After Product Added to cart ?</label>
                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
                </field>
                <field id="product_carousel" translate="label" type="select" sortOrder="4" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
                    <label>Product Display</label>
                    <source_model>Magelearn\CartPopup\Model\Config\Source\Carousel</source_model>
                    <depends>
                        <field id="cartpopup/settings/enabled">1</field>
                    </depends>
                </field>
                <field id="carousel_autoplay" translate="label" type="select" sortOrder="5" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
                    <label>Carousel Autoplay ?</label>
                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
                    <depends>
                        <field id="cartpopup/settings/enabled">1</field>
                    </depends>
                </field>
                <field id="product_limit" translate="label" sortOrder="6" type="select" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
                   <label>Product Limit</label>
                   <source_model>Magelearn\CartPopup\Model\Config\Source\ProductLimit</source_model>
                   <comment>Set the number for products to show on Carousal block.</comment>
                   <depends>
                        <field id="cartpopup/settings/enabled">1</field>
                    </depends>
                </field>
            </group>
        </section>
    </system>
</config>

Add app/code/Magelearn/CartPopup/etc/acl.xml file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0"?>
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
    <acl>
        <resources>
            <resource id="Magento_Backend::admin">
                <resource id="Magento_Backend::stores">
                    <resource id="Magento_Backend::stores_settings">
                        <resource id="Magento_Config::config" title="Configuration" translate="title" sortOrder="20">
                            <resource id="Magelearn_CartPopup::cartpopup" title="Add to cart popup" translate="title"
                                      sortOrder="150"/>
                        </resource>
                    </resource>
                </resource>
            </resource>
        </resources>
    </acl>
</config>

Add default value of configuration options at app/code/Magelearn/CartPopup/etc/config.xml file.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
    <default>
        <cartpopup>
            <settings>
                <enabled>1</enabled>
                <product_carousel>_randomProducts</product_carousel>
                <product_limit>10</product_limit>
                <carousel_autoplay>1</carousel_autoplay>
            </settings>
        </cartpopup>
    </default>
</config>

Now as per highlighted code in system.xml file, we will add app/code/Magelearn/CartPopup/Model/Config/Source/Carousel.php file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
 
namespace Magelearn\CartPopup\Model\Config\Source;
 
class Carousel implements \Magento\Framework\Option\ArrayInterface
{
    /**
     * Options getter
     *
     * @return array
     */
    public function toOptionArray()
    {
        return [
            ['value' => '_bestSellerProducts', 'label' => __('Best Sellers')],
            ['value' => '_latestProducts', 'label' => __('Latest Products')],
            ['value' => '_randomProducts', 'label' => __('Random Products')]
        ];
    }
 
    /**
     * Get options in "key-value" format
     *
     * @return array
     */
    public function toArray()
    {
        return [
            '_bestSellerProducts' => __('Best Sellers'),
            '_latestProducts' => __('Latest Products'),
            '_randomProducts' => __('Random Products')
        ];
    }
}

Also add app/code/Magelearn/CartPopup/Model/Config/Source/ProductLimit.php file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
 
namespace Magelearn\CartPopup\Model\Config\Source;
 
class ProductLimit implements \Magento\Framework\Option\ArrayInterface
{
    /**
     * Options getter
     *
     * @return array
     */
    public function toOptionArray()
    {
        return [
            ['value' => 4, 'label' => 4],
            ['value' => 6, 'label' => 6],
            ['value' => 8, 'label' => 8],
            ['value' => 10, 'label' => 10],
            ['value' => 12, 'label' => 12]
             
        ];
    }
 
    /**
     * Get options in "key-value" format
     *
     * @return array
     */
    public function toArray()
    {
        return [
            4 => 4,
            6 => 6,
            8 => 8,
            10 => 10,
            12 => 12
        ];
    }
}

Now we will add custom section in Customer section.

For that add app/code/Magelearn/CartPopup/etc/frontend/di.xml file.

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0"?>
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Customer\CustomerData\SectionPoolInterface">
        <arguments>
            <argument name="sectionSourceMap" xsi:type="array">
                <item name="cartpopup" xsi:type="string">Magelearn\CartPopup\CustomerData\PopupCartData</item>
            </argument>
        </arguments>
    </type>
</config>

As per defined in etc/frontend/di.xml file, we will add app/code/Magelearn/CartPopup/CustomerData/PopupCartData.php file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
<?php
 
namespace Magelearn\CartPopup\CustomerData;
 
use Magento\Catalog\Helper\Image;
use Magento\Catalog\Model\Product\Attribute\Source\Status;
use Magento\Catalog\Model\Product\Visibility;
use Magento\Catalog\Model\ResourceModel\Product\Collection;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
use Magento\Checkout\Helper\Cart as CartHelper;
use Magento\Customer\CustomerData\SectionSourceInterface;
use Magento\Framework\Pricing\Helper\Data as PricingHelper;
use Magento\Sales\Model\ResourceModel\Report\Bestsellers\CollectionFactory as BestSellersCollectionFactory;
use Magelearn\CartPopup\Helper\Data as Helper;
 
/**
 * PopupCart source
 */
class PopupCartData implements SectionSourceInterface
{
    const CONFIG_PRODUCT_LIMIT = 'cartpopup/settings/product_limit';
    const CONFIG_COLLECTION_TYPE = 'cartpopup/settings/product_carousel';
 
    /**
     * @var Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
     */
    protected $collectionFactory;
 
    /**
     * @var Magento\Catalog\Helper\Image
     */
    protected $catalogImage;
 
    /**
     * @var PricingHelper
     */
    protected $pricingHelper;
 
    /**
     * @var Status
     */
    protected $productStatus;
 
    /**
     * @var Visibility
     */
    protected $productVisibility;
 
    /** @var Collection */
    protected $collection;
 
    /**
     * @var \Magento\Checkout\Helper\Cart
     */
    protected $cartHelper;
 
    /**
     * @var Helper
     */
    protected $helper;
 
    /**
     * @var BestSellersCollectionFactory
     */
    protected $bestSellersCollectionFactory;
 
    /**
     * @param CollectionFactory $collectionFactory
     * @param Image $catalogImage
     * @param PricingHelper $pricingHelper
     * @param Status $productStatus
     * @param Visibility $productVisibility
     * @param CartHelper $cartHelper
     * @param Helper $helper
     * @codeCoverageIgnore
     */
    public function __construct(
        CollectionFactory $collectionFactory,
        Image $catalogImage,
        PricingHelper $pricingHelper,
        Status $productStatus,
        Visibility $productVisibility,
        CartHelper $cartHelper,
        Helper $helper,
        BestSellersCollectionFactory $bestSellersCollectionFactory
    )
    {
        $this->collectionFactory = $collectionFactory;
        $this->catalogImage = $catalogImage;
        $this->pricingHelper = $pricingHelper;
        $this->productStatus = $productStatus;
        $this->productVisibility = $productVisibility;
        $this->cartHelper = $cartHelper;
        $this->helper = $helper;
        $this->bestSellersCollectionFactory = $bestSellersCollectionFactory;
 
        $this->_initCollection();
    }
 
    /**
     * Return data for section "cartpopup"
     * @return array
     * @throws \Magento\Framework\Exception\LocalizedException
     * {@inheritdoc}
     */
    public function getSectionData()
    {
        $collectionType = $this->helper->getStoreConfig(self::CONFIG_COLLECTION_TYPE);
        $this->$collectionType();
        $output = [
            'cartTotalCount' => $this->cartHelper->getSummaryCount(),
            'products' => $this->_getCollection()
        ];
 
        return $output;
    }
 
    /**
     * Init Product Collection
     */
    private function _initCollection()
    {
        /**
         * I'm still using a collection here because currently
         * it is not possible to sort a repository result randomly.
         *
         * TODO: Remove collection and implement a repository
         */
 
        $this->collection = $this->collectionFactory->create();
        $this->collection->addAttributeToSelect('*');
        $this->collection->addStoreFilter();
        $this->collection->addAttributeToFilter(
            'status',
            ['in' => $this->productStatus->getVisibleStatusIds()]
        );
        $this->collection->addAttributeToFilter(
            'visibility',
            ['in' => $this->productVisibility->getVisibleInSiteIds()]
        );
        $this->collection->addUrlRewrite();
        $this->collection->addMinimalPrice();
    }
 
    /**
     * Select random products
     */
    private function _randomProducts()
    {
        $this->collection->getSelect()->orderRand();
    }
 
    /**
     * Select latest products
     */
    private function _latestProducts()
    {
        $this->collection->addAttributeToSort('entity_id', 'desc');
    }
 
    /**
     * Build Collection
     * @return array
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    private function _getCollection()
    {
        /**
         * Set collection limit
         * TODO: Create admin configuration to set this value and implement product carousel
         */
        $this->collection->setPageSize($this->helper->getStoreConfig(self::CONFIG_PRODUCT_LIMIT));
        foreach ($this->collection as $i => $product) {
            $product->setData('product_url', $product->getProductUrl());
            $product->setData(
                'product_image',
                $this->catalogImage->init($product, 'product_base_image')
                    ->getUrl()
            );
            $product->setData(
                'product_price',
                $this->pricingHelper->currency(
                    $product->getMinimalPrice(),
                    true,
                    false
                )
            );
            $this->collection->removeItemByKey($i);
            $this->collection->addItem($product);
        }
 
        return $this->collection->toArray();
    }
 
    /**
     * Create collection with best selling products of this month
     */
    private function _bestSellerProducts()
    {
        $productIds = [];
        $bestSellers = $this->bestSellersCollectionFactory->create()
            ->setPeriod('month');
 
        foreach ($bestSellers as $product) {
            $productIds[] = $product->getProductId();
        }
 
        if (empty($productIds)) {
            $this->_randomProducts();
        } else {
            $this->collection->addIdFilter($productIds);
        }
    }
}

We will also add app/code/Magelearn/CartPopup/etc/frontend/sections.xml file, so whenever product added to cart that custom section will also be updated.

1
2
3
4
5
6
7
<?xml version="1.0"?>
        xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Customer:etc/sections.xsd">
    <action name="checkout/cart/add">
        <section name="cartpopup"/>
    </action>
</config>

Now we will add app/code/Magelearn/CartPopup/Helper/Data.php  file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
 
namespace Magelearn\CartPopup\Helper;
 
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\App\Helper\AbstractHelper;
use Magento\Framework\App\Helper\Context;
use Magento\Store\Model\ScopeInterface;
 
class Data extends AbstractHelper
{
    /**
     * @var ScopeConfigInterface
     */
    protected $scopeConfig;
 
    /**
     * Data constructor.
     * @param Context $context
     * @param ScopeConfigInterface $scopeConfig
     */
    public function __construct(
        Context $context,
        ScopeConfigInterface $scopeConfig
    ) {
        parent::__construct($context);
        $this->scopeConfig = $scopeConfig;
    }
 
    /**
     * Get configuration from Store scope
     * @param $path
     * @return mixed
     */
    public function getStoreConfig($path)
    {
        /** @var String $path */
        return $this->scopeConfig->getValue($path, ScopeInterface::SCOPE_STORE);
    }
}

Now to display product in popup at frontend, we will first add app/code/Magelearn/CartPopup/view/frontend/layout/default.xml file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0"?>
<page layout="3columns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <update handle="default_head_blocks"/>
    <head>
        <css src="Magelearn_CartPopup::css/cartpopup.css"/>
        <css src="Magelearn_CartPopup::css/owl.carousel.min.css"/>
    </head>
    <body>
        <referenceContainer name="content">
                <block class="Magelearn\CartPopup\Block\Popup" name="ajax.popup.placeholder"
                       ifconfig="cartpopup/settings/enabled" template="Magelearn_CartPopup::popup.phtml"/>
        </referenceContainer>
    </body>
</page>

Add app/code/Magelearn/CartPopup/view/frontend/templates/popup.phtml file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<div data-placeholder="cartpopup" style="display: none;">
    <div data-bind="scope: 'cartpopup'">
        <!-- ko template: getTemplate() --><!-- /ko -->
    </div>
</div>
<script type="text/x-magento-init">
    {
        "*": {
            "Magento_Ui/js/core/app": {
                "components": {
                            "cartpopup": {
                                "component": "Magelearn_CartPopup/js/cartpopup",
                                "shoppingCartUrl": "<?php echo $block->getShoppingCartUrl(); ?>",
                                "cartMessage": "<?php echo $block->getCartMessage(); ?>",
                                "successIcon" : "<?php echo $block->getSuccessIcon(); ?>",
                                "carouselAutoPlay" : "<?php echo $block->getCarouselAutoPlay(); ?>"
                            }
                    }
                }
            }
    }
</script>

Add app/code/Magelearn/CartPopup/Block/Popup.php file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
 
namespace Magelearn\CartPopup\Block;
 
use Magento\Framework\View\Asset\Repository as AssetRepository;
use Magento\Framework\View\Element\Template;
use Magelearn\CartPopup\Helper\Data as Helper;
 
class Popup extends Template
{
    const CONFIG_CAROUSEL_AUTOPLAY = 'cartpopup/settings/carousel_autoplay';
     
    /** @var AssetRepository  */
    protected $assetRepository;
     
    /**
     * @var Helper
     */
    protected $helper;
     
    /**
     * Popup constructor.
     * @param Template\Context $context
     * @param AssetRepository $assetRepository
     * @param array $data
     */
    public function __construct(
        Template\Context $context,
        AssetRepository $assetRepository,
        Helper $helper,
        array $data = []
    ) {
        parent::__construct($context, $data);
        $this->assetRepository = $assetRepository;
        $this->helper = $helper;
    }
 
    /**
     * Get shopping cart url
     * @return string
     */
    public function getShoppingCartUrl()
    {
        return $this->getUrl('checkout/cart');
    }
 
    /**
     * Returns a message to be displayed on the cart popup
     * @return string
     */
    public function getCartMessage()
    {
        $message  = __('A new item has been added to your Shopping Cart. ');
        $message .= __('You now have %s items in your Shopping Cart.');
 
        return sprintf($message, "<span id='cart-popup-total-count'></span>");
    }
 
    /**
     * Returns an icon to be displayed
     * @return string
     */
    public function getSuccessIcon()
    {
        return $this->assetRepository->getUrl('Magelearn_CartPopup::images/success_icon.png');
    }
    /**
     * Returns an icon to be displayed
     * @return string
     */
    public function getCarouselAutoPlay()
    {
        return $this->helper->getStoreConfig(self::CONFIG_CAROUSEL_AUTOPLAY);
    }
}

Now we will add our JS component file at app/code/Magelearn/CartPopup/view/frontend/web/js/cartpopup.js file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
define([
    'jquery',
    'uiElement',
    'ko',
    'Magento_Customer/js/customer-data',
    'Magento_Ui/js/modal/modal',
    'owlCarousel'
], function ($, Component, ko, customerData, modal) {
 
    'use strict';
 
    var modalPopupSelector = '[data-placeholder="cartpopup"]';
 
    return Component.extend({
        defaults: {
            template: 'Magelearn_CartPopup/popup'
        },
        isUpdated: ko.observable(false),
        products: ko.observable(false),
        successIcon: ko.observable(),
        cartTotalCount: ko.observable(),
        cartMessage: ko.observable(),
        shoppingCartUrl: '',
 
        /**
         * Update modal popup content.
         *
         * @param {Object} updatedCart
         * @returns void
         */
        update: function (updatedCart) {
            this.products(updatedCart.products);
            this.applyCartMessageBinding();
            this.cartTotalCount(updatedCart.cartTotalCount);
            this.isUpdated(false);
 
            $(modalPopupSelector).modal("openModal");
        },
 
        /**
         * Close Modal Popup Action
         */
        closeModal: function () {
            $(modalPopupSelector).modal("closeModal");
        },
 
        /**
         * Redirect to Shopping Cart
         */
        viewShoppingCart: function () {
            window.location.replace(this.shoppingCartUrl);
        },
 
        /**
         * Apply bindings to element loaded inside of cartMessage
         */
        applyCartMessageBinding: function () {
            ko.applyBindingsToNode(
                document.getElementById(
                    'cart-popup-total-count'),
                {text: this.cartTotalCount}
            );
        },
 
        /**
         * Initialize Component
         * @returns {*}
         */
        initialize: function (config) {
            var self = this,
            cartPopupData = customerData.get('cartpopup');
            var carousal_autoplay = config.carouselAutoPlay;
            /**
             * Update CartPopup only when an addToCart action is triggered
             */
            $(document).on('ajax:addToCart', function (sku, productIds, form, response) {
                self.isUpdated(true);
            });
 
            /**
             * Subscribe to changes on the CustomerData component
             */
            cartPopupData.subscribe(function (updatedCart) {
                if (self.isUpdated()) {
                    self.update(updatedCart);
                }
            }, this);
 
            /**
             * Set Modal Popup Component options
             */
            var options = {
                type: 'popup',
                responsive: true,
                innerScroll: false,
                modalClass: 'no-header-footer',
                buttons: [{
                    text: $.mage.__('Close'),
                    class: '',
                    click: function () {
                        this.closeModal();
                    }
                }]
            };
 
            modal(options, $(modalPopupSelector));
            ko.bindingHandlers.owlCarouselInitiator = {
                init: function() {
                    console.log(carousal_autoplay);
                    $('.owl-carousel').owlCarousel({
                        loop:true,
                        nav:true,
                        navText:["<div class='nav-btn prev-slide'></div>","<div class='nav-btn next-slide'></div>"],
                        autoplay:parseInt(carousal_autoplay),
                        autoplayTimeout:2000,
                        items : 4,
                        itemsDesktop : [1000,4],
                        itemsDesktopSmall : [900,4],
                        itemsTablet: [600,2]
                });
                }
            };
            return self._super();
        }
    })
});

As per defined in cartpopup.js file, we will add our template file at app/code/Magelearn/CartPopup/view/frontend/web/template/popup.html file.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<div class="modal-popup-header">
    <div class="modal-popup-icon">
        <img data-bind="attr: { src: successIcon }" width="40" height="40">
    </div>
    <div class="modal-popup-top">
        <p data-bind="html: cartMessage"></p>
        <p class="cart-buttons">
            <button type="button" class="view-shopping-cart" data-bind="event: {click: viewShoppingCart}">
                <!-- ko i18n: 'View Shopping Cart' --><!-- /ko --></button>
            <button type="button" class="continue-shopping" data-bind="event: { click: closeModal }">
                <!-- ko i18n: 'Continue Shopping' --><!-- /ko --></button>
        </p>
    </div>
</div>
<div class="modal-popup-body">
    <p><!-- ko i18n: 'Other Items You Might Be Interested In:' --><!-- /ko --></p>
    <div data-bind="foreach: products">
        <ul data-bind="foreach:Object.keys($data), owlCarouselInitiator" class="modal-product-list owl-carousel">
            <li>
                <a data-bind="attr: { href: $parent[$data].product_url }">
                    <img data-bind="attr: { src: $parent[$data].product_image }" width="155" height="155" />
                </a>
                <div class="cartpopup-item">
                <span><strong data-bind="text: $parent[$data].product_price"></strong></span>
                </div>
            </li>
        </ul>
    </div>
</div>

At last we will add app/code/Magelearn/CartPopup/view/frontend/requirejs-config.js file to define path for owl carousel JS.

1
2
3
4
5
6
7
8
9
10
var config = {
    paths: {           
        'owlCarousel': "Magelearn_CartPopup/js/owl.carousel.min"
    },
    shim: {
        'owlCarousel': {
            deps: ['jquery']
        }
    }
}

We will add 

app/code/Magelearn/CartPopup/view/frontend/web/css/cartpopup.css

app/code/Magelearn/CartPopup/view/frontend/web/css/owl.carousel.min.css and app/code/Magelearn/CartPopup/view/frontend/web/js/owl.carousel.min.js  files and images at 

app/code/Magelearn/CartPopup/view/frontend/web/images folder

to display it properly on front end.

Related Post:

0 Comments On "Display popup after product is added to cart and show suggested products to the user in slider view"

Back To Top