Il y a deux étapes pour remplacer le fichier Block, Model And Controller
1) Ajouter une préférence dans di.xml
2) Créer un bloc, un modèle et un fichier de contrôleur dans votre module
Espace de noms: Prince
Nom du module: Helloworld
Par exemple, pour remplacer le bloc de produit de catalogue ListProduct
1) Créer un fichier di.xml dans un dossierPrince/Helloworld/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="Prince\Helloworld\Model\Rewrite\Catalog\Product" />
</config>
2) Créer un fichier ListProduct.php dans un dossierPrince/Helloworld/Block/Rewrite/Product
<?php
namespace Prince\Helloworld\Block\Rewrite\Product;
class ListProduct extends \Magento\Catalog\Block\Product\ListProduct
{
public function _getProductCollection()
{
// Do your code here
}
}
Par exemple, pour remplacer le modèle de produit du catalogue.
1) Ajouter une préférence dans di.xml àPrince/Helloworld/etc
<preference for="Magento\Catalog\Model\Product" type="Prince\Helloworld\Model\Rewrite\Catalog\Product" />
2) Créer le fichier modèle Product.php dans un dossier Prince/Helloworld/Model/Rewrite/Catalog
<?php
namespace Prince\Helloworld\Model\Rewrite\Catalog;
class Product extends \Magento\Catalog\Model\Product
{
public function isSalable()
{
// Do your code here
return parent::isSalable();
}
}
Contrôleur prioritaire
1) Ajouter une préférence dans di.xml àPrince/Helloworld/etc
<preference for="Magento\Catalog\Controller\Product\View" type="Prince\Helloworld\Controller\Rewrite\Product\View" />
2) Créer View.php dans un dossierPrince/Helloworld/Controller/Rewrite/Product
class View extends \Magento\Catalog\Controller\Product\View
{
public function execute()
{
// Do your stuff here
return parent::execute();
}
}
Vous pouvez remplacer d'autres blocs, modèles et contrôleurs en utilisant la même approche.