Ce tutoriel provient de la discussion d'un des forums de Jelix concernant la pertinence de l'emploi d'une zone ou d'un simple template. Il n'y a pas qu'une seule réponse puisque trop de variables modèlisent la réponse:
Cet article tiendra compte, au moins en partie je l'espère, de toutes ces variables. Aussi, une grande part des choix effectués est subjective. C'est le choix d'un programmeur qui tend vers la perfection mais ne l'attend jamais.
Vous pouvez télécharger le code de ce tutorial directement de la forge à l'adresse suivante: pour le format zip et pour le format tar.gz.
Le fichier contient une application nommée myapp. Attention pour ne pas écraser une autre application qui aurait le même nom.
ATTENTION, mise à jour : ce tutoriel est assez vieux, et n'utilise pas le controlleur jControllerDaoCrud fourni depuis jelix 1.0Beta3.1 qui simplifie beaucoup la tâche (Voir l'autre tutoriel).
Il est donc à l'origine prévu pour fonctionner avec les versions de dévelopement de jelix 1.0 beta3. Il vous faudra faire certainement quelques adaptations pour qu'il fonctionne avec jelix 1.0.
Vous devez avoir fait le Mini tutoriel et le Tutoriel principal ou être à l'aise avec Jelix. Puisque c'est le 3ième tutoriel sur un CRUD, nous vous conseillons fortement la lecture des articles les concernant. Voyez le Tutoriel du jForms et jDao et le CRUD générique de base du manuel de Jelix.
Veillez suivre la démarche décrite dans l'article Étapes lors de la création d'une application Jelix en tenant compte des informations suivantes:
Nom de l'application : myapp
Nom du module : crudtuto3
basePath = “/jelix/myapp/www” ou selon votre configuration préférée.
Il se peut que cette table existe déjà dans votre base de données, sinon créez là.
CREATE TABLE `news` ( `id_news` INT(11) NOT NULL AUTO_INCREMENT, `sujet` VARCHAR(255) NOT NULL, `texte` text NOT NULL, `news_date` DATE NOT NULL, PRIMARY KEY (`id_news`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Ressource jDao : crudtuto3~news
Fichier DAO : news
Table : news
Créez dans le répertoire jelix/myapp/modules/crudtuto3/forms/, le fichier news.form.xml.
<?xml version="1.0" encoding="utf-8"?> <form xmlns="http://jelix.org/ns/forms/1.0"> <input ref="id_news" > <label>Id</label> </input> <input ref="sujet" > <label>Votre sujet</label> </input> <input ref="texte" > <label>Votre texte</label> </input> <input ref="news_date" > <label>Votre date</label> </input> </form>
Dans un premier temps nous allons créer une réponse personnalisée
Nous allons créer une classe de services pour le CRUD
Nous allons créer 4 zones avec paramètres
Nous allons créer une classe générique du CRUD
Il faut une classe d'utilisation
Le but de créer une réponse HTML personnalisée est de généraliser dans l'application :
Voyez le contenu du fichier jelix/myapp/responses/myHtmlResponse.class.php.
Consultez le manuel pour obtenir plus de détail sur la classe jReponseHTML.
Pour indiquer à Jelix que vous avez créé une réponse personnalisée, vous devez ouvrir le fichier jelix/myapp/var/config/index/config.ini.php et ajouter dans la section [responses] la ligne suivante:
html = myhtmlResponse
Dans ce tutoriel, cette classe métiers ou de services contient peu de fonctions. Mais dans d'autres applications, elle pourrait être très utile en réduisant la duplication du code. Et même cette classe pourrait être appelée par d'autres types de reponses.
Par exemple, personnellement je préfère utiliser un jDb pour browser les news. Parce que je peux faire un select avec 2 champs. C'est mon choix subjectif. Je pourrais rajouter cette fonction dans ma classe de services tout en gardant le browse qui appel le DAO.
Voir le fichier myapp/modules/crudtuto3/classes/crudserviceDAO.class.php.
Consulter le manuel et son article sur les classes métiers.
Les zones ne sont pas génériques mais peuvent être utilisées dans plusieurs actions ou même plusieurs templates directememt.
Ces zones sont accompagnées de leur template.
Puisqu'elles utilisent un dao spécifique, il est recommendé de donner un nom qui représente le dao et l'action. Ainsi si vous utilisez plusieurs fichiers dao dans votre application, vous pourrez les retrouver plus facilement.
Voir les fichiers du répertoire myapp/modules/crudtuto3/zones/ et myapp/modules/crudtuto3/templates/
Consultez le manuel et l'article sur les zones
Cette classe de base et les zones se partagent la logique du CRUD. En fait dans cette classe on retrourve que la logique du save et du delete (destroy). Les autres actions appellent leur zone correspondante pour traiter la logique du CRUD.
Remarquez dans cette classe la façon d'appeler une zone avec paramètres et d'appeler une classe de service. Aussi remarquez l'utilisation du constructeur. La signature doit être la même que sa classe parent jController.
Cette classe est complètement générique grâce à son initialisation dans la classe d'utilisation. Également un template nommé cruderror.tpl est générique.
Voir le fichier myapp/modules/crudtuto3/controllers/baseCrudController.php
La classe d'utilisation est notre controleur par défaut et son template principal. Elle hérite du CRUD et ne voie que 3 choses:
Le reste est comme une boîte noir. Le développeur peut ne pas s'en occuper.
Voir le fichier myapp/modules/crudtuto3/controllers/default.classic.php
Voir le fichier myapp/modules/crudtuto3/templates/main.tpl
Consultez le manuel et l'article sur les contrôleurs.