Module magento : création d’un module simple 1/3

novembre 4, 2009 38 Commentaires

Créer un module magento peut paraître compliqué. Il faut créer du code un peut partout, mais en y regardant de plus prêt, ça n’est pas si difficile. Nous allons voir dans ce premier tutoriel consacré au module, comment créer un module simple (un controller, une action) qui affichera un texte. Vous devez au préalable avoir lu le tutoriel sur l’introduction au model vu controler MVC.

Déclarer le module à magento : code xml

Les modules sont déclarés dans le dossier magento\app\etc\modules.
Nous allons déclarer ici notre nouveau module en ajoutant un fichier Magentocreation_Module.xml. Au lancement d’un site, magento lit le contenu de ce dossier et initialise tous les modules.

<?xml version="1.0"?>
 
<config>
    <modules>
        <Magentocreation_Module>
            <active>true</active>
            <codePool>local</codePool>
        </Magentocreation_Module>
    </modules>
</config>

Une fois déclaré le module est activable et désactivable dans le back-office => système => configuration => avancé=> avancé.

Module désactivable dans le back office de magento

Module désactivable dans le back office de magento

Explication code module

On déclare ici le nouveau module dans la balise modules
On déclare le nom (nameSpace) de l’espace dans lequel le module sera classé « Magentocreation »(par convention on met une majuscule au début)
Le nom du module « Module » et on le rend actif (active true).
Ensuite on déclare dans quel dossier sera rangé le module. Trois dossiers ou l’on peut ranger les modules sont disponibles :
magento\app\code correspond au noyau de magento, c’est dans ce dossier que magento range ses modules
magento\app\code\local c’est ici que l’on range les modules que l’on développe
magento\app\code\community c’est ici que ce rangent les modules de magento connect (de la communauté magento)

Le module sera donc dans le dossier www\magento\app\code\local\

Configurer le module, le controller, le router, code xml : config.xml

Créer un fichier config.xml dans www\magento\app\code\local\Magentocreation\Module\etc\ mettre dedans ce code :

 
<?xml version="1.0"?>
 
<config>
    <modules>
        <Magentocreation_Module>
            <version>1.0</version>
        </Magentocreation_Module>
    </modules>    
    <frontend>
        <routers>
            <monrouteur>
                <use>standard</use>
                <args>
                    <module>Magentocreation_Module</module>
                    <frontName>Magentocreation-Module</frontName>
                </args>
            </monrouteur>
        </routers>
    </frontend>    
</config>

Dans ce code on déclare le router de la balise
MagentoCreation_Module correspond au nom du routeur. Vous pouvez spécifier le nom que vous voulez.
Standard correspond à la vue frontend opposé à admin pour le back office.
module MagentoCreation_Module indique à magento dans quel module aller chercher le controller
frontName MagentoCreation-Module nom du frontend. Vous pouvez mettre celui que vous voulez.

Création du controller

Vous devez créer le fichier IndexController.php du controller dans le dossier
www\magento\app\code\local\MagentoCreation\Module\controllers\

class MagentoCreation_Module_IndexController extends Mage_Core_Controller_Front_Action
{
  public function indexAction()
    {
     echo "Je viens de créer un module, ici l'action index de mon controller affiche ce texte";
    }
 
}

Mise en application du module

Dans le frontend de magento tapez cette URL :
urlSite/magento/Magentocreation-Module/index

Le texte apparaît « Je viens de créer un module, ici l’action index de mon controller affiche ce texte » sans aucune mise en page, ce qui est normal nous n’avons rattaché aucun layout ,template notre page. Essayez de rajouter une méthode dans le controller et de l’appeler via l’URL de frontend.

Dans un prochain tutoriel consacré au module, nous verrons comment ajouter une action au controller qui chargera un layout lui permettant d’agencer la page en ajoutant des blocs via getChildHtml().

Code
38 commentaires : “Module magento : création d’un module simple 1/3”
  1. Damien dit :

    Mon module n’apparaît pas Magento ne le reconnait pas. Quand est ce que le module est ajoute ?

  2. admin dit :

    Salut
    le module n’apparait pas ? tu as un message d’erreur ?
    tu peux voir dans le back office si le module et activé ou pas. magento liste les modules dans systeme configuration avancé avancé

  3. Ju dit :

    Meme probleme.
    Magento v1.4.0 stable.
    Le module n’apparait pas dans la liste des modules dans ysteme configuration avancé avancé.

  4. Julien dit :

    system->cache management, coche configuration et action refresh

  5. Sam dit :

    J’ai essayé de créer un nouveau module en suivant les indications ci-dessus. La seule différence est que j’ai changé les noms des répertoires et donc aussi des balises. Ca ne fonctionne pas.

    Y a-t-il des choses à savoir en plus sur les noms des balises.(Des choses à ne pas faire des conventions à respecter, etc…)

  6. seb dit :

    J’ai suivi le tuto au caractere pres, j’ai refresh le cache mais sa marche toujours pas…
    une idée?

  7. cédric rousset dit :

    il faut respecter ces noms est le chemin do module.

    quel nom tu as mis ?

  8. cédric rousset dit :

    je viens de le refaire avec des copier coller (donc au caractère près) ça fonctionne.

    la seule chose non mentionné dans le tutoriel du module c’est qu’il faut ouvrir la balise php dans indexcontroler.

    et pour l’url de test moi j’avais mis
    urlSite/magento/Magentocreation-Module/index
    ce qui correspondait a :
    localhost/magento/Magentocreation-Module/index
    A adapter si le debut de votre url est différent.

  9. lerocdur dit :

    Salut!!!
    J’ai tout vérifié, et le module est bel et bien présent et activé dans système configuration avancé avancé pourtant je reçois cette erreur:

    Not Found
    The requested URL /magento/Magentocreation-Module/index was not found on this server.

    A quoi est due cette erreur?

  10. cédric rousset dit :

    Salut
    Tu es sur d’avoir le même code ?
    tu peux faire des copier-coller :)
    Le module est activé c’est déjà bien.
    pour l’url il faut mettre toute l’url de ton site
    Si tu travailles sur un serveur local et que tu as installé magento dans un dossier « magento »
    http//localhost/magento/Magentocreation-Module/index
    j’ai enlevé les : après http pour ne pas que ça génère un lien sur le blog.

  11. achraf dit :

    ce lien http//localhost/magento/Magentocreation-Module/index
    n ‘affiche rien .

    ou est le probleme ???

  12. cédric rousset dit :

    Bonjour,
    ton module magento est présent dans le back office ? est sur « activé » ?
    Dans le lien que tu donnes il manque les :

  13. Romain dit :

    J’ai fait exactement ce qui est écrit. J’ai vidé le cache et supprimé les sessions mais j’ai ceci en message d’erreur:

    Not Found

    The requested URL /magento/magento/Magentocreation-Module/index was not found on this server.

    C’est normal qu’il y est 2 magento car j’ai un dossier magento dans un autre dossier magento

  14. cédric rousset dit :

    Bonjour,
    Supprimes un magento et ça devrait marcher
    magento/Magentocreation-Module/index

  15. Romain dit :

    Bonjour(désolé de l’avoir oublié)

    Je l’ai déja fait et ça fait la même chose

    Dans le frontend je ne peux pas accéder à Mon Compte ou Connexion ça me renvoie la même erreur.

    Aurais-je oublié de paramétrer quelque chose?

    HS: normal que mon commentaire affiche 16h13 au lieu de 17h13?

  16. cédric rousset dit :

    Bonjour,
    Tu as peut être oublier de fermer une balise, le module est dans le back office de magento sur activé ?
    Essaye aussi de remplir tes fichier avec mes données, fait des copier coller :)

  17. Romain dit :

    Bonjour,
    Dans le back office il est activé.

    Voici les codes:
    Magentocreation_Module.xml:

    true
    local

    config.xml:

    1.0

    standard

    Magentocreation_Module
    Magentocreation-Module

    IndexController.php:

    <?php

    class MagentoCreation_Module_IndexController extends Mage_Core_Controller_Front_Action
    {
    public function indexAction()
    {
    echo "Je viens de créer un module, ici l'action index de mon controller affiche ce texte";
    }

    }

    J'ai fait que des copier coller

  18. Romain dit :

    J’ai fait justement que des copier coller et ça ne marche pas

    Dans le frontend je ne peux pas accéder à Mon Compte ou Connexion ça me renvoie la même erreur. (je vais aller sur fragento pour cette erreur, cela résoudra peut être l’erreur pour la création de module.

    Les dossier sont (on sait jamais):
    C:\wamp\www\magento\magento\app\code\local\Magentocreation\Module\etc pour config.xml

    et
    C:\wamp\www\magento\magento\app\code\local\Magentocreation\Module\controllers pour IndexController.php

    Dans IndexController.php, faut t’il fermer la balise <?php car dans les autre fichiers cela reste ouvert?

  19. Thomas dit :

    Attention à bien marqué « etc » et non pas « ect » comme moi, ca ma valu deux bonne heures incompréhension, vérifier bien le nom de vos dossiers.

  20. Will dit :

    Salut,

    Pour tout ceux qui ont un problème essayez :
    URL /magento/index.php/Magentocreation-Module/index

    Ca a marché pour moi !

  21. kaitoshi dit :

    Bonjour,

    Pour les personnes qui ont un problème de page 404, c’est un problème au niveau du controller que magento ne trouve pas. Il faut donc bien vérifier que le nom de votre controller commence bien par une majuscule (IndexController.php).

  22. wafae dit :

    je viens de faire tous les étapes avec des copier coller mais le problème que lorsque j’actualise le frontend il m’écrit à l’extrémité de la page en haut le code entier c’est à dire:
    class MagentoCreation_Module_IndexController extends Mage_Core_Controller_Front_Action
    {
    public function indexAction()
    {
    echo « Je viens de créer un module, ici l’action index de mon controller affiche ce texte »;
    }

    }

  23. cédric rousset dit :

    Bonjour,
    Tu as ouvert une balise Php en haut du fichier ?

  24. begueradj dit :

    J’ai testé tous les tuto helloworld sur magento qui se trouvent sur le net et aucun d’eux n’a marché ! dire que magento est professionnel! Je n’ai jamais eu ce genre de problèmes avec prestashop

  25. cédric rousset dit :

    Il faut persévérer magento et mieux que prestashop mais aussi plus difficile à apprendre :)

  26. Alex dit :

    Salut, je suis en train de customiser mon Magento 1.5.1, j’ai suivi à la lettre ton Tuto (génial d’ailleur) seulement je me retrouve avec des erreurs quand je me rend sur la page module du frontend

    There has been an error processing your request
    Controller file was loaded but class does not exist

    Trace:
    #0 /home/secutec/www/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(329): Mage::exception(‘Mage_Core’, ‘Controller file…’)
    #1 /home/secutec/www/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(296): Mage_Core_Controller_Varien_Router_Standard->_includeControllerClass(‘/home/secutec/w…’, ‘Magentocreation…’)
    #2 /home/secutec/www/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(200): Mage_Core_Controller_Varien_Router_Standard->_validateControllerClassName(‘Magentocreation…’, ‘index’)
    #3 /home/secutec/www/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
    #4 /home/secutec/www/app/code/core/Mage/Core/Model/App.php(340): Mage_Core_Controller_Varien_Front->dispatch()
    #5 /home/secutec/www/app/Mage.php(627): Mage_Core_Model_App->run(Array)
    #6 /home/secutec/www/index.php(80): Mage::run( », ‘store’)
    #7 {main}

    une idée ?

  27. cédric rousset dit :

    Bonjour,
    Tu as essayer de faire des copier coller des codes du tutoriel ?

  28. Alex dit :

    Salut Cédric merci, pour cette réponse, oui j’avais déjà copier collé et je viens de le refaire attentivement, Toujours la même erreur.
    Cela ne viendrait-il pas de la version ?

  29. Loïc dit :

    J’ai le même problème, enfin pas exactement, j’ai suivi le tuto Helloworld d’Alan Storm (articles de la Knowledge base sur magento.com), je suis en version 1.5.1 et j’ai le message d’erreur « 404 page not found » il ne me dit même pas que le controller a été chargé. J’ai tout vérifier, pdt je sais pas combien d’heures, nom des dossiers, code xml, code php, j’ai mis les fichiers d’Alan Storm, vérifier les permissions de fichiers etc… etc.. ah oui et j’ai essayé sur la version 1.5.0 , exactement le même module, et il marche …donc oui a priori ça vient de la version 1.5.1.
    Quelqu’un à réussi sur la version 1.5.1 ?

  30. Alio dit :

    Bonjour,
    Je viens de lire le tuto, tres bien expliqué merci ! :)
    alors il y a je crois une erreur dans les chemins de déclaration du module dans le tuto il est écrit :
    magento\app\local
    magento\app\community
    alors que ce ne serait pas plutôt ça :
    magento\app\code\local
    magento\app\code\community

    dsl si je me trompe également …

  31. cédric rousset dit :

    Bonjour Alio,
    Effectivement tu as raison il manquait /code dans le chemin. Je l’ai rectifié thks :)

  32. Abdo dit :

    J’ai fait exactement copier coller . J’ai désactivé le cache j’ai trouvé que le plugin est activé ( back-office => système => configuration => avancé=> avancé) mais j’ai ceci en message d’erreur:

    404 Not Found
    The requested URL /magento/magento/Magentocreation-Module/index was not found on this server.

  33. Gégé dit :

    J’ai rencontré le même problème.
    La solution je l’ai trouvé ici :
    http://stackoverflow.com/questions/8889748/router-for-custom-module-not-being-recognized-by-magento

    System > Configuration > Web > Add Store Code to Urls = No

  34. rida dit :

    slt,pour le fichier IndexController.php il faut écrire la structure de php ()
    voila le code correcte de IndexController.php

  35. Rom dit :

    Bravo pour le site qui est très intéressant.
    Le tuto fonctionne très bien sur Magento 1.7 il faut juste faire attention à bien respecter les nomenclatures de nommage :-)

  36. hasnaa dit :

    merci beaucoup tu m’a sauvé la vie :)

  37. Hubert dit :

    où est-ce qu’on peut accéder à la page Module magento : création d’un module simple 2/3 s’il vous plait ? je ne trouve pas le lien. merci d’avance.

  38. Hubert dit :

    re: j’ai trouvé le lien. (problème résolu)

Poster un commentaire

(obligatoire)

(obligatoire)