Création d’un module magento 3/3 : Ajout d’un block
novembre 7, 2009 29 CommentairesDans les précédents tutoriels consacrés à la création de modules magento, nous avons vu comment créer un module, le référencer lui ajouter un controller et un layout. Notre module contient deux dossiers un controllers et un etc. Nous allons ajouter un autre élément important du module un block en créant un dossier Block qui contiendra un fichier monblock.php avec une méthode que nous appellerons dans un phtml.
Configuration du dossier Block de notre Module
Il faut déclarer notre block dans le fichier config.xml du module. Il se trouve dans
app\code\local\Magentocreation\Module\etc\config.xml
Dans le noeud config rajouter ce code :
<global> <blocks> <module> <class>Magentocreation_Module_Block</class> </module> </blocks> </global>
Explication du code :
Magento déclare le block grâce à la balise block vient,ensuite le nom du module. Ici c’est module. Je vous rappelle que nous travaillons depuis le début dans un nameSpace « Magentocration » et notre module est nommé Module. Il est important de noter que dans la déclaration de Block le nom du module est écrit sans majuscule. On déclare le chemin vers les fichiers de notre block =>
app\code\local\Magentocreation\Module\
Création du fichier block
A l’intérieur du dossier block créez un fichier php nommé « monblock.php » contenant ce code
<?php class Magentocreation_Module_Block_monblock extends Mage_Core_Block_Template { public function methodblock() { $message = '<h1>salut le block magento</h1>'; return $message; } }
Notez que le nom de la classe reprend le chemin vers celle-ci. Nous sommes dans le nameSpace « Magentocreation » dans le module « Module » dans le dossier « Block » et enfin dans le fichier « monblock.php ».
Dans cette classe créez une simple méthode methodblock() qui affiche un message « salut le block magento ». Cette classe étend la classe Mage_Core_Block_Template.
Notre block est maintenant déclaré et accessible, nous allons nous en servir au travers du layout crée lors du précédent tutoriel sur les modules magento 2/3.
Ajout instruction dans le layout
Dans le noeud content du layout « aveclayout.xml « rajouter ce code :
<block type="module/monblock" name="montemplateun" template="magentomodule/montemplateun.phtml"/>
voici le code complet
<reference name="content"> <block type="core/template" name="montemplate" template="magentomodule/montemplate.phtml"/> <block type="module/monblock" name="montemplateun" template="magentomodule/montemplateun.phtml"/> </reference>
Ce code rattache notre block « monblock.php » à un nouveau template « montemplateun.phtml que vous devez créer dans le dossier template de votre thème. Ce template aura donc accès à toutes les méthodes de la casse monblock.php ainsi que toutes les classes étendues par celle-ci.
Mise en application
Toujours avec cette url http://localhost/magento/Magentocreation-Module/index/aveclayout le contenu de montemplate.phtml s’affiche.
Pour afficher le contenu de montemplateun.phtml allez dans le fichier montemplate.phtml et appelez le template grâce à la méthode getChildHtml()
<?php echo $this->getChildHtml() ?>
Placez du contenu dans montemplateun.phtml ce code :
<?php echo "template appelé via getChildHtml()"; echo $this->methodblock(); ?>
Voici le résultat la première partie correspond au tutoriel numéro 2 sur les modules, le bas de la page à ce tutoriel. Vous voyez le contenu de la méthode methodeblock() s’afficher.
Bonjour,
J’ai suivi à la lettre le tuto, mais impossible d’afficher le contenu du block.
Pour la partie 2/3 création d’un module avec layout, tout fonctionne.
Pour information, si je change le type= »module/monblock » par type= »core/template », j’ai bien le message « template appelé via getChildHtml() ».
j’ai retiré l’appel de la fonction (monblock) pour faire des tests.
D’ou peut provenir le problème ?
Voici le contenu du fichier aveclayout.xml
page/3columns.phtml
Cordialement
Bonjour,
je n’ai pas reçu le code, mais wordpress le supprime il faut que tu l’entoures de
<pre lang = »php »>
</ pre>
Tu sa suivie le tutoriel depuis le début 1/3 2/3 3/3
tu sa les mêmes noms de modules et de block ?
re poste ton code entouré des balises.
J’ai eu le même probleme et en fait dans
il faut vérifier que « module » est bien le nom du module que tu as choisi et ça fonctionnera mieux
Enjoy
oups pardon je fais référence à ce code :
On ne vois pas le code dans les commentaires il faut l’entouré des balises pre lang= »php » pre
mais vous avez trouvez la solution pour le code.
Idem ici, le block ne s’affiche pas…
De plus j’ai une erreur si je force le type en « core/template »
Erreur:Invalid method Mage_Core_Block_Template::methodblock
Qu’avez vous changer dans l’attribut type pour que cela fonctionne ?
Mon controller: Entropia
Mon module: Reader
Merci d’avance
Bonjour
Fais le module magento avec exactement les mêmes noms que j’ai mis, tu verras, que ça marche. Ensuite tu pourras essayé de personnalisé comme bon te semble
Re !
Je viens de refaire avec les noms exactement comme dans ton tutorial, et… Ca ne marche pas…
Le block ne s’affiche pas…
Et si je change le type en core/template, j’ai tjs mon erreur
Invalid method Mage_Core_Block_Template::methodblock
LÃ je coince…
Je suis en 1.4.0.1
pour le block, vérifie que tu as nommé ton fichier Monblock.php
Hier ça ne fonctionnait pas non plus pour moi et comme les noms de classes doivent commencer par des Maj. avec Zend, j’ai fait la modif ce matin et maintenant le bloc s’affiche bien.
Bonjour,
j’aurais une question pas vraiment importante pour le moment mais qui pourrait l’etre a l’avenir O_o .
J’ai bien fais comme vous l’avez indiqué, cependant, l’affichage du block se fait en haut de page, et je n’arrive pas a modifier ca. Comment faire ?
Merci d’avance
Bonjour,
En haut de la page c’est normal. ou voulez vous le placer?
J’aimerais par exemple le placer en bas de page, ou au milieu ou que sait je. Je ne cherche pas vraiment a positioner a un point spécial, je cherche juste a savoir comment changer la position ^^. Je parle bien du message qu’affiche montemplateun.phtml .
Merci d’avance .
J’ai trouvé. En faite, c’est bien le fichier prévu pour ça qui le permet. J’avais modifié le layout en local, mais j’ai oublié de le renvoyer sur le serveur… je me disais bien que quelque chose n’allait pas XD . Désolé !!
Merci beaucoup pour ce tuto, et bonne continuation.
Bonjour à tous,
je pense avoir trouvé pourquoi l’affichage du « template appelé via getChildHtml() » ne marche pas.
Voici ce qu’indique le tuto pour aveclayout.xml :
Et voici ce que j'ai fais (et ça fonctionne sans soucis) :
En espérant que cela vous a aidé!
Salut merci pour la rectification en effet il y avait une erreur dans le code.
Bonjour,
j’ai testé un peu le code que vous avez fait en le modifiant pour voir le comportement de tout ça et j’ai un autre petit soucis.
Dans montemplate.phtml, j’ai retiré l’appel à la fonction getchildhtml, mais l’affiche de montempateun.phtml se fait toujours. Est ce normal ? Si oui, à quoi cela nous serre alors cet appel dans l’exemple ? O_o
Sinon, j’arrive pas à voir la correction faite par Genius, je vois le champ vide, quelqu’un pourrait il reposter la modif ? D’ailleurs, c’est bizarre. Si on compte pas mon fouarage concernant le nom d’un dossier, pour moi, ça a marché du premier coup.
@ Cédric :
Ma correction est désormais inutile, l’auteur de l’article a directement modifié son code
Salut,
Oui j’ai modifié le code car tous le monde ne regarde pas les commentaire. C’est normal que je mette des coquilles dans le code ça vous aide a être vigilant ^^
Serait il possible de changer cette phrase en mettant bien que le fichier doit s’appeler Monblock.php avec un « M » majuscule ? Je faisais de la customisation avec des requetes sur la base et j’ai rajouter un block pour voir les resultats en suivant votre tuto, et j’ai bien reperdu 30 minutes a verifier mes requetes plutot qu’a mettre un « M » XD ! Je fais la demande pour moi, mais aussi et surtout pour les futurs visiteurs de ce tuto .
C’est cette phrase :
« Création du fichier block
A l’intérieur du dossier block créez un fichier php nommé « monblock.php » contenant ce code »
Merci d’avance.
Bonjour,
Je ne comprend pas comment fonctionne getChildHTML. J’ai fais des testes en enlevant la fonction getChildHTML dans mon template, mais le second template est toujours appeler. Mon code de layout est identique au votre. J’effacé tous ce que j’avais dans montemplate.phtlm pour voir si cela affiche toujours mon second templates, etben oui !! Pourquoi ? est ce que j’ai manqué quelque chose ?
Bonjour,
Voici des précisions sur la méthode getChildHtml()
http://bloggento.fr/getchildhtml-/1398
Salut,
pour que getChildHtml() ça fonctionne correctement, il faut que le 2eme block soit inclus dans le premier block comme le code ci-dessous indique :
Crdlt.
le code :
Merci pour le code voici un tutoriel sur getChildHtml()
http://bloggento.fr/getchildhtml-/1398
Un grand merci pour ce tuto très bien fait et qui m’a permis d’y voir plus clair dans la création de block.
après la réalisation du tuto j’ai eut quelques soucis pour la prise en compte du template et donc j’ai simplement remplacé le nom du fichier monblock.php par Monblock.php, j’ai donc rajouté une majuscule !!
Salut,
Et oui il y a un piège c’est pour tromper l’ennemi
Il faut que je change dans le tuto merci pour le retour
Bonjour et merci pour ce tuto.
J’aimerais maintenant appeler mon block ailleurs que dans le module créé.
Est-ce possible ? Si oui, comment ?
Merci d’avance.
Elianora
Merci Cedric pour ces tutos
j’ai réussi, j’avais juste eu un petit problème ^^
dans « aveclayout.xml »
Je sais pas si le code sera visible, donc j’explique ^^
J’ai mis montemplateun.phtml dans un dossier template dans mon theme. donc dans aveclayout.xml, j’ai modifié magentomodule/template/montemplateun.phtml
Voila encore merci