Guide Magento Developpeur (Leçon 3) – Créer un Block
27 juillet 2010Ce tutoriel est le 3eme d’une longue série, si vous ne l’avez pas déjà fait je vous conseille de lire les tutoriels en commençant par le sommaire de cette série. Nous avons précédemment crée un module, nous allons maintenant apprendre à créer et afficher un Block magento.
Pourquoi créer un block ?
Pour l’instant, votre module est un peu « simple », vous pouvez exécuter des traitements mais son utilité est assez limitée. Nous allons maintenant apprendre à afficher du contenu en utilisant un template, c’est à ca que sert un block ![]()
Comment ca marche ? ok on va faire un petit rappel :
Le controller, appelle votre layout pour savoir ce qu’il doit afficher, dans ce layout, vous placez des blocks qui sont en fait une sorte de « mini controller » (qui vont par exemple récupérer une liste de client). Ces blocks font ensuite appel a des templates pour afficher leurs informations.

Maintenant que vous avez compris comment ca marche, la seule façon de comprendre c’est de le faire alors allons y !
Etape 1 : Appeler le layout dans le controller
Pour rappel, votre module se situe dans /app/code/local/Pfay/Test/. Le nom du module est donc Test et il se trouve dans le namespace Pfay
Allez maintenant ouvrir votre controller :
/app/code/local/Pfay/Test/controllers/IndexController.php
Et le modifier comme ceci :
class Pfay_Test_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout();
$this->renderLayout();
}
public function mamethodeAction()
{
echo ‘test mamethode’;
}
}
Comme vous le voyez, j’ai rajouté dans mon action index, deux petites lignes. Ces lignes vont chercher ce qu’il faut afficher quand on arrive sur cette action (en allant a l’url http://votresite.com/test/index par exemple).
$this->loadLayout(); //Va chercher les elements à afficher $this->renderLayout(); //Affiche les elements
Pour l’instant, il n’y a plus rien a faire sur le controller. Nous avons indiqué a notre controller qu’il doit aller chercher les informations dans le layout, allons maintenant voir ce qui se passe du coté du layout…
Etape 2 : Déclarer les éléments à afficher grâce au Layout.
Pour commencer avant de pouvoir utiliser le Layout, (et la si vous avez lu les tutoriaux précédents vous commencer a vous douter de la suite…) on doit le déclarer, c’est-à-dire, déclarer a magento qu’il va pouvoir l’utiliser et qu’il existe. Pour cela allons dans notre fichier config.xml. (qui se trouve dans le repertoire /etc de votre module).
Ouvrez le et rajoutez y dans <frontend> et apres <routers> :
<layout>
<updates>
<test>
<file>test.xml</file>
</test>
</updates>
</layout>
Ce petit bout de code en xml vous permettra de déclarer votre fichier test.xml comme étant le layout de votre module Test (parce qu’il est dans le config.xml de votre module Test)
Maintenant, déclarons le dossier ou vont se trouver les Blocks :
Dans <config> et âpres <frontend> rajoutez maintenant :
<global>
<blocks>
<test>
<class>Pfay_Test_Block</class>
</test>
</blocks>
</global>
Dans <global> vous déclarez vos Blocks, c’est aussi ici que vous déclarerez par la suite vos Model et vos Helpers (on verra plus tard ce que c’est).
Remarque importante :
Sous Magento quand vous déclarez vos classes, le nom de votre classe correspond au chemin vers ce fichier, ainsi notre controller Pfay_Test_IndexController se à l’adresse suivante : /app/code/local/Pfay/Test/indexController.php
Vous en déduisez donc que les noms de vos Blocks seront du type Pfay_Test_IndexController_MonBlock
Maintenant que le fichier config.xml est configuré et que magento est capable de trouver notre layout et nos blocks, allons voir ce qui se passe du coté du Layout !
Le layout :
si vous vous souvenez bien, dans la première leçon de ce tutoriel, nous avions vu qu’un module contient une partie code et une partie template qui se trouvent a deux endroits différents dans les répertoires de magento.
Le layout fait partie de la partie « template », nous avons déclaré dans le config.xml de notre module qu’il s’apellera test.xml
Allez maintenant dans le repertoire layout de votre théme Magento.
Dans notre exemple, le template utilisé actuellement dans magento se trouvera dans le repertoire suivant: \app\design\frontend\pfay\theme\ .
Nous allons donc créer un Layout test.xml dans le répertoire \app\design\frontend\pfay\theme\layout\
Une fois ce fichier crée, éditez le et copiez dedans :
<layout version="0.1.0">
<default>
<reference name="content">
</reference>
</default>
<routeurfrontend_index_index>
<reference name="content">
<block type="test/monblock" name="afficher_monbloc"
template="test/afficher.phtml" />
</reference>
</routeurfrontend_index_index>
</layout>
Je ne vous explique pas comment cela fonctionne, si vous ne comprenez pas ce code je vous conseiller d’aller lire le guide du designer magento et d’etre au point la dessus avant de commencer a essayer de développer un module.
Je vais quand même vous rappeler a quoi servent quelques bout de code au cas où ![]()
<routeurfrontend_index_index>
…
</routeurfrontend_index_index>
Pour indiquer a magento quels blocks rajouter dans quelle page, on a créer le Layout !
Ce layout defini des pages, a l’intérieur de ses pages, on ajoute ses blocks. Une page s’écrit de la forme suivante : « nom du routeur »_ « nom du controller »_ « nom de l’action »
Ainsi quand on veut accéder à notre action http://votresite.com/test/index, on a défini dans le config.xml le nom du routeur a routeurfrontend, on sait que le controlleur appelé dans ce cas la est le controller IndexController.php, et que la méthode appelée sera IndexAction().La page sera donc dans le layout représenté par la balise : routeurfrontend_index_index
Et on mettra à l’intérieur l’instruction :
<block type="test/monblock" name="afficher_monbloc" template="test/afficher.phtml" />
Qui signifiera pour magento « crée un block que tu iras chercher dans le module Test, qui s’apellera « monblock » et qui utilisera le template « afficher.phtml » qui se trouvera dans le dossier « test » du dossier « template ».
Etape 3 : Créer le block
Maintenant, il faut créer le block « monblock », allez donc dans le dossier que vous avez défini dans le config.xml pour stocker vos blocks (app/code/local/Pfay/Test/Block) et créer le fichier Monblock.php dedans.
Ce fichier contiendra :
<?php
class Pfay_Test_Block_Monblock extends Mage_Core_Block_Template
{
public function methodblock()
{
return ‘informations de mon block !!’ ;
}
}
Ce fichier n’est juste qu’une classe de type Block (Mage_Core_Block_Template) avec une méthode methodblock() qui retourne une phrase (de type String)
Etape 4 : Créer le template
Allez maintenant dans le répertoire \app\design\frontend\pfay\theme\template\
Et créer un répertoire « test » avec à l’intérieur un fichier afficher.phtml.
Ce fichier contiendra :
<?php
echo $this->methodblock();
?>
Comment ca marche ?
On a defini un block de type “test/monblock” dans le layout, qui fait appel a notre template afficher.phtml, on peu donc accéder dans afficher.phtml aux méthodes de notre block grace a la variable $this
Etape 5 : Tester !!
Allez maintenant sur http://votresite.com/test/index et vous voyez maintenant s’afficher votre site avec comme contenu un texte : « informations de mon block !! »
Fin de ce tutoriel ?
Maintenant, vous pouvez insérer de block avec ce template dans n’importe quelle page de votre site J. Notre exemple est simple car le but est de comprendre comment fonctionne Magento donc notre block n’a pas vraiment d’utilité.
Un block sert en général a faire des traitements du style lister les 5 derniers produits ajouté dans votre boutique Magento, afficher un formulaire de contact ou un formulaire pour faire un devis rapidement…tous ces blocks vous seriez content de pouvoir les remettre a plusieurs endroits de votre site juste en insérant une petite ligne dans votre Layout non ? Ok maintenant vous avez compris a quoi sert un block et comment en crée un ![]()
Voila c’est la fin de ce tutoriel, j’espère que ce tutoriel vous a plus, n’hésitez pas a laisser des commentaires si vous avez des questions ou des remarques éventuelles ![]()



Impossiblede réussir ce tuto, je ne comprend pas.
Et il y a quelque chose que je ne comprends pas, c’est ce passage :
« Vous en déduisez donc que les noms de vos Blocks seront du type Pfay_Test_IndexController_MonBlock »
Comment en arrive t’on à cette déduction, pourrais tu expliquer un peu plus en détail, ça m’aidera beaucoup ! Merci
Pour information, je n’ai pas d’erreur mais mon site n’affiche aucune phrase. L’espace au centre est vide.
J’ai vérifié et revérifié plusieurs fois mais je ne vois pas mon erreur. J’ai comme l’impression qu’il ne trouve pas ma classe ou quelque chose comme ça.
@twentyfloyd et concernant le nom des classes c’est la convention PEAR qui s’applique donc dossier1/ssdossier2/ssdossier3 => dossier1_ssdossier2_ssdossier3 par contre pour la déclaration du controller c’est différent
@twentyfloyd je viens de finir cette étape si rien de s’affiche t’as forcement oublié une partie bref chez moi ça marche
mais qu’est qu’on se perd avec tous ces dossiers pourtant je développe sous zend F donc je devais avoir l’habitude
Ah non, erreur bête lol.
Quand tu parlais du répertoire « \app\design\frontend\pfay\theme\template\ » j’ai créé les même alors qu’il fallait tout placer dans nos repertoires « interface » et « thème » persos (pour moi c’etait base/default et non pfay/test)
Même erreur que twentyfloyd, bien vu et merci pour ton retour!
Bonjour tout le monde,
je débute avec le développement de modules sous Magento, j’ai suivi le tutoriel, et je ne sais pas exactement ou est ce qu’on doit mettre les fichiers des template et layout dans le cas d’une installation basique de Magento, avec les templates par défaut; cad. a la place de « \app\design\frontend\pfay\theme\template\ », dans quels dossiers doit on placer nos fichiers ??? Je me bloque la. Help !
La partie concernant le fichier du layout test.xml contient un caractère html superflu ( ) qui peut causer une erreur…
On attends sinon le reste des leçons.
Bonne continuation
Bonjour,
c’est un trés bon tutorial, sauf que j’ai pas réussir a afficher le « informations de mon block !! »
merci de nous dire ou il faut metre le fichier theme !! c’est meme prob que Bizboss.
Svp une reponse pour que je continu le reste de tuto sinon je suis bloqué a ce niveau
merci
Si les autres ont réussi, vous allez y arriver aussi
@Hatem : Si tu as une erreur, refais le tutoriel jusqu’à ce que tu n’en ai plus, tu as du oublier un truc c’est tout
bon courage.
Bonjour, je n’ai pas réussi à afficher le block, je ne comprends pas ou il faut le mettre j’ai essayé de le mettre dans tous mes thèmes, j’utilise pas le thème de base de magento mais un perso « montheme » en le mettant dedans çà ne fonctionne pas ainsi que dans 100% des autres themes base/default/* et default/* je n’utilise plus le nom Pfay et je l’ai modifié par « Mage » sur toutes les pages et nom de page et nom de répertoire c’est frustrant….
J’ai même désactivé mon thème pour utiliser celui par défault, désactiver le cache… refait le tuto 3x.
Je veux utiliser mon theme perso ‘montheme » ou je dois mettre ces fichiers je comprends plus rien aidez-moi please je craque :
Permettez moi de vous dire que ce n’est pas assez précis pour des novices tels que moi, j’ai même créer ces chemins sans succès :
<<>>
Sur les commentaires précédents « Bizboss » indique qu’il y’a une erreur de caractère superflu mais bien sûr il ne dit pas lequel des caractères…. Quelqu’un pour être clair ou l’auteur pourrait-il m’aider svp ou est-ce possible d’avoir tous les fichiers dans un zip?
Merci pour les tutos qui sont prenant mais pas assez détaillés, dès le début c’est un peu flou, pas assez précis tout çà si c’est destiné à des débutants pour des experts c’est peut-être clair mais là moi je rame…?
bonjour;
je refais le tuto plusieurs fois et je n’arrive pas a trouver l’error.
le probeme: la methode $this->loadLayout() n’affiche pas le template test/afficher.phtml
bonjour;
je refais le tuto plusieurs fois et je n’arrive pas a trouver l’error.
le probeme: template de block ne s’affiche pas
Hello Merci beaucoup pour ce tutoriel.
Pour ceux qui n’arrive pas a afficher informations d emon block au tout simplement ceux qui se rendent compte que la template afficher.phtml ne s’affiche pas l’erreur vient surement (si c’est comme moi dans votre declaration dans config.xml) .
Quand Pierre Fay dit :
« Dans et âpres rajoutez maintenant »
Il s’agit en fait d’apres et la meme chose pour
« Ouvrez le et rajoutez y dans et apres : »
Il faut en fait rajouterr apres
Votre fichier config.xml devrait ressembler a cela au final
1.0.0
standard
Pfay_Test
test
test.xml
Pfay_Test_Block
j’espere que cela aidera certain, merci en tout cas pour le tuto qui est génial
Dans
test.xml
A quoi correspond le noeud test, je n’ai pas bien saisi.
Merci
Oups,
Dans le noeud blocks, à quoi correspond le noeud test?
Merci
Pensez à désactiver le cache de Magento afin de pouvoir afficher le résultat de vos block et template
j’ai suivie tout les étapes mais je n’arrive pas a afficher le message
Bonjour à tous
j’ai suivi le tuto lecon1 et lecon2 (d’ailleurs il y avait des erreurs…)
j’en suis sorti indemne mais la je ne sais pas pourquoi ca ne m’affiche pas le résultat esquonté !
Quelqu’un a t il une solution ??
Je voulais savoir comment faire pour placer le module que l’on vient de créer par exemple dans la colonne de droite de toutes les pages de notre site.
Bonjour,
Merci pour ce tutoriel bien détaillé et en francais. Cependant, je fais exactement ce qu’il est indiqué et la phrase ne s’affiche malheureusement pas.
Il doit soit y avoir une erreur de compréhension qui visiblement à l’air récurrente, soit ce tuto ne fonctionne pas avec la version 1.5 fraîchement installée et utilisant le thème de base ?
Voici les sources générées avec les explications données http://mundo-libre.org/dossier_app.zip
Quelqu’un qui aurait réussit pourrait-il me dire ce qui cloche ou partager ses sources ?
Sans cette partie, le reste de la série est inutilisable.
Merci merci.
Je pense que les solutions ont été données par twentyfloyd et reveur. Pour moi tout marche niquel avec les configs suivantes:
*Mon config.xml:
1.0.0
standard
Pfay_Test
test
test.xml
Pfay_Test_Block
*Ne pas créer de répertoire design/frontend/pfay, mais mettre directement le répertoire test (avec dedans afficher.phtml) dans design/frontend/base/default/template, ainsi que test.xml dans design/frontend/base/default/layout.
* Bon courage à tous
Le copier/coller de mon config.xml ne passant pas intégralment, je fais une petite traduction du tuto de Pfay:
« Dans config et âpres fronted rajoutez maintenant » veut dire en fait » dans la balise config , mais après le bloc fronted , dont rajoutez après /fronted les lignes données »
Merci pour cette série de tuto, c’était quelque chose qui manquait.
J’ai réussi à afficher le test « afficher les information de mon block », après plusieurs tentatives.
Si ça peut aider certains, voila ou j’ai fais l’erreur, à l’étape 2 de ce tuto (Étape 2 : Déclarer les éléments à afficher grâce au Layout)
Il faut déclarer les élément aprés les balises FERMANTES donc aprés: et aprés
aie… ca s’est pas afficher, je disais aprés les balises FERMANTES donc aprés et aprés
en esperant que ca s ‘affiche la..
Après quelques tutos et beaucoup de prise de tête veillez bien à désactiver le compilateur de magento qui peut être la source de beaucoup de dysfonctionnements.
) A modifier dans système->outils->compilations.
(par ex. des blocks qui ne s’affichent pas des observers qui n’observent pas
Si pierre a plus d’informations à ce sujet je suis preneur.
Merci
perso je viens de le refaire, il marche nickel, j’ai eu un soucis parce que j’avais appelé le nom de mon dossier « Bloc » au lieu de « Block » a par ca vous devriez vous en sortir
Exact, même sous magento 1.6.0.0, tout est fonctionnel !
Si vous avez un problème alors vérifiez tout.
Perso, il a fallu que je travaille sous app/design/frontend/base/layout et template.
En tout cas Merci Pierre Fay
J’ai eu le même problème des plupart en vous.
J’ai trouver la solution en suivant les commentaires:
- Ne pas créer de répertoire design/frontend/pfay, mais mettre directement le répertoire test (avec dedans afficher.phtml) dans design/frontend/base/default/template, ainsi que test.xml dans design/frontend/base/default/layout.
- aie… ca s’est pas afficher, je disais aprés les balises FERMANTES donc aprés et aprés
en esperant que ca s ‘affiche la..
Bonjour,
Merci beaucoup pour ces tutos
Que je souhaiterais que ça marche d’entrée de jeu…
J’ai effectué les modifications, le tuto precedent fonctionnait sans problemes.
Cela ne fonctionne pas sur ce tuto (1.6.1.0 sous wamp), au bout de 2heures à tourner en rond sur 5 pauvres fichiers, je me dis que c’est pas moi qui deconne. Je decide de revenir en arriere avec simplement les 3 fichiers pfay_all.xml, config.xml, IndexController.php, autant dire, rien, et voilà que ça ne marche plus.
Alors, si un CMS sert à gagner du temps, le temps passer à comprendre des bugs de parametrage est plus que rageant quand on sait développer sans tous ces objets fort facecieux…Je rencontre beaucoup moins de probleme sur un framework comme synfony par exemple.
Je ne comprend pas pourquoi j’ai à passer autant de temps pour realiser une action si simple au final…j’en perd mes cheveux 80
Je ne mets pas le tuto en doute, mais Magento qui provoque trop d’erreur 404 pour rien.
Oops…j’ai trouvé, conflit de il ne faut pas 2 fois le même nom à priori. Il est arbitraire et même dans deux modules sépares il doit être différent!
Il m’en aura fallut du temps pour capter ça…
Les balises html font qu’il manque quelque chose dans le texte ci dessus, mais en fait il ne faut pas 2 fois le meme nom ( là ou dans le tuto il y a routeurfrontend ) dans le meme projet magento.
Pour ma part j’ai eu un souci d’affichage dans le contenu, j’ai modifié mon fichier appelé « test.xml » dans le présent tuto et j’y ai mis :
<?xml version="1.0"?> <layout version="0.1.0"> <default> <reference name="content"> <block type="test/Testblock" name="afficher_block" as="afficher_block" template="test/afficher.phtml" /> </reference> </default> </layout>Pour moi ça fonctionne à présent,
merci à toi Pierre…
Merci Epinasse
bon courrage pour la suite des tutos
ce tuto est très bien, mais il faut absolument faire attention à certains chemins évoqués..
quand P.Fay indique de placer le fichier xml dans le layout du frontend, c’est dans le dossier layout DE VOTRE THEME ! et pas dans celui de P. Fay.
Ensuite, le fichier phtml de l’exemple doit lui aussi etre placé dans votre theme, dans le sous dossier template, et dans le dossier de votre module
/app/design/frontend/default/(montheme)/template/test/afficher.phtml
attention aussi avec les copier/coller depuis cette page.. ça récupère les numéros de ligne
je confirme ce que dis stephan c’est dans votre théme que ca doit etre mis, (pour moi c’est Pfay le dossier de mon théme mais c’est pas forcément le votre). Merci Stéphan
Merci beaucoup pour ce tutoriel.
Comme certains, j’ai rencontré quelques problèmes.
Pour ma part le problème se situait dans le fichier test.xml :
- Remplacer type= »test/monblock » par type= »test/Monblock » car mon fichier est Monblock.php et non monblock.php
Visiblement il faut être très prudent avec les majuscules / minuscules !
Merci pour le tutorial, seulement pour info:
les php tags controllors et block
regarde bien le test.xml en finale c comme suivant pour que ça s’affiche
1.0.0
standard
Pfay_Test
test
test.xml
Pfay_Test_Block
Pfay_Test_Model
test_mysql4
Pfay_Test_Model_Mysql4
pfay_test
core_write
core_read
Merci