Site icon MageComp Blog

How to Add Quick View Feature Programmatically in Magento 2

Hello Magento Friends,

Today I am going to explain an important topic on improving the user experience of the store, How to Add Quick View Feature Programmatically in Magento 2.

When a user comes to shop on your website, they have to go through a long process. To make the process faster, you can allow customers to buy products quickly. The customers can view products directly from the category page with a quick view feature. Default Magento 2 does not provide this facility. The Quick View feature can improve the shopping experience and quicken the purchase decision.

You can Add Quick View Feature Programmatically in Magento 2 with the help of the below steps.

Steps to Add Quick View Feature Programmatically in Magento 2:

Step 1: Create catalog_category_view.xml file at the given below path

app\code\Vendor\Extension\view\frontend\layout\

Now add the below code

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <referenceBlock name="category.product.addto">
                <block class="Magento\Catalog\Block\Product\ProductList\Item\Block" name="category.product.quickview" as="quickview" template="Vendor_Extension::product/productlist/item/quickview.phtml"/>
            </referenceBlock>
        </referenceContainer>
    </body>
</page>

Step 2: Create quickview.phtml file at the following path

app\code\Vendor\Extension\view\frontend\templates\product\productlist\item\

Then add the code as follows

<button class="quick_view" type="button" id="quick_view_button<?php echo $block->getProduct()->getId() ?>"
        data-mage-init='{ "Vendor_Extension/js/product/productlist/item/quickview": { } }'
        data-id="<?php echo $block->getProduct()->getId() ?>"
        data-url="<?php  echo $block->getProductUrl($block->getProduct()) ?>">
    <?php echo __('Quick View') ?>
</button>
<div class="row">
    <div id="quick_view_container<?php echo $block->getProduct()->getId() ?>"></div>
</div>
<style>
    #quick_view_container<?php echo $block->getProduct()->getId() ?> > #frame_product<?php echo $block->getProduct()->getId() ?>
    {
        width: 100%;
    }
</style>

Step 3: Create quickview.js file at the below path

app\code\Vendor\Extension\view\frontend\web\js\product\productlist\item\

After that add the code given below

define([
    'jquery',
    'Magento_Ui/js/modal/modal',
    'mage/loader',
    'Magento_Customer/js/customer-data'
    ], function ($, modal, loader, customerData) {
    'use strict';
    return function (config, node) {
        var product_id = jQuery(node).data('id');
        var product_url = jQuery(node).data('url');
        var options = {
            type: 'popup',
            responsive: true,
            innerScroll: false,
            title: $.mage.__('Quick View Title'),
            buttons: [{
                text: $.mage.__('Close'), class: 'close-modal', click: function () {
                    this.closeModal();
                }
            }]
        };
        var popup = modal(options, $('#quick_view_container' + product_id));
        $("#quick_view_button" + product_id).on("click", function () {
            openquickviewpopup();
        });
        var openquickviewpopup = function () {
            var modalContainer = $("#quick_view_container" + product_id);
            modalContainer.html(create_iframe_data());
            var iframearea = "#frame_product" + product_id;
            $(iframearea).on("load", function () {
                modalContainer.addClass("product-quickview");
                modalContainer.modal('openModal');
                observeAddToCart(this);
            });
        };
        var observeAddToCart = function (iframe) {
            var doc = iframe.contentWindow.document;
            $(doc).contents().find('#product_addtocart_form').submit(function (e) {
                e.preventDefault();
                $.ajax({
                    data: $(this).serialize(),
                    type: $(this).attr('method'),
                    url: $(this).attr('action'),
                    success: function (response) {
                        $(".close-modal").trigger("click");
                        $('[data-block="minicart"]').find('[data-role="dropdownDialog"]').dropdownDialog("open");
                    }
                });
            });
        };
        var create_iframe_data = function () {
            return $('<iframe />', {id: 'frame_product' + product_id, src: product_url + "?iframe=1"});
        }
    };
});

Step 4: Create a di.xml file at the following path

app\code\Vendor\Extension\etc\frontend\

Now add the below-mentioned code

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Catalog\Controller\Product\View" type="Vendor\Extension\Controller\Product\View" />
</config>

Step 5: Create View.php file at the below-mentioned path

app\code\Vendor\Extension\Controller\Product\

Then add the following code

<?php
namespace Vendor\Extension\Controller\Product;

use Magento\Catalog\Controller\Product\View as CatalogView;

class View extends CatalogView
{
    public function execute()
    {
        if ($this->getRequest()->getParam("iframe"))
        {
            $layout = $this->_view->getLayout();
            $layout->getUpdate()->addHandle('quickview_product_view');
        }
        return parent::execute();
    }
}

Step 6: Create quickview_product_view.xml file at the below path

app\code\Bizspice\QuickView\view\frontend\layout\

Finally, add the below code

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="empty" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <update handle="empty"/>
    <html>
        <attribute name="class" value="quickview-scroll"/>
    </html>
    <body>
        <attribute name="class" value="quickview-override"/>
        <referenceContainer name="product.page.products.wrapper" remove="true" />
        <referenceContainer name="product.info.details" remove="true" />
        <referenceBlock name="reviews.tab" remove="true" />
        <referenceBlock name="product.info.details" remove="true" />
        <referenceBlock name="product.info.description" remove="true" />
        <referenceBlock name="product.info.overview" remove="true" />
        <referenceBlock name="authentication-popup" remove="true" />
    </body>
</page>

Result:

With the implementation of the above steps, the Quick View Button has been added to the category page where the user can directly view the product details.

Conclusion:

Accordingly, you can Add Quick View Feature Programmatically in Magento 2. Eliminate all these steps and let Certified Magento Developers help you add the Quick View feature to your Magento 2 store. If you have any doubts, feel free to mention them in the comment box. Share with your friends and stay connected till the next one.

Happy Coding!

Exit mobile version