We sacrifice by not doing any other technology, so that you get the best of Magento.

We sacrifice by not doing any other technology, so that you get the best of Magento.

    Magento 2 Commands not working after upgrade to latest version

    After Upgrade Magento 2 latest version, sometimes CLI commands stopped working:

    – When you Run upgrade : php bin/magento setup:upgrade command The commands do nothing and show no error nor proceedings but just new line as Following Screenshot:

    Actual Result:

    Expected Result:
    The above command should run the commands to upgrade the database but it just shows a new line without proceeding.

    Please follow the below steps to resolve this issue  :

    Step 1: Add Zend framework in Root composer.json

    “autoload”: {
    
    “psr-4”: {
    
    “Magento\Framework\”: “lib/internal/Magento/Framework/”,
    
    “Magento\Setup\”: “setup/src/Magento/Setup/”,
    
    “Magento\”: “app/code/Magento/”,
    
    “Zend\Mvc\Controller\”: “setup/src/Zend/Mvc/Controller/”
    
    },

    Step 2: Run below Command

    “composer dumpautoload”.

    Taaddaa!!  Now the command should work properly.

    How can you Protect your Magento Stores Running on an unsupported PHP version?

    As per the recent study, the majority of Magento stores around the world are still deployed over unsupported and outdated PHP version which needs to be upgraded as early as possible to maintain the consistency in security, performance and faster loading time.

    If you own a Magento store running below the version of 7.2, you are sure to miss out on some of the essential improvements in the performance segment and it exposes your Magento store for the higher vulnerability of data, security architecture, and other vital factors.

    So, the main question that triggers our mind is why there is so much of a necessity to update the PHP version, and in what way can it be done with minimal steps?

    As per the Sanguine Security (which is being operated around eCommerce by a household name, particularly Magento security topics – Willem DeGroot), research states that of all the Magento stores, less than 10% are running on one of the supported versions of PHP.

    The above statement came into the fire after it was officially tweeted recently, which resulted in a big debate over the current of PHP within Magento.

    What is the current situation we can observe around us?

    The current stage is only 10% are in the clear” area what had been discussed the same.

    The current statement being released creates a massive potential risk for various vulnerabilities in the darkest state and that merchants must immediately take into consideration.

    As per the recent survey, 90 percent of the Magento stores still run on an outdated version of PHP.

    Why is there too much emphasis on the PHP version?

    PHP version is essential as several websites use this programming language. In simple words – older versions are slowly getting obsolete compared to newer versions that get the latest support as well updates. Besides, the newest version performs better because new programming solutions will be built on the latest releases. With this, there will be a lack of backward compatibility for outdated versions.

    As a whole, your Magento store needs to be updated on the latest versions (bit older versions) of PHP to get the benefits of performance and security to a whole new level.

    Supported PHP versions and Timeframes

    Let’s quickly take a look over the PHP versions and their security updates as well as support available depending upon the versions:

    • 7.3 and 7.4 – fully supported versions
    • 7.2 – under security support until Nov 2020
    • 7.1 – recently discontinued security support (Dec 2019)
    • 7.0 – no support since December 2018
    • 5.6 and older – no support since December 2018

    Still, many Magento store owners use older PHP versions. Why?

    They are using older PHP versions for various reasons like they didn’t do it because they didn’t find it worthy or they were unaware about the older versions being an issue at all.

    Does that bring urgency to upgrade your store to Magento 2 as early as possible?

    Perhaps not just for the sake of relying on the supported version of PHP. There are numerous advantages while you switch over to Magento 2, and for some merchants, this can be overdoing it. Talking on the version side, it’s always better to opt for newer versions of PHP.

    Is it ok now if I am on Magento 2?

    It depends upon the Magento 2 version as you do not get to switch over automatically to supported versions. It is advisable to use Magento 2.3.x versions, which fully support PHP 7.2 version.

    Upgrading to a newer version will not create miracles for your store but stop it from further vulnerabilities. In case you need any assistance contact us anytime to start the process right away.

    8 Effective Strategies To Boost Your Magento E-commerce Store In 2020

    We have mentioned some of the best strategies to boost your Magento eCommerce store in 2020.

    1. Create Buyer Personas

    The first step is to understand your target buyers. Build your buyer personas by establishing their demographics, expectations, needs, pain points. Though you have been in the business for years, you should start your New Year by looking at your customers with a new perspective. You can create better strategies for sales growth when you have a clear picture of the existing and prospective customers.

    2. Run your store on the Latest Version

    Running your store on the latest platform version is the key to success. If you have planned to begin your store this year then invest in Magento 2 development. It is not only equipped with the latest features but provides support ahead. Magento 1 End Of Life is going to happen this year so if you have your store on the previous version then you need to migrate to Magento 2.

    3. Invest in a Superlative Design

    If you want to make a big impact in 2020 then you have to excel on the visual front. The design of your Magento store is very important. Make your home page interesting by narrating an amazing story with a perfect combination of content and design. You can also use attractive images and videos that have engaging narratives. Place the CTA button contextually so that users can navigate easily. Follow the same pattern on the entire website.

    4. Make Navigation Simple And Intuitive 

    An attractive design is just one aspect of a successful Magento store. You have to give importance to navigation as well. If you want visitors to stay and convert then your store should have a simple and intuitive interface. As eCommerce stores generally have huge catalogs with multiple products, make sure to provide easy search and filter options and also enable easy switch between pages that take the visitor to checkout.

    5. Keep Checkout Process Easy 

    The next important aspect which you should discuss with your Magento development company is to create a checkout process as simple as possible. Any kind of complications or distraction at this point can waste all the good work and visitors will leave the site by abandoning their shopping carts. Check out process should have a lesser number of clicks because a greater number of clicks increase the risk of abandonment so make sure to reduce the information that visitors have to enter and also provide them multiple payment options. Ensure a seamless process with the promise of glitch-free performance.

    6. Responsiveness is The Key 

    If you want to succeed in 2020 then responsiveness is a must in your Magento store. With a mobile-friendly eCommerce store, you will be able to connect with the massive base of mobile customers and also increases your SERP ranking to enhance your store’s visibility which means you get a greater traffic volume that can convert into higher conversions and revenues. Create a responsive store so that it is capable of running smoothly on different devices and screen sizes.

    7. Digital Marketing is the key 

    Apart from designs, you also need to focus on your digital marketing game. Build a comprehensive strategy from SEO to get your website on top of search rankings, to social media marketing to propel your reach across social media, and pay-per-click marketing for quick targeting of the audience. The aim is to reach the audience in every possible way so that the competitors are unable to poach them.

    8. Prioritize Performance and Security

    Never compromise on performance and security if you want your eCommerce store to outshine in the market and surge ahead in the New Year. For the best result, contact Magento Support Service as they will constantly check the performance and security of your Magento store. They will solve any issues at the earliest. You only have to pay a small price considering that it will keep your store running seamlessly and delivering the best experiences to the customers.

    Upload and delete image though ajax in Magento 2

    As per my requirements, I have made a code to upload an image and given the various effects to the image.

    So please follow the below steps to achieve the functionality.

    Step1: Add below code in your .phtml file where you want to upload an image.

    <div class="container wallpapercustompage">
      <div class="row">
        <div class="col-lg-8">
          <div class="mainImage">
            <img src="<?php echo $this->getUrl(); ?>10221276943_45e198c6c6_4k.jpg" id="mainImageSrc" />
          </div>
          <div class="actions-save" style="display:none;">
              <button type="button" class="action-cancel" data-role="cancel-button" data-image="10221276943_45e198c6c6_4k.jpg" data-type="jpg" title="<?php echo __('Cancel'); ?>"><span><?php echo __('Cancel'); ?></span></button>
              <button type="button" class="action-apply" data-role="apply-button" data-image="10221276943_45e198c6c6_4k.jpg" data-type="jpg" title="<?php echo __('Apply'); ?>"><span><?php echo __('Apply'); ?></span></button>
          </div>
          <div class="actions">
              <button type="button" class="action-flip" data-role="flip-button" data-image="10221276943_45e198c6c6_4k.jpg" data-type="jpg" title="<?php echo __('Flip image'); ?>"><span><?php echo __('Flip image'); ?></span></button>
              <button type="button" class="action-bw" data-role="bw-button" data-image="10221276943_45e198c6c6_4k.jpg" data-type="jpg" title="<?php echo __('Black & White Filter'); ?>"><span><?php echo __('Black & White Filter'); ?></span></button>
              <button type="button" class="action-sepia" data-role="sepia-button" data-image="10221276943_45e198c6c6_4k.jpg" data-type="jpg" title="<?php echo __('Sepia Filter'); ?>"><span><?php echo __('Sepia Filter'); ?></span></button>
          </div>
        </div>
        <div class="col-lg-4">
          <form class="form-horizontal"  id="frm_attachment" name="frm_attachment" method="post" enctype="multipart/form-data" action="<?php echo $this->getUrl(); ?>wallpaper/index/customize">
              <div class="browse-wrap">
                <input accept="image/*" id="attachment" name="attachment" type="file" value="">
              </div>
              
              <div class="row">
                <button type="submit" id="uploadAttachment" class="btn btn-primary"><?php echo __('Submit'); ?></button>
              </div>
          </form>
    
          <div id="attachmentFiles"></div>
        </div>  
    	</div>
    </div>
    
    <style type="text/css">
        .mainImage-image-grayscale{ -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -o-filter: grayscale(100%); -ms-filter: grayscale(100%); filter: grayscale(100%); }
    
        .mainImage-image-sepia{ -webkit-filter: sepia(100%); -moz-filter: sepia(100%); -o-filter: sepia(100%); -ms-filter: sepia(100%); filter: sepia(100%); }
    
        .mainImage-image-flip{ transform: scale(-1, 1); -moz-transform: scale(-1, 1); -webkit-transform: scale(-1, 1); -o-transform: scale(-1, 1); -khtml-transform: scale(-1, 1); -ms-transform: scale(-1, 1); }
    </style>
    
    
    <script>
    
    function getSizeInCM (sizeInPX) {  
       return sizeInPX * 2.54 / (96 * window.devicePixelRatio)
    };
    
    require(['jquery'], function ($) {
    
        $(document).ready(function ($) {
    
        	/**** Delete Image & Image Effects ****/
            $(document).on('click', '#attachmentFiles .action-remove', function(){
               if (window.confirm("Are you sure you want to delete?")) {
                   var attachmentPath = $(this).attr("data-image");
                   var divID = $(this).parents(".base-image").attr("id");
                   var imageID = $(this).parents(".base-image").find(".hiddneattachID").val();
                   
                   jQuery.ajax({
                        url: "<?php echo $this->getUrl(); ?>wallpaper/index/deleteCustomize?isAjax=true",
                        type: "POST",
                        data: {filename: attachmentPath, form_key: window.FORM_KEY, imageID:imageID},
                        showLoader: true,
                        success: function (response) {
                            if(response.success == true){
                                var parentElements = $(".base-image#"+divID).prev().children();
                                $(".base-image#"+divID).remove();
                                if($(".base-image").length > 0)
                                {
                                  $('#mainImageSrc').attr("src",parentElements.find('.wallpaper-image').attr('src'));
                                  parentElements.find('.selectImage').attr('checked','checked');
                                  var srcFilename = parentElements.find('.selectImage').attr('data-srcfilename');
                                  var srcType = parentElements.find('.selectImage').attr('data-srctype');
                                  $('.action-bw').attr('data-image',srcFilename).attr('data-type',srcType);
                                  $('.action-sepia').attr('data-image',srcFilename).attr('data-type',srcType);
                                  $('.action-flip').attr('data-image',srcFilename).attr('data-type',srcType);
                                  $('.action-cancel').attr('data-image',srcFilename).attr('data-type',srcType);
                                  $('.action-apply').attr('data-image',srcFilename).attr('data-type',srcType);
                                }
                                else
                                {
                                  $('#mainImageSrc').attr("src", "<?php echo $this->getUrl(); ?>10221276943_45e198c6c6_4k.jpg");
                                  var srcFilename = '10221276943_45e198c6c6_4k.jpg';
                                  var srcType = 'jpg';
                                  $('.action-bw').attr('data-image',srcFilename).attr('data-type',srcType);
                                  $('.action-sepia').attr('data-image',srcFilename).attr('data-type',srcType);
                                  $('.action-flip').attr('data-image',srcFilename).attr('data-type',srcType);
                                  $('.action-cancel').attr('data-image',srcFilename).attr('data-type',srcType);
                                  $('.action-apply').attr('data-image',srcFilename).attr('data-type',srcType);
                                }
                            }
                        },
                       error: function (response) {
                            alert(response.message);
                       }
                    });
               } 
            });
    
            $(document).on('click', '.action-bw', function(){
               var attachmentPath = $(this).attr("data-image");
               $('.mainImage').addClass('mainImage-image-grayscale');
               $('div.actions').hide();
               $('div.actions-save').show();
               $('.action-apply').attr('data-action', '1');
            });
    
            $(document).on('click', '.action-sepia', function(){
               var attachmentPath = $(this).attr("data-image");
               $('.mainImage').addClass('mainImage-image-sepia');
               $('div.actions').hide();
               $('div.actions-save').show();
               $('.action-apply').attr('data-action', '2');
            });
    
            $(document).on('click', '.action-flip', function(){
               var attachmentPath = $(this).attr("data-image");
               $('.mainImage').addClass('mainImage-image-flip');
               $('div.actions').hide();
               $('div.actions-save').show();
               $('.action-apply').attr('data-action', '3');
            });
            
         	  $(document).on('click', '.action-cancel', function(){
               var attachmentPath = $(this).attr("data-image");
               $('.mainImage').removeClass('mainImage-image-grayscale').removeClass('mainImage-image-sepia').removeClass('mainImage-image-flip');
               $('div.actions').show();
               $('div.actions-save').hide();
               $('.action-apply').removeAttr('data-action');
            });
    
            $(document).on('change', "input[name='selectImage']", function(){
                var srcPath = $(this).attr("data-src");
                var srcType = $(this).attr("data-srctype");
                var srcFilename = $(this).attr("data-srcfilename")
    
                $('.action-bw').attr('data-image',srcFilename).attr('data-type',srcType);
                $('.action-sepia').attr('data-image',srcFilename).attr('data-type',srcType);
                $('.action-flip').attr('data-image',srcFilename).attr('data-type',srcType);
                $('.action-cancel').attr('data-image',srcFilename).attr('data-type',srcType);
                $('.action-apply').attr('data-image',srcFilename).attr('data-type',srcType);
                $('#mainImageSrc').attr("src", srcPath);
            });
    
            $(document).on('click', '.action-apply', function(){
               	var imageName = $(this).attr("data-image");
               	var imageType = $(this).attr("data-type");
               	var imageAction = $(this).attr("data-action");
               
               	jQuery.ajax({
                    url: "<?php echo $this->getUrl(); ?>wallpaper/index/imageCustomize?isAjax=true",
                    type: "POST",
                    data: {filename: imageName, fileType:imageType, fileAction:imageAction},
                    showLoader: true,
                    success: function (response) {
                      if(response.error == false)
                      {
                        $('.action-bw').attr('data-image',response.data.filename).attr('data-type',response.data.fileType);
                   			$('.action-sepia').attr('data-image',response.data.filename).attr('data-type',response.data.fileType);
                   			$('.action-flip').attr('data-image',response.data.filename).attr('data-type',response.data.fileType);
                   			$('.action-cancel').attr('data-image',response.data.filename).attr('data-type',response.data.fileType);
                   			$('.action-apply').attr('data-image',response.data.filename).attr('data-type',response.data.fileType);
    
             			      $('.mainImage').removeClass('mainImage-image-grayscale').removeClass('mainImage-image-sepia').removeClass('mainImage-image-flip');
        		           	$('div.actions').show();
        		           	$('div.actions-save').hide();
        	           		$('.action-apply').removeAttr('data-action');
    
                        $("#attachmentFiles").append(response.data.html);
                        $('#mainImageSrc').attr("src", response.data.path);
    
                        // Create dummy image to get real width and height
                        $("<img>").attr("src", response.data.path).load(function(){
                          var realWidth = this.width;
                          var realHeight = this.height;
                          var width = getSizeInCM(realWidth);
                          var height = getSizeInCM(realHeight);
                          /*alert("Original width=" + width + ", " + "Original height=" + height);*/
                        });
                      }
                      else
                      {
                        $('.mainImage').removeClass('mainImage-image-grayscale').removeClass('mainImage-image-sepia').removeClass('mainImage-image-flip');
                        $('div.actions').hide();
                        $('div.actions-save').show();
                        alert(response.message);
                      }
                    },
                   error: function (response) {
                        alert(response.message);
                   }
                });
            });
            
    
            /**** Upload Image ****/
            $('#uploadAttachment').click(function(e){e.preventDefault();  $('#attachment').trigger('click'); });
            
            $("#attachment").change(function(){
                var data = $("#frm_attachment").get(0);
                
                jQuery.ajax({
                 	url: "<?php echo $this->getUrl(); ?>wallpaper/index/addCustomize?isAjax=true' ?>",
                 	type: "POST",
                 	data: new FormData(data),
                 	processData: false,
                 	contentType: false,
                 	showLoader: true,
                 	success: function (response) {
                      if(response.error == false)
                      {
                   			$('.action-bw').attr('data-image',response.data.filename).attr('data-type',response.data.fileType);
                   			$('.action-sepia').attr('data-image',response.data.filename).attr('data-type',response.data.fileType);
                   			$('.action-flip').attr('data-image',response.data.filename).attr('data-type',response.data.fileType);
                   			$('.action-cancel').attr('data-image',response.data.filename).attr('data-type',response.data.fileType);
                   			$('.action-apply').attr('data-image',response.data.filename).attr('data-type',response.data.fileType);
    
                   			$('div.actions').show();
    
                      	$("#attachmentFiles").append(response.data.html);
                        $('#mainImageSrc').attr("src", response.data.path);
                      	$('#frm_attachment')[0].reset();
    
                      	// Create dummy image to get real width and height
                        $("<img>").attr("src", response.data.path).load(function(){
                          var realWidth = this.width;
                          var realHeight = this.height;
                          var width = getSizeInCM(realWidth);
                          var height = getSizeInCM(realHeight);
                          /*alert("Original width=" + width + ", " + "Original height=" + height);*/
                        });
                      }
                      else
                      {
                        alert(response.message);
                        $('#frm_attachment')[0].reset();
                      }
                 	},
                  error: function (response) {
                  	alert(response.message);
                  	$('#frm_attachment')[0].reset();
                  }
                });
            });
        });
    });
    </script>

    Step2: Create one “AddCustomize.php” file to upload an image.

    <?php
    namespace MagemonkeysWallpaperControllerIndex;
    
    use MagentoFrameworkJsonHelperData as JsonHelper;
    
    class AddCustomize extends MagentoFrameworkAppActionAction
    {
        protected $_pageFactory;
    	protected $connection;
        protected $_mediaDirectory;
        protected $_fileUploaderFactory;
        public $_storeManager;
    
    	public function __construct(
    		MagentoFrameworkAppActionContext $context,
            MagentoFrameworkAppResourceConnection $connection,
            JsonHelper $jsonHelper,
            MagentoFrameworkControllerResultJsonFactory $resultJsonFactory,
            MagentoFrameworkFilesystem $filesystem,
            MagentoMediaStorageModelFileUploaderFactory $fileUploaderFactory,
            MagentoStoreModelStoreManagerInterface $storeManager,
    		MagentoFrameworkViewResultPageFactory $pageFactory)
    	{
    		$this->_pageFactory = $pageFactory;
            $this->connection = $connection;      
            $this->jsonHelper = $jsonHelper;
            $this->resultJsonFactory = $resultJsonFactory;
            $this->_mediaDirectory = $filesystem->getDirectoryWrite(MagentoFrameworkAppFilesystemDirectoryList::MEDIA);
            $this->_fileUploaderFactory = $fileUploaderFactory;
            $this->_storeManager = $storeManager;
    		return parent::__construct($context);
    	}
    
    	public function execute(){
            
            $_postData = $this->getRequest()->getPost();
            
            $message = "";
            $newFileName = "";
            $error = false;
            $data = array();
            
            try{
                $target = $this->_mediaDirectory->getAbsolutePath('wallpaper/');        
                
                //attachment is the input file name posted from your form
                $uploader = $this->_fileUploaderFactory->create(['fileId' => 'attachment']);
                
                $_fileType = $uploader->getFileExtension();
                $uniqid = uniqid();
                $newFileName = $uniqid .'.'. $_fileType;
                
                /** Allowed extension types */
                $uploader->setAllowedExtensions(['jpg', 'jpeg', 'png']);
                /** rename file name if already exists */
                $uploader->setAllowRenameFiles(true);
                
                $result = $uploader->save($target, $newFileName); //Use this if you want to change your file name
                //$result = $uploader->save($target);
                if ($result['file']) {
                    
                    $_mediaUrl = $this->_storeManager->getStore()->getBaseUrl(MagentoFrameworkUrlInterface::URL_TYPE_MEDIA);
                    
                    $_src = $_mediaUrl.'wallpaper/'.$newFileName;
                    
                    $error = false;
                    $message = __("File has been successfully uploaded");
                    
                    $html = '<div class="image item base-image" data-role="image" id="'. $uniqid .'">
                                <div class="wallpaper-image-wrapper">
                                    <div class="radioContainer">
                                        <input data-src="'.$_src.'" data-srctype="'. $_fileType .'" data-srcfilename="'. $newFileName .'" checked="checked" class="selectImage selectImage-'. $uniqid .'" type="radio" name="selectImage" value="'. $uniqid .'" />
                                    </div>
                                    <div class="imageContainer">
                                        <img class="wallpaper-image" data-role="image-element" src="'.$_src.'" alt="">
                                    </div>
                                    <div class="delete-action">
                                        <button type="button" class="action-remove" data-role="delete-button" data-image="'.$newFileName.'" title="'. __('Delete image') .'"><span>'. __('Delete image') .'</span></button>
                                    </div>
                                </div>
                            </div>';
                    
                    $data = array('filename' => $newFileName, 'path' => $_mediaUrl.'wallpaper/'.$newFileName, 'fileType' => $_fileType, 'html' => $html);
                }
            } catch (Exception $e) {
                $error = true;
                $message = $e->getMessage();
            }
            
            $resultJson = $this->resultJsonFactory->create();
    
            return $resultJson->setData([
                        'message' => $message,
                        'data' => $data,
                        'error' => $error
            ]);
        }
    }
    

    Step3: Create one “DeleteCustomize.php” file to delete your uploaded image.

    <?php
    namespace MagemonkeysWallpaperControllerIndex;
    
    use MagentoFrameworkJsonHelperData as JsonHelper;
    
    class DeleteCustomize extends MagentoFrameworkAppActionAction
    {
        protected $_pageFactory;
    	protected $connection;
        protected $_mediaDirectory;
        protected $_fileUploaderFactory;
        public $_storeManager;
        protected $_file;
    
    	public function __construct(
    		MagentoFrameworkAppActionContext $context,
            MagentoFrameworkAppResourceConnection $connection,
            JsonHelper $jsonHelper,
            MagentoFrameworkControllerResultJsonFactory $resultJsonFactory,
            MagentoFrameworkFilesystem $filesystem,
            MagentoMediaStorageModelFileUploaderFactory $fileUploaderFactory,
            MagentoStoreModelStoreManagerInterface $storeManager,
            MagentoFrameworkFilesystemDriverFile $file,
    		MagentoFrameworkViewResultPageFactory $pageFactory)
    	{
    		$this->_pageFactory = $pageFactory;
            $this->connection = $connection;      
            $this->jsonHelper = $jsonHelper;
            $this->resultJsonFactory = $resultJsonFactory;
            $this->_mediaDirectory = $filesystem->getDirectoryWrite(MagentoFrameworkAppFilesystemDirectoryList::MEDIA);
            $this->_fileUploaderFactory = $fileUploaderFactory;
            $this->_storeManager = $storeManager;
            $this->_file = $file;
    		return parent::__construct($context);
    	}
    
    	public function execute(){
            
            $_postData = $this->getRequest()->getPost();
            
            $message = "";
            $newFileName = "";
            $success = false;
            
            $mediaRootDir = $this->_mediaDirectory->getAbsolutePath();
            $_fileName = $mediaRootDir .'wallpaper/'. $_postData['filename'];
            if ($this->_file->isExists($_fileName))  {
                try{
                    /*$this->attachment->load($_postData['imageID']);
                    $this->attachment->delete();*/
                    
                    $this->_file->deleteFile($_fileName);
                    $message = __('File removed successfully.');
                    $success = true;
                } catch (Exception $ex) {
                    $message = $ex->getMessage();
                    $success = false;
                }
            }else{
                $message = "File not found.";
                $success = false;
            }
            
            $resultJson = $this->resultJsonFactory->create();
    
            return $resultJson->setData([
                        'message' => $message,
                        'data' => '',
                        'success' => $success
            ]);
        }
    }
    

    Step4: Create one “ImageCustomize.php” file to give the effects to your uploaded image. I have given some effect to an image as per my requirements.

    <?php
    namespace MagemonkeysWallpaperControllerIndex;
    
    use MagentoFrameworkJsonHelperData as JsonHelper;
    
    class ImageCustomize extends MagentoFrameworkAppActionAction
    {
        protected $_pageFactory;
    	protected $connection;
        protected $_mediaDirectory;
        protected $_rootDirectory;
        protected $_fileUploaderFactory;
        public $_storeManager;
        protected $_file;
    
    	public function __construct(
    		MagentoFrameworkAppActionContext $context,
            MagentoFrameworkAppResourceConnection $connection,
            JsonHelper $jsonHelper,
            MagentoFrameworkControllerResultJsonFactory $resultJsonFactory,
            MagentoFrameworkFilesystem $filesystem,
            MagentoMediaStorageModelFileUploaderFactory $fileUploaderFactory,
            MagentoStoreModelStoreManagerInterface $storeManager,
            MagentoFrameworkFilesystemDriverFile $file,
    		MagentoFrameworkViewResultPageFactory $pageFactory)
    	{
    		$this->_pageFactory = $pageFactory;
            $this->connection = $connection;      
            $this->jsonHelper = $jsonHelper;
            $this->resultJsonFactory = $resultJsonFactory;
            $this->_mediaDirectory = $filesystem->getDirectoryWrite(MagentoFrameworkAppFilesystemDirectoryList::MEDIA);
            $this->_rootDirectory = $filesystem->getDirectoryRead(MagentoFrameworkAppFilesystemDirectoryList::ROOT);
            $this->_fileUploaderFactory = $fileUploaderFactory;
            $this->_storeManager = $storeManager;
            $this->_file = $file;
    		return parent::__construct($context);
    	}
    
    	public function execute(){
            
            $_postData = $this->getRequest()->getPost();
            
            $message = "";
            $newFileName = "";
            $error = false;
            $data = array();
            $uniqid = uniqid();
            $mediaRootDir = $this->_mediaDirectory->getAbsolutePath();
            $rootDirectory = $this->_rootDirectory->getAbsolutePath();
            $_fileType = $_postData['fileType'];
            $_fileAction = $_postData['fileAction'];
    
            if($_postData['filename'] == '10221276943_45e198c6c6_4k.jpg')
            {
                $newFileName = $uniqid .'.'.$_fileType;
                $filePath = $rootDirectory . $_postData['filename'];
                $_fileName = $mediaRootDir .'wallpaper/'. $newFileName;
                $newFullPathOfImage = $_fileName;
                copy($filePath, $_fileName);
            }
            else
            {
                $_fileName = $mediaRootDir .'wallpaper/'. $_postData['filename'];
                $newFullPathOfImage = $mediaRootDir .'wallpaper/'. $uniqid .'.'.$_fileType;
                $newFileName = $uniqid .'.'.$_fileType;
            }
    
            if ($this->_file->isExists($_fileName)){
                try{
                    if($_fileAction == 1) /*** Grayscale (Black & White) ***/
                    {
                        if(strtolower($_fileType) == 'jpg' || strtolower($_fileType) == 'jpeg')
                        {
                            $im = ImageCreateFromJpeg($_fileName); 
    
                            $imgw = imagesx($im);
                            $imgh = imagesy($im);
    
                            for ($i=0; $i<$imgw; $i++)
                            {
                                for ($j=0; $j<$imgh; $j++)
                                {
                                    // get the rgb value for current pixel
                                    $rgb = ImageColorAt($im, $i, $j); 
    
                                    // extract each value for r, g, b
                                    $rr = ($rgb >> 16) & 0xFF;
                                    $gg = ($rgb >> 8) & 0xFF;
                                    $bb = $rgb & 0xFF;
    
                                    // get the Value from the RGB value
                                    $g = round(($rr + $gg + $bb) / 3);
    
                                    // grayscale values have r=g=b=g
                                    $val = imagecolorallocate($im, $g, $g, $g);
    
                                    // set the gray value
                                    imagesetpixel ($im, $i, $j, $val);
                                }
                            }
    
                            imagejpeg($im, $newFullPathOfImage);
                            $message = __('Image converted to grayscale.');
                            imagedestroy($im);
                        }
                        else
                        {
                            $im = imagecreatefrompng($_fileName);
    
                            if($im && imagefilter($im, IMG_FILTER_GRAYSCALE))
                            {
                                $message = __('Image converted to grayscale.');
                                
                                imagepng($im, $newFullPathOfImage);
                                imagedestroy($im);
                            }
                            else
                            {
                                $message = __('Conversion to grayscale failed.');
                            }
                        }
                    }
                    else if($_fileAction == 2) /*** Sepia Color Scale ***/
                    {
                        if(strtolower($_fileType) == 'jpg' || strtolower($_fileType) == 'jpeg')
                        {
                            // Load
                            $im = ImageCreateFromJpeg($_fileName);
    
                            imagefilter($im, IMG_FILTER_GRAYSCALE);
                            imagefilter($im,IMG_FILTER_BRIGHTNESS,-10);
                            imagefilter($im, IMG_FILTER_COLORIZE, 65, 50, 0);
                            
                            // Output
                            imagejpeg($im, $newFullPathOfImage);
                            imagedestroy($im);
                        }
                        else
                        {
                            // Load
                            $im = imagecreatefrompng($_fileName);
    
                            imagefilter($im, IMG_FILTER_GRAYSCALE);
                            imagefilter($im,IMG_FILTER_BRIGHTNESS,-10);
                            imagefilter($im, IMG_FILTER_COLORIZE, 65, 50, 0);
                            
                            // Output
                            imagepng($im, $newFullPathOfImage);
                            imagedestroy($im);
                        }
    
                        $message = __('Image converted to sepia.');
                    }
                    else if($_fileAction == 3) /*** Flip Image ***/
                    {
                        if(strtolower($_fileType) == 'jpg' || strtolower($_fileType) == 'jpeg')
                        {
                            // Load
                            $im = ImageCreateFromJpeg($_fileName);
    
                            // Flip it horizontally
                            imageflip($im, IMG_FLIP_HORIZONTAL);
    
                            // Output
                            imagejpeg($im, $newFullPathOfImage);
                            imagedestroy($im);
                        }
                        else
                        {
                            // Load
                            $im = imagecreatefrompng($_fileName);
    
                            // Flip it horizontally
                            imageflip($im, IMG_FLIP_HORIZONTAL);
    
                            // Output
                            imagepng($im, $newFullPathOfImage);
                            imagedestroy($im);
                        }
    
                        $message = __('Image flipped.');
                    }
    
    
    
                    $_mediaUrl = $this->_storeManager->getStore()->getBaseUrl(MagentoFrameworkUrlInterface::URL_TYPE_MEDIA);
                    
                    $_src = $_mediaUrl.'wallpaper/'.$newFileName;
                    
                    $message = __("File has been successfully uploaded");
                    
                    $html = '<div class="image item base-image" data-role="image" id="'. $uniqid .'">
                                <div class="wallpaper-image-wrapper">
                                    <div class="radioContainer">
                                        <input data-src="'.$_src.'" data-srctype="'. $_fileType .'" data-srcfilename="'. $newFileName .'" checked="checked" class="selectImage selectImage-'. $uniqid .'" type="radio" name="selectImage" value="'. $uniqid .'" />
                                    </div>
                                    <div class="imageContainer">
                                        <img class="wallpaper-image" data-role="image-element" src="'.$_src.'" alt="">
                                    </div>
                                    <div class="delete-action">
                                        <button type="button" class="action-remove" data-role="delete-button" data-image="'.$newFileName.'" title="'. __('Delete image') .'"><span>'. __('Delete image') .'</span></button>
                                    </div>
                                </div>
                            </div>';
                    
                    $data = array('filename' => $newFileName, 'path' => $_mediaUrl.'wallpaper/'.$newFileName, 'fileType' => $_fileType, 'html' => $html);
                    $error = false;
                }
                catch (Exception $ex) {
                    $message = $ex->getMessage();
                    $error = true;
                }
            }else{
                $message = __("File not found.");
                $error = true;
            }
            
            $resultJson = $this->resultJsonFactory->create();
    
            return $resultJson->setData([
                'message' => $message,
                'data' => $data,
                'error' => $error
            ]);
        }
    }
    

     

    How to disable auto-scroll on click in Collapsible widget Magento 2.3.3?

    If you want to disable auto-scroll on click in collapsible widget then you need to follow below instruction.

    1, You need to override lib/web/mage/collapsible.js to in your theme app/design/frontend/[vendor]/[themename]/web/mage/collapsible.js

    2, After that, you need to comment “elem.scrollIntoView();” this approx line no. 575 in your overwritten file

    Like:

     _scrollToTopIfVisible: function (elem) {
     if (!this._isElementOutOfViewport(elem)) {
     /* elem.scrollIntoView(); */
     }
     },

    Shopify vs. Magento: Which Is the Best E-Commerce Platform?

    One of the most critical decisions is to choose the right online store platform. This is the base of any eCommerce store. Therefore, it is essential to understand the requirements of your business and opt for the platform which works for you.

    There are several platforms available in the market for new businesses or existing ones not satisfied with their current platform. Two of the biggest platforms are Magento and Shopify.

    A comparison between the two would help you make the right decision about the platform, although they are entirely different.

    Let’s jump in!

    What is Shopify?

    Shopify is a hosted eCommerce platform, which means anyone can set up an online store. Shopify stores are plug-and-play e-commerce having a growing user base and it is good for small retailers. You will have to pay a monthly subscription fee to get the hosting infrastructure.

    What is Magento?

    Magento is an open-source technology. It comes in two versions the first is a free version (Community), and the second one is the premium version (Enterprise). It is a flexible platform, and merchants can fully control the look, content, and functionality of their online store. Magento has a massive user base from medium to biggest brands.

    Pros & cons of Magento vs. Shopify.

    Shopify Pros

    • A self–hosted platform, so no need to manage your server.
    • 24*7 Customer support
    • The website loads faster and securely.
    • Easy integration with another eCommerce platform.
    • Variety of mobile-ready storefront themes.
    • Not a single line of code

    Shopify Cons

    • Difficult to handle if integrated with lots of apps.
    • A transaction fee is charged per sale
    • No B2B Capabilities out of the box
    • Only 10 Shopify themes are free of cost.
    • No free plan available (just free trial)
    • It provides limited customization and flexibility.
    • It is not made for SEO optimization.

    Magento Pros

    • You can create your design, no limitation.
    • Feature-rich.
    • Being an open-source platform, you get extensive community support.
    • Great SEO features.
    • Free to use due to its availability in the public domain.
    • You can purchase or download it in just 1- click.
    • Easily handle the complexities of B2B commerce.
    • Continuous community support for users.
    • Enables merchants to sell customizable products and digital goods online

    Magento Cons

    • Steep learning curve.
    • Constant optimization for better speed and performance.
    • The server is chargeable.
    • As it is an open-source platform, virtually no support is available for it.

    Magento vs. Shopify- Feature Comparison: 

    Both platforms come with the basics that you need to build a successful online store.

    But what if you want to grow your store with more advanced tools?

    Magento has more built-in features than Shopify like personalized products, advanced site search, up/cross-selling, real-time shipping. When we talk about add-ons, the sky’s the limit of Magento with over 5,000 extensions, whereas Shopify has around half this number. Shopify penalizes businesses by charging transaction fees for not using their payment gateway.

    Magento vs. Shopify- Performance Comparison: 

    Both Magento and Shopify are well-designed and easy for any user to get started with running an online store. Shopify is a hosted solution, so the company takes the responsibility for its performance, whereas Magento 2 websites’ speed depends on the hosting services. If your Magento site has a reliable host with website optimization, then you don’t have to worry about the site’s performance.

    Magento vs. Shopify- Support Comparison:

    Shopify comes with dedicated customer support. Magento, on the other hand, offers community-based support from Magento experts and developers.

    Shopify users can get help through the documentation on the official site. It also provides extensive help and support via free and paid assistance. They also solve issues through email, phone calls, or chat.

    Magento is famous for its vast and helpful community, there is a Magento partner agency that helps with merchants from store creation, setup, management, etc. You can get around-the-clock service and support from their team of experts.

    Magento vs. Shopify – Product Management Comparison:

    The essential aspect of an eCommerce platform is to provide you with a product/inventory management system. Shopify lets you add only two types of products i.e., configurable and straightforward products. It works great if you have standard catalogs and trying to sell simple products. In the case of Magento, you can add different variations and more complex products such as configurable, downloadable, bundled, and virtual products. It caters to medium to large size businesses. Product management is quite easy in Magento.

    Magento vs. Shopify – Pricing comparison: 

    To begin with, Magento comes in two editions, Magento Open Source (free) and Magento Commerce, so with Magento open-source, you start at $0.00. On the other hand, Shopify has a subscription model, which means it offers a free trial for 14 days. After that, you will have to pay. The costlier options provide more advanced features such as statistics, gift cards, etc. It also charges for external payment gateways, whereas Magento charges are applicable in premium services.

    Which platform is better for your eCommerce Business?

    It is challenging to decide which eCommerce platform is best for every single store. If you want to run a large store and earn millions of dollars, then Magento is better for you, and if you want a quick store with 100 products, then Shopify may best suit your needs. Magento is a feature-rich platform and has limitless possibilities for add-on extensions. In addition to the enhanced Magento 2 is undoubtedly an excellent pick for your eCommerce businesses.

    Magento vs. BigCommerce: Which Is the Best E-Commerce Platform?

    Magento & BigCommerce are two great platforms, and both come with some crucial differences. Deciding which platform is better can be tricky, but we have done our research to help you choose the right platform for your business.

    What is Magento?

    Magento is considered to be the best open-source to build an online store. Merchants can control the look, shopping cart system, functionality of their online store. Magento provides SEO, catalog management, and powerful marketing tools.

    What is BigCommerce?

    BigCommerce is a paid-for, SaaS platform that allows merchants to set up an online store. It lets you do everything yourself, such as add products; upload photos, process orders, and more. It comes with attractive templates and back-end support

    FUN FACTS, FIRST!

    Currently, there are 2,50,000 online stores on Magento, whereas BigCommerce has 68,719 live stores.

    Now, let’s begin a head-to-head Magento vs. BigCommerce comparison.

    Magento vs. BigCommerce- Feature Comparison: 

    There are over 100 different add-ons in BigCommerce, which are available with paid options requiring monthly payment. Magento has more add-on extensions that can be easily integrated. It has many powerful features such as full control of management (inventory, product, customer accounts). Magento 2 has a newly upgraded checkout in which customers can quickly check out on one page. BigCommerce is a simple platform; you might face some difficulties if you want to customize the store according to your needs, on the other hand, Magento is highly flexible, and you can add excellent features as much as you wish.

    Magento vs. BigCommerce: Design Comparison 

    You cannot compromise on the appearance of your dream website. In BigCommerce, you have the option to choose from 7 free themes and 50+ paid themes. You can modify the theme as per your business need. In Magento, you can create your theme from scratch. If you hire the right Magento Development Company, you can be assured of getting an incredible theme. When it comes to design, Magento is more flexible than BigCommerce. With a bit of coding knowledge, you can easily customize your Magento store design.

    Magento vs. BigCommerce – Support Comparison:

    You can ask your questions on different forums from several thousands of professionals with competence as Magento has the community, which is a real strength of Magento. In contrast, BigCommerce has no such community behind; however, there is 24-hours daily support on the phone, e-mail, or through chat, which a paid service.

    Magento vs. BigCommerce – Function Comparison:

    BigCommerce and Magento, each of these platforms come with basic eCommerce functionality needs. With Magento, you can customize everything in a way so that ensures the best user experience in the online store. You can create as many products and product categories as you want, and also you can modify the characteristics of the products. BigCommerce does not have any out-of-box functionality

    Magento vs. BigCommerce – Security Comparison:

    Security is the topmost priority for any eCommerce store owner. Magento quite often releases patches and critical updates to ensure that the platform is free from bugs and vulnerabilities. To tighten the security level, you can add an extra layer of security in your store. BigCommerce offers enterprise-level security along with domain name and hosting. It offers free and paid SSL certification. GeoTrust verifies the paid ones, whereas the free ones only offer basic encryption. So to say, Magento is a haven for everyone (developers, store owners & customers).

    Magento vs. BigCommerce – Pricing comparison: 

    BigCommerce, lower price plans offer limited features as the standard plan does not include an abandoned cart saver, product filtering, etc. further, their plan for large companies, which is called Enterprise, contains individualized prices. On the other hand, Magento usually gets praised because it is an open-source platform, so you can easily download it from the official website and install the platform on your host account, which means store owners only need to pay for hosting. Overall, Magento is considered to be a world-class online shopping solution, which is free with options to upgrade.

    Pros & Cons of Magento vs. BigCommerce.

    Magento Pros

    • Free to run
    • Huge support community
    • Very flexible in design
    • Large Amount of SKUs
    • Multi-Country & Multi-Store Functionality
    • Free
    • Large developer community
    • Scalability
    • Great for SEO
    • Marketplace functionality
    • Advanced features through add-ons

    Magento Cons

    • Needs coding knowledge
    • Time-consuming
    • Pay for hosting and apps

    BigCommerce Pros

    • Sell across multiple channels
    • Great SEO functions
    • Stylish free and paid templates
    • Most built-in features of any platform

    BigCommerce Cons

    • Editing is complicated
    • Lack of customization
    • Can be pricey
    • No mobile app
    • Limited Free Themes
    • Uses complex terminology

    Which platform is better for your eCommerce Business?

    Choosing the right platform depends on your requirements. With this comprehensive comparison of both platforms, we can suggest you go for Magento because of its features, security, and flexibility. It can take your store to the next level of eCommerce. Magento is one of the most trusted platforms in the eCommerce industry.

    If you are still not sure about the platform, you can always hire Magento eCommerce developer to help you.

    Implementing buy button strategies checkout

    Speed is the name of the game in the eCommerce industry. The less time it takes shoppers to complete the checkout process, the less likely they are to abandon their carts and the higher the conversion rates a site is likely to have.

    The trouble is that it takes nearly two minutes — 118.5 seconds, in fact — to complete the average eCommerce purchase. That’s almost two minutes of filling out information fields like names, payment information, shipping addresses, billing addresses and more. Long, frustrating form fills like these can frustrate shoppers and drive them away.

    Buy buttons present a compelling solution to this problem. PYMNTS’ latest research shows that buy buttons reduce the time consumers need to complete purchases by 39.2 percent, and possibly even more, depending on a wide host of factors. The time saved by deploying buy buttons can change dramatically based on the industry of the merchants who use them, their annual sales and whether they provide guest checkout options, to cite a few examples.

    It can be difficult to keep track of all the factors that can change the impact buy buttons have on the sites that host them, so how are retailers to know that they are using theirs in the best manner that suits their unique circumstances?

    In the 2020 Buy Button Report: Customizing Implementation To Boost Conversion, PYMNTS examines the checkout processes offered by 1,052 of the web’s leading retail sites to assess the state of their buy button offerings, and how those offerings have made an impact on overall checkout experiences.

    Our research shows online shoppers stand to save a great deal of time from checking out via buy buttons, but not all merchants will see the same benefits from implementing them. Merchants that sell electronics can expect buy buttons to reduce their average checkout times by an entire minute (50.8 percent), for example, while buy buttons on quick-service restaurant (QSR) sites only decrease checkout times by an average of five seconds (3.9 percent).

    Some of this is unavoidable. It takes longer for consumers to specify what they would like to order at a QSR than it takes to select what they would like to purchase on electronics sites. QSR shoppers need to specify which item they might like, if they would like any add-ons and whether they might otherwise want to adjust their orders to suit their tastes. In contrast, electronics shoppers typically only need to select the make and model of items they would like to purchase.

    Industry is not the only factor that impacts buy buttons’ effectiveness, either. They also tend to change depending on whether or not the merchants that offer them provide guest checkout options. Buy buttons reduce checkout times on sites with mandatory user profiles by as little as a single second, but they reduce checkout times on sites with optional profiles and buy button-enabled guest checkouts by as much as 46 percent. This makes sense. There is no way to make checkouts shorter if shoppers need to fill out their information to make site profiles, anyway.

    Yet these are only a few of the ways in which retailers’ site metrics — even seemingly unrelated ones — can have a major impact on the effectiveness of their buy buttons.

    To learn more about how important it is for merchants to consider these factors when designing and implementing buy button strategies, download the report.

    Source : https://www.pymnts.com/news/ecommerce/2020/implementing-buy-button-strategies-checkout/

    What Is New In The Latest Version Of Magento 2? (Magento 2.3.4)

    What’s new in Magento 2?

    Magento released the latest upgrade of the Magento 2, which is Magento 2.3.4. The upgraded version has several security updates, improved PSD2-compliant core payment methods, 220 functional fixes, and more than 30 security enhancements.

    Now, let’s explore new features of Magento 2.3.4:

    Security improvements:

    This version upgrade has over 30 security enhancements.

    • The changes will help in removing the remote code vulnerabilities and will stop cross-site scripting. With no confirmed records of hackers’ pertaining to this version, Magento has identified this vulnerability, which can exploit and gain access to customer information via administrative controls.
    • Magento has advised using two-factor authentication, VPNs, IP Whitelisting, and unique solution instead of/admin and strong password to make hackers unable to access the administration panel.
    • The latest version comes with some fixes to core codes like the elimination of the custom layout, enhanced remote application execution.
    • Now you can add whitelisted factors in the template as Magento has redesigned its features of the content template.

    Enhanced Performance:

    • Through bundling mechanism, PHTML files are refactored to identify all dependencies on Javascript.
    • The latest version gives enhanced cache logic, which eliminates non-cached demands and the invalidation of the consumer section.
    • A new default has been introduced that will allow store owners to disable static collecting for report modules. You can go to System configuration > General>Reports>General Options; to enable it for better performance and turn it off when not needed.

    Platform Updates:

    Magento has performed several updates for enhancing website safety and compliance with PCI.

    • The latest third-party technology version of RabbitMQ V3.8 improves the message queue framework.
    • Magento 2.3.4 will not support Authorize.net payment methods; therefore, you need to use the official payment integration, which is available in the market.
    • The latest version of Redis V5.0.6 will give you enhanced page caching and session storage
    • Magento has developed support to employ a declarative scheme with MariaDB 10.2 and MYSQL.

    Improved Infrastructure: 

    • There are 250 enhancements to core quality in the Magento 2.3.4, which improves functionality, the quality of the framework and catalog, sales. Elasticsearch, PayPal, CMS, B2B, and import.

    Improvements in Merchant tools:

    • Magento 2 has integrated a new Adobe Stock integration extension, which will allow merchants to add high-quality images and videos to the web pages.

    Inventory Management:

    There are several enhancements made in inventory management performance:

    • Shopping cart problem has been resolved that caused higher than expected loads on the database server.
    • Inventory Reservations CLI command has been updated to minimize memory usage.
    • Multiple quality issues are solved like credit memos, stock mass, and grouped commodity,

    Improvements in GraphQL:

    Magento has released numerous enhancements in GraphQL to improve cart functionality, layered navigation, and other attributes.

    • Now, you can link carts to customers and render them on different services.
    • GraphQL users can easily do price rendering on the storefront with the improved method of returning price.
    • A cart can have promotional details.
    • Layered navigation will now have custom filters.
    • The issue related to product tax and product discount information is fixed.
    • The category data can be obtained by name, slug, or ID.

    CONCLUSION:

    There are significant improvements in Magento 2.3.4, and you can download and install the latest version in a plethora of ways. But, first, you need to understand your business requirements and join hands with a professional Magento development company that can handle the entire process seamlessly.

    What Do You Need To Know About The Most Awaited Magento 2.4 Release Expected Soon?

    Its official, Magento 2.4 to be released in the next couple of months in 2020. But this time it’s bigger and advanced.

    Magento has always been the talk of the town concerning its robustness, security, reliability, scalability, and capability to provide amazing features for both B2C & B2B businesses. And why would it be not so popular when it holds a prestigious place in the global market.

    If we look around Magento over the years, it has emerged to be one of the most promising hand-held solutions for businesses for several reasons.

    It was May 21, 2018, when Adobe acquired the Magento and from there it has gained momentum regularly releasing updates for security and quality to give utmost benefits for the whole Magento Community along with the Magento Commerce edition.

    There has been a lot of discussion and excitement when all the people and developers within Magento Community were rattled with the most awaited news of the updated release of Magento 2 to Magento 2.4 in the next couple of months.

    The Big News is here!!!

    We are well-versed with the fact that Magento regularly releases updates every quarter bringing in new features emphasized more on enhancing performance and security patches.

    The recent news of Magento 2.4 update about to be released soon will also have a lot of new features and improvements.

    The real thing was now when Magento’s engineer team worked in-depth consistently for a couple of months to focus on improving the performance of Magento and the interesting functionalities of GraphQL.

    Magento R & D team hinted along with the upcoming release of Magento 2.4 that developers will experience better GraphQL performance this time around along with a new concept of storefront API to be a show stopper for all. This particular update will have a lot of new features, improvement in performance, core components upgrade, product stability, etc.

    Magento Community has always been power-packed with dedicated contributors and high-performing that leads to consistent improvement as a popular open-source platform.

    This strengthened community support; we will be able to experience the improved core features, front-end framework, and a lot of tireless efforts to eliminate 100+ bugs right away.

    Remember, this time community has worked so hard that the subsequent announcement of additional features is yet to be revealed that may surprise us all to the next level.

    It is interesting to see Magento invite contributors to join the community project while they open new code repositories on GitHub about Magento 2.4 soon. This will be a platform where every individual contributor will be able to share their contribution with other Magento community members.

    There also have been planning by the Magento team to stop all the contribution-level work for their existing GitHub repository.

    As per the announcement of the new upgraded version Magento 2.4, other additional improvements are to be expected in the following directions:

    • Improvements in the functionality of GraphQL
    • Expected to include “shiny new API” together with tons of awesome new features, product stability, component upgrades, store performance, etc.
    • Better Progressive Web App technology for B2B and B2C types
    • Provide Full coverage to the admins in Magento Open Source, Commerce Edition, and Cloud-Based technology
    • Expected to introduce a new concept of the Storefront API
    • Better functionality for Admin UX
    • Improvements in the frontend framework
    • Improvements in Asynchronous Import functionality
    • Improvements in Magento 2 Commerce Cloud deployment process
    • Improvements in Page Builder and other extensions
    • Latest upgrades and updates in security patches
    • Hundreds of Bug fixes and tests

    This short but particular update from Magento has engraved enthusiasm into the minds of every beloved community member of Magento waiting to explore all the new features as early as possible

    By now, we assure you that your excitement would be at a peak, therefore, stay tuned for more detailed news of updates along with every bulletin of Magento 2.4 release. In case, if you want to upgrade your Magento store, contact certified upgrade experts to get the task done.