IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Tutoriel principal Jelix 1.0


précédentsommairesuivant

VI. Création d'un formulaire

Il y a deux manières de faire des formulaires : soit de manière classique, “à la main”, soit en utilisant le nouveau système de formulaire jForms. jForms s'occupe à la fois des traitements côté serveur des données reçues d'un formulaire (HTML, XUL ou service web) : création, sauvegarde, vérification des saisies, etc., et à la fois de la génération des formulaires HTML dans les templates.

Dans ce chapitre, on va utiliser la méthode “traditionnelle”, histoire de se familiariser avec les enchaînements d'actions et autres concepts de base de Jelix. Plus loin dans le tutoriel, nous vous montrerons comment utiliser jForms.

Le but de ce chapitre va être de créer un simple formulaire afin d'enregistrer de nouvelles news.

VI-A. Le template et les URL

En premier lieu, nous allons faire le template, très simplifié, que l'on stocke dans le fichier newsform.tpl :

 
Sélectionnez
<h1>Création d'une news</h1>
 
<form action="{formurl 'news~default:createsave'}" method="POST">
{formurlparam 'news~default:createsave'}
<table>
<tr>
    <th><label for="sujet">Sujet</label></th>
    <td><input type="text" id="sujet" name="sujet" /></td>
</tr>
<tr>
    <th><label for="texte">Texte</label></th>
    <td><textarea id="texte" name="texte"></textarea></td>
</tr>
<tr>
    <th><label for="date">Date</label> (AAAA-MM-JJ)</th>
    <td><input type="text" id="date" name="date" /></td>
</tr>
</table>
<div><input type="submit" value="Enregistrer"/>
 <a href="{jurl 'news~default:index'}">Annuler</a>
</div>
</form>

Rien de très complexe, au niveau HTML. Toutefois vous remarquerez l'usage de nouveaux tags : {formurl}, {formurlparam} et {jurl}. Quelques explications…

Dans Jelix, vous éviterez de mettre des URL en dur dans les templates ou les actions, pour des raisons de facilité de maintenance et d'évolution. Le système d'URL de Jelix vous permet de centraliser toutes les URL dans la config de Jelix ou dans un fichier urls.xml (tout dépend du moteur d'URL utilisé). Ainsi l'objet jUrl et le tag {jurl} vous permettent d'obtenir une URL en donnant uniquement le nom de l'action et des éventuels paramètres.

Ainsi, pour le lien “Annuler”, l'URL générée sera »/jelix/actu.org/www/index.php?module=news&action=default:index”. Si vous changez l'emplacement de index.php, ou si vous activez le moteur d'URL significatives (en mappant news/list sur l'action news~default:index), vous n'aurez pas à modifier vos templates.

On aurait pu utiliser le tag {jurl} aussi sur la balise <form>, mais si l'URL contient des paramètres (comme c'est le cas ici avec module et action), il est préférable de les mettre dans des champs cachés. Cependant, si on changeait la configuration sur le mapping URL, ce n'est pas forcé qu'il y ait toujours ces paramètres. Aussi on utilise conjointement les plugins {formurl} et {formurlparam} qui se chargeront eux-mêmes de décider ce qu'il faut mettre dans l'attribut “action”, et ce qu'il faut mettre dans des champs cachés.

Note : par défaut, {jurl}, {formurl} et {formurlparam} échappe correctement dans l'URL les caractères réservés en HTML/XML.

VI-B. Affichage du formulaire

On va créer une première action, 'createform' pour afficher un formulaire de saisie d'une nouvelle news.

 
Sélectionnez
    function createform(){
        $rep = $this->getResponse('html');
        $rep->title = 'Saisie d\' une actualité';
        $rep->bodyTpl = 'newsform';
        return $rep;
    }

Pour accéder à cette page, on va rajouter un lien en bas dans le template listenews.tpl

 
Sélectionnez
  <p><a href="{jurl 'news~default:createform'}">Ajouter une news</a></p>

Là encore, on utilise le tag {jurl}.

Maintenant rafraichissez la page de liste des news dans le navigateur (http://localhost/jelix/actu.org/www/index.php). Vous devriez avoir le lien “Ajouter une news”. Si vous cliquez dessus, le formulaire devrait s'afficher.

VI-C. Sauvegarde des données

Comme on l'a indiqué dans le formulaire, il nous faut maintenant créer une action 'default:createsave' de sauvegarde des données.

En premier lieu, on récupère un record, que l'on remplit ensuite avec les données envoyées par le formulaire. Les paramètres d'URL ($_GET) ou postés ($_POST), sont accessibles via la méthode param() des contrôleurs.

 
Sélectionnez
        $news = jDao::createRecord('news~news');
        $news->sujet = $this->param('sujet');
        $news->texte = $this->param('texte');
        $news->news_date = $this->param('date');

On récupère ensuite une factory de dao pour enregistrer le record.

 
Sélectionnez
        $dao = jDao::get('news~news');
        $dao->insert($news);

Enfin, on va rediriger vers la liste de news.

 
Sélectionnez
        $rep = $this->getResponse('redirect');
        $rep->action = 'news~default:index';
        return $rep;

Cela donne finalement :

 
Sélectionnez
    function createsave(){
        $news = jDao::createRecord('news~news');
        $news->sujet = $this->param('sujet');
        $news->texte = $this->param('texte');
        $news->news_date = $this->param('date');
 
        $dao = jDao::get('news~news');
        $dao->insert($news);
 
        $rep = $this->getResponse('redirect');
        $rep->action = 'news~default:index';
        return $rep;
    }

Vous pouvez maintenant utiliser le formulaire pour créer de nouvelles news.


précédentsommairesuivant

Licence Creative Commons
Le contenu de cet article est rédigé par Contributeurs de jelix.org et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2013 Developpez.com.