Here we will learn overriding blocks, models and controllers in magento2.
Overriding Block
Lets override catalog product ListProduct block.
#1 – First of all create di.xml file in Folder Webkul/Hello/etc
<?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\Block\Product\ListProduct" type="Webkul\Hello\Block\Rewrite\Product\ListProduct" /> </config>
#2 – Now create ListProduct.php Block file in Folder Webkul/Hello/Block/Rewrite/Product
<?php /** * Hello Rewrite Product ListProduct Block * * @category Webkul * @package Webkul_Hello * @author Webkul Software Private Limited * */ namespace Webkul\Hello\Block\Rewrite\Product; class ListProduct extends \Magento\Catalog\Block\Product\ListProduct { public function _getProductCollection() { // Do your stuff here } }
You can override other blocks using same approach.
Overriding Model
Lets override catalog product model.
#1 – First of all create di.xml file in Folder Webkul/Hello/etc
<?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\Model\Product" type="Webkul\Hello\Model\Rewrite\Catalog\Product" /> </config>
#2 – Now create Product.php Model file in Folder Webkul/Hello/Model/Rewrite/Catalog
<?php /** * Hello Catalog Product Rewrite Model * * @category Webkul * @package Webkul_Hello * @author Webkul Software Private Limited * */ namespace Webkul\Hello\Model\Rewrite\Catalog; class Product extends \Magento\Catalog\Model\Product { public function isSalable() { // Do your stuff here return parent::isSalable(); } }
You can override other models using same approach.
Overriding Controller
Lets override product view controller.
#1 – First of all create di.xml file in Folder Webkul/Hello/etc
<?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="Webkul\Hello\Controller\Rewrite\Product\View" /> </config>
#2 – Now create View.php Controller file in Folder Webkul/Hello/Controller/Rewrite/Product
<?php /** * Hello Rewrite Product View Controller * * @category Webkul * @package Webkul_Hello * @author Webkul Software Private Limited * */ namespace Webkul\Hello\Controller\Rewrite\Product; class View extends \Magento\Catalog\Controller\Product\View { /** * @return \Magento\Framework\Controller\Result\Redirect|\Magento\Framework\View\Result\Page */ public function execute() { // Do your stuff here return parent::execute(); } }
You can override other controllers using same approach.
Can you please explain why return parent::isSalable(); is use in case of model calls rewrite but not use for block class rewrite?
Thanks