Les blocks et les helpers

L'attribut block de l'ajout d'un bloc

Lors de l'ajout d'un bloc dans un layout :

<block type="core/template" name="mon_block" template="mon/block.phtml" />

Le type désigne l'appel de la classe qui alimente le template.

Ainsi core/template désigne la classe Mage_Core_Block_Template. Le type core/template est le type de block par défaut de Magento.

Plus généralement, un layout qui ajoute un block de type module/monblock fera donc appel à la classe Namespace_Module_Block_Monblock.

Cette classe se trouve dans app/code/<codePool>/Namespace/Module/Block/Monblock.php.

Convention de nommage Zend

Une classe qui se trouve dans une arborescence a son nom de classe représenté par les noms des dossiers parents séparés par des underscores.

TP - Afficher le prix d'un produit sur la home

Pour cet exemple, nous allons charger un produit directement (à ne jamais faire !)

<?php $_product = Mage::getModel('catalog/product')->load($id) ?>

Utilisation d'un helper

Appel classique d'un helper :

<?php echo Mage::helper('checkout/url')->getCartUrl() ?>

Nous appelons ici la méthode getCartUrl() du helper checkout/url, qui correspond à la classe Mage_Checkout_Helper_Url.

Si seul le module est indiqué :

<?php echo Mage::helper('checkout')->formatPrice(10) ?>

Cela appelle par défaut le helper data (ici la classe Mage_Checkout_Helper_Data).

Chaque module que nous créerons devra avoir le helper par défaut Data.

Nous n'écrirons jamais d'URL en dur ! Nous passerons toujours par un helper qui renverra l'URL.

Appel à la fonction de traduction

Dans un block / helper :

<?php echo $this->__('Hello') ?>

Il faut ensuite ajouter la traduction dans le fichier app/design/frontend/notre_interface/default/locale/fr_FR/translate.csv.

"Text in english","Texte en français"

Pourquoi est-il possible d'appeler cette même fonction de traduction dans un template phtml ?

TP - Récapitulatif

Dans le footer, recréer un "mini-cart" de la forme "Mon panier (6 items - 2 articles différents). Nous n'afficherons pour le moment pas le total dans le panier.

Attention à la traduction !