Créer un module d’administration sur le backoffice

Dans ce tutoriel je vais commencer par arrêter de vous énumérer tout ce qu’on a fait depuis le début parce que ca commence à faire beaucoup et ca va devenir lourd ^^ mais en gros, vous avez déjà fait un module complet qui fonctionne sur le frontoffice, aujourd’hui on va s’intéresser à la partie backoffice ! (l'interface d'administration). Vous avez votre liste de films qui s’affiche en frontend, comment faire en sorte que notre formulaire (que nous avons crée dans le tutoriel précédent) s’affiche dans le backoffice ? Prêt ? Ok commençons…

1- Magento et l’administration

Avant de se lancer comme des gros bourrins dans le code, commençons d’abord par comprendre comment fonctionne l’administration de magento. Déjà pour la partie admin du module, c’est toujours pareil, il va y avoir une partie « code » et une partie « template » (c’est le principe du MVC…séparer le code et la vue), la partie code se trouvera dans le dossier de la partie « code » de votre module, sous un répertoire appelé Adminhtml. Ainsi, les Blocks de l’administration de votre module se trouveront dans /app/code/local/Pfay/Films/Block/Adminhtml/ Les controllers se trouveront dans /app/code/local/Pfay/Films/controllers/Adminhtml/ Et le model, c’est le même pour la partie admin et pour la partie front, évidement on ne va pas en recréer un alors qu’il existe déjà pour faire les mêmes opérations ( aller chercher les infos en bdd). Pour la partie backoffice, vous allez chercher vos templates et vos layout dans /app/design/adminhtml/default/Pfay/, une fois que vous êtes ici, c’est pareil que pour sur le front, vous avez votre dossier layout et votre dossier template ou vous stockerez respectivement vos layout et vos templates.

2- Hum…6eme tutoriels, à vous de jouer : premier truc à faire…?

Evidement vous avez l’habitude, on commence par éditer le fichier config.xml de notre module, allez dans /app/code/local/Pfay/Films/etc/. Dans <config> ajoutez ceci pour déclarer votre routeur d'administration :

<admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <films before="Mage_Adminhtml">Pfay_Films_Adminhtml</films>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
    <adminhtml>
        <layout>
            <updates>
                <films>
                    <file>pfay_films.xml</file>
                </films>
            </updates>
        </layout>
    </adminhtml>
    
Créez ensuite un fichier adminhtml.xml dans le repertoire "etc" de votre module magento comme ceci pour créer l'éntrée du menu et les permissions associées :

<config>
    <menu>
        <pfay translate="title" module="pfay_films">
            <title>PFAY MENU</title>
            <sort_order>100</sort_order>
            <children>
                <films translate="title" module="pfay_films">
                    <title>Films</title>
                    <sort_order>0</sort_order>
                    <action>adminhtml/film/index</action>
                </films>
            </children>
        </pfay>
    </menu>
    <acl>
        <resources>
            <admin>
                <children>
                    <pfay translate="title">
                        <title>PFAY MENU</title>
                        <sort_order>100</sort_order>
                        <children>
                            <films translate="title">
                                <title>Films</title>
                                <sort_order>0</sort_order>
                            </films>
                        </children>
                    </pfay>
                </children>
            </admin>
        </resources>
    </acl>
</config>

Une petite explication ?

<admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <films before="Mage_Adminhtml">Pfay_Films_Adminhtml</films>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
    
Le code ci dessous permet de dire à magento d'ajouter les controlleurs de notre module dans l'admin.

<adminhtml>
      <layout>
         <updates>
             <films>
                <file>pfay_films.xml</file>
             </films>
         </updates>
      </layout>
</adminhtml>

On définit ensuite que le layout à charger pour ce module sera le fichier pfay_films.xml qui se trouvera dans le dossier layout du théme d'admin. Puis grâce à la balise menu on crée le menu de l’administration et on défini les acl dans le fichier adminhtml.xml Les balisess sont plutot explicites : Title : le titre de la colone (ici « Mes films ») set_order : l’odre dans le menu ( ici 100 pour le mettre en dernier) Ensuite chaque children de cette balise correspond à une ligne, dans cette entrée du menu. Pour chaque élément children, on retrouve un nom et, un lien… En fait, chaque children du menu est juste un raccourci, quand on va cliquer dessus, on sera redirigé vers la page (dans notre exemple vers http://votresite.com/adminfilms/adminhtml_index)

3- Créer le controller de la partie admin

Créez le dossier \app\code\local\Pfay\Films\controllers\Adminhtml\ et dedans le fichier IndexController.php qui contiendra :

class Pfay_Films_Adminhtml_IndexController extends Mage_Adminhtml_Controller_Action
{
  public function indexAction()
  {
          $this->loadLayout();
          $this->renderLayout();
          
          
        if( $this->getRequest()->isPost()){
            $name = $this->getRequest()->getPost('name');
            if(!is_null($name)){
                $film = Mage::getModel('pfay_films/film');
                $film->setName($name);
                $film->save();
            }
        }
  }
}

Je n’explique pas ce fichier, vous avez déjà vu à quoi il sert dans les tutoriaux précédent, c'est un contrôleur mais cette fois ci on l'utilise pour l'admin.

4- Ajouter le formulaire dans la partie admin

Maintenant votre module fonctionne et vous pouvez y accéder via le menu, sauf que bien sur pour l’instant il ne fait rien. Pour aller plus vite, copier votre fichier phtml qui contient votre formulaire vers l’admin de magento, en clair prenez le fichier afficher.phtml qui se trouve dans /app/design/frontend/pfay/theme/template/films/ et copiez le dans /app/design/adminhtml/default/Pfay/template/films/ et rajoutez dans votre formulaire le champ hidden suivant (requis pour la sécurité de l'admin dans magento) :

<input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>"  />

Maintenant, modifiez le layout pfay_films.xml dans /app/design/adminhtml/default/Pfay/layout/ comme ceci :

<layout version="1.0">

    <adminhtml_film_index>
        <reference name="content">
            <block type="pfay_films/monblock" name="monblock" template="pfay_films/afficher.phtml" />
        </reference>
    </adminhtml_film_index>

</layout>

Comme vous avez copié le template dans votre répertoire template d’admin, il associe le block du front avec votre template d’admin et ca marche, vous avez maintenant votre formulaire dans l’administration mais modifiez le comme ceci pour qu'il prenne en compte votre action actuelle :

<h1>Hello World</h1>
<p>ceci est mon fichier de template et ca c'est le résultat de ta méthode :</p>
<?php echo $this->methodblock(); ?>

<form action="<?php echo Mage::getUrl('adminhtml/film/index') ?>" method="post">
    <fieldset>
        <ul>
            <li>
                <label for="nom">Name</label>
                <input type="text" id="name" name="name" />
            </li>
            <li>
                <input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>"  />
                <input type="submit" value="Enregistrer" />
            </li>
        </ul>
    </fieldset>
</form>


C'est la fin de ce tutoriel, Félicitation vous avez réussi. Essayez de refaire ce tutoriel et de modifier les champs. Comme d'habitude laisser un message en commentaire, ca fait toujours plaisir et si vous avez des questions n'hésitez pas ;)
Documents disponibles pour cet article :
Questions sur cette leçon
Pas de questions pour cette leçon. Soyez le premier !

Vous devez etre connecté pour demander de l'aide sur une leçon.