Le model, les collections et les formulaires

Nous avons dans les tutoriels précédents crée un module avec un contrôleur, un block, son template et une connexion avec la base de données. Nous allons maintenant voir comment aller plus loin avec la base de données et comment mieux interagir avec magento.

Le model, les collections, les formulaires…

Comme nous l’avons vu précédemment, pour récupérer les données de votre base de données, il faut utiliser la fonction getModel, qui prend en paramètre le type d’objet. Dans le tutoriel précédent on a défini un type d’objet pfay_films/film dans pour notre model "Film" qui représente en fait la table "pfay_films" dans notre base de données. Nous allons donc récupérer ce model en faisant :

       Mage::getModel('pfay_films/film');

Grâce a ce model vous pouvez récupérer un objet film stocké dans votre base de donnée. Si je veux récupérer par exemple mon film qui a l’identifiant 2 je vais faire:

      Mage::getModel('pfay_films/film')->load(2);

Maintenant, nous voulons récupérer tous les films qui ont été enregistrés dans notre base de données. Pour cela nous allons utiliser ce qu'on appelle une collection. Une collection s'obtient grâce à la méthode getCollection de notre Model.

      $macollection =  Mage::getModel('pfay_films/film')->getCollection();

Avec cette collection, nous pouvons faire pleins d’opération sur notre base de données comme par exemple :

     $collection =  Mage::getModel('pfay_films/film')->getCollection();

     //classer par ID ASC
     $collection->setOrder('id_pfay_films','asc');

     //Ne selectionner que ceux avec le nom "Gladiator"
     $macollection->addFilter('name', 'Gladiator');

Maintenant, qu’est ce que vous diriez si dans votre module on mettait un formulaire pour ajouter des films et qu’on trie les entrées de la liste par ordre alphabétique ? ca vous tentes ? Ok c’est parti !

1- Trier les données lors de l’affichage

Nous l’avons vu dans le tutoriel précédent, votre liste de contact est affichée dans votre block. Ouvrez le fichier Monbloc.php qui se trouve dans app/code/local/Pfay/Films/Block et modifiez cette ligne :

    $collection = Mage::getModel('pfay_films/film')
                        ->getCollection()
                        ->setOrder('id_pfay_films','asc');

Voilà c'est fini ! (c’est dingue il est vraiment bien fait ce tutoriel ^^ ).

2- Ajouter un formulaire

Editez le Template afficher.phtml qui se trouve dans app\design\frontend\pfay\theme\template\pfay_films\ comme ceci :

<form action="<?php echo Mage::getUrl('films/index/save') ?>" method="post">
  <fieldset>
    <ul>
     <li>
       <label for="nom">Name</label>
       <input type="text" id="name" name="name" />
     </li>
     <li>
        <input type="submit" value="Enregistrer" />
    </li>
  </ul>
 </fieldset>
</form>

<?php echo $this->methodblock(); ?>
 
Explication:

Ceci est un formulaire, vous l’envoyez vers la méthode save de votre controller IndexController de votre module Films.
L’url sera retrouvé grâce a la méthode getUrl(). Maintenant, que va-t-il se passer quand on va envoyer le formulaire ? Ouvrez le controller IndexController de votre module Films (/app/code/local/Pfay/Films/controllers/) et ajoutez y la méthode suivante :

 public function saveAction()
 {
    //on recuperes les données envoyées en POST
    $name = ''.$this->getRequest()->getPost('name');
   

    //on verifie que les champs ne sont pas vide
    if( isset($name) && ($name!='') )
    {
      //on cree notre objet et on l'enregistre en base
      $contact = Mage::getModel('pfay_films/film');
      $contact->setData('name','Demain ne meurt jamais');
      $contact->save();

      // on cree un nouvel objet et on l'enregistre en base mais 
      // cette fois ci avec setName (existe automatiquement sous magento pour vos attributs d'objets).
      $contact = Mage::getModel('pfay_films/film');
      $contact->setName('Gladiator 3');
      $contact->save();
    }

   //on redirige l’utilisateur vers la méthode index du controller indexController
   //de notre module films
   $this->_redirect('films/index/index');
}

Pour comprendre ce que je fais ci dessus, lisez les commentaires dans le code, on récupère les informations du formulaire et on les enregistre en base de données puis on redirige vers la méthode index de notre contrôleur.

Vos devoirs :
Refaites ce tutoriel, essayez de rajouter des informations dans votre model et votre formulaire..bref pratiquez, c’est comme ca qu’on y arrive. Si vous avez une question ou une remarque constructives vous pouvez laisser un commentaire en bas de cet article. Si vous êtes bloqués n'hésitez pas à télécharger le code pour le comparer avec le votre. Félicitation vous avez réussi à tenir jusqu’au bout de ce tutoriel, dans le suivant nous commençerons à créer une interface d'administration.
Documents disponibles pour cet article :
Les livres qui peuvent vous aider :
  • Livre Magento Developer's Guide by Alan Mc Gregor
  • Livre Magento Performance Optimization
  • Livre Grokking Magento Vinai
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.