Surcharger un block dans magento

Article publié par : (Google+ Profile) Mis à jour le 20 Dec 2017 (publié depuis le )

Que pensez-vous de cet article ?

OR

Une fonctionnalité de magento vous convient mais n'est pas aussi aboutie que vous le souhaitez? ou encore votre client souhaite un rendu différent? Nous allons étudier la procédure dans cet article.

menu configuration affichage block et template

Tout d'abord je vous invite à vous rendre dans le back office dans system configuration developper puis de choisir le niveau main website. Passez à Yes les options template path Hints et add block names to hints puis sauvegarder et purger les caches. Vous verrez apparaître les nom des fichiers de templates et block correspondants sur vos pages en frontend comme le monte la capture d'écran suivante:

affichage developer mode en frontend

Nous allons ici modifier le contenu du block Stock:
frontend/base/default/template/catalog/product/view/type/default.phtml
Mage_Catalog_Block_Product_View_Type_Simple

Une surcharge se passe en deux étapes:

  1. Configuration de la surcharge dans le config.xml
  2. Surcharge dans le fichier de block php

Mettre en place la surcharge dans le config.xml 

 Imaginons que votre namespace est valibus et que votre module s’appelle showstock

<global>
	<blocks>
		<showstock><class>Valibus_Showstock_Block</class></showstock>
		<catalog>
			<rewrite>
				<product_view_type_simple>Valibus_Showstock_Block_Product_View_Type_Simple</product_view_type_simple>
			</rewrite>
		</catalog>
	</blocks>
</global>

Comme vous le voyez on commence par déclarer l'emplacement des classes de block dans notre module, puis la surcharge ou héritage dans le module.

Pour comprendre la syntaxe de la réécriture c'est simple,  on déclare d'abord le nom du module réécrit, on indique la balise rewrite puis entre les balises qui contiennent le nom du block du module d'origine ( <product_view_type_simple> ) on indique le nom de notre classe qui contient la réécriture.

Extension de la classe block du Core

Le plus simple (et plus cohérent) ici est de créer une arborescence identique à l'origine dans notre module, de plus, c'est évolutif au cas on aurait besoin de surcharger d'autres classes du même module.

<?php
class Valibus_Showstock_Block_Product_View_Type_Simple extends Mage_Catalog_Block_Product_View_Type_Simple {
    public function checkOverStock() {
        $product= $this->getProduct();
            if($product->getStockItem()->getQty()>20){
                return true;
            }
            return false;
    }
}

Ici rien d’extraordinaire on définit juste une fonction qui teste si il y a plus de 20 item en stock, on peut la mettre en application en modifiant le template ainsi:

<?php if($this->checkOverStock()): ?>
<ul class="messages">
	<ul>
		<li>Beaucoup de stocks disponibles !</li>
	</ul>
</ul>
<?php endif;?>

Que pensez-vous de cet article ?

Aucun avis pour le moment, soyez le premier à laisser le votre !