Parfois on a besoin de changer le fonctionnement de magento, on veut par exemple modifier le comportement d’un block pour afficher une information en plus.Dans ce tutoriel nous verrons comment modifier un block natif de Magento.
Quand on veut faire ce genre de modification, il vaut mieux garder en tête une des règles de base du développement magento (attention si je fais une interro...ça tombera !! xD ):
On ne modifie JAMAIS le core de magento.
Oubliez donc l’idée d’aller modifier directement les fichiers du répertoire /app/code/core.
A la place, on va
surcharger le Block qu'on souhaite modifier. C'est-à-dire
créer une classe qui va étendre le Block du core et réécrire
seulement la partie qu’on veut modifier. Ensuite, pour pouvoir l’utiliser on la déclare notre nouvelle classe dans le fichier
config.xml1- Commencez par recréer un module dans votre dossier Pfay que vous appellerez Myproduct
Créez donc le dossier : /app/code/local/Pfay/Myproduct
Avec son etc/config.xml associé et n’oubliez pas de créer le fichier
Pfay_Myproduct.xml dans app/etc/modules/.
2- Créez votre Block « modifié »
Ce qui nous intéresse c’est de réécrire le block
Mage_Catalog_Block_Product_View. Nous voulons réecrire la méthode «
hasRequiredOptions» de ce Block pour qu'elle renvoie toujours TRUE.
On va donc créer dans /app/code/local/
Pfay/MonProduit/Block/Product/ un fichier
View.php.
Qui contiendra :
class Pfay_Myproduct_Block_Product_View extends Mage_Catalog_Block_Product_View
{
/**
* Check if product has required options
*
* @return bool
*/
public function hasRequiredOptions()
{
return true;
}
}
Notez que notre nouveau block est en fait défini comme d'habitude quand nous créeons un block sauf qu'il étends le bloc qu'on veut modifier à savoir : Mage_Catalog_Block_Product_View
3- Dites à Magento de prendre en compte la nouvelle version de ce Block
Editez le
config.xml de votre module
Myproduct comme ceci et mettez dedans :
<?xml version="1.0"?>
<config>
<modules>
<Pfay_Myproduct>
<version>1.0.0</version>
</Pfay_Myproduct>
</modules>
<global>
<blocks>
<catalog>
<rewrite>
<product_view>Pfay_Myproduct_Block_Catalog_Product_View</product_view>
</rewrite>
</catalog>
</blocks>
</global>
</config>
Grâce à ces balises, on dit à Magento que le block qui à pour code « catalog/product_view » (Mage_Catalog_Block_Product_View) sera remplacé par Pfay_Myproduct_Block_Catalog_Product_View.
Il prendra ensuite Notre nouveau Block à la place de celui de base.
Le comportement de notre méthode est modifié mais on ne perds pas les autres méthodes du block grâce à l'
extends du block natif Magento.
Conclusion:
Et voila ! Vous savez maintenant réécrire un block ;)
Comme d'habitude, N’hésitez pas à poser vos questions et si cela ne fonctionne pas chez vous téléchargez le code afin de le comparer avec le vôtre.