Dans ce tutoriel Magento nous allons étudier la récriture d’un block. Il n’est jamais correct de réécrire dans le core de magento, apprendre à faire une surcharge par héritage vous sera donc très utile.

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

 

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.

 

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: