Raccourcis : Contenu - rubriques - sous rubriques
FR

Piste : creation-action

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
fr:tutoriels:jelixnews-1.1:creation-action [2009/03/18 10:15] – édition externe 127.0.0.1fr:tutoriels:jelixnews-1.1:creation-action [2012/04/14 20:34] (Version actuelle) – [Un objet réponse personnalisé] laurent
Ligne 1: Ligne 1:
 +
 ===== Un peu de théorie ===== ===== Un peu de théorie =====
  
Ligne 26: Ligne 27:
  
  
-Les actions sont implémentées dans ce qu'on appelle des contrôleurs. Les contrôleurs sont des classes contenant des méthodes pour chaque action. Les contrôleurs sont stockés dans des fichiers controllers///nom_controleur//.//type_requete//.php.+Les actions sont implémentées dans ce qu'on appelle des contrôleurs. Les contrôleurs sont des classes contenant des méthodes pour chaque action. Les contrôleurs sont stockés dans des fichiers @@F@controllers/nom_controleur.type_requete.php@@.
  
-En général il y a une méthode index() pour l'action par défaut.+En général il y a une méthode @@M@index()@@ pour l'action par défaut.
  
-Modifions donc cette action par défaut. Pour cela ouvrons le fichier controllers/default.classic.php. Vous devez avoir ce contenu :+Modifions donc cette action par défaut. Pour cela ouvrons le fichier @@F@controllers/default.classic.php@@. Vous devez avoir ce contenu :
  
 <code php> <code php>
Ligne 48: Ligne 49:
 ==== Objet réponse ==== ==== Objet réponse ====
  
-Dans la méthode "index()du controlleur, on récupère dans la variable $rep une réponse de type "html". Vous obtenez en fait un objet de classe jResponseHtml, dérivant de la classe jResponse. +Dans la méthode @@M@index()@@ du contrôleur, on récupère dans la variable @@V@$rep@@ une réponse de type "html". Vous obtenez en fait un objet de classe @@C@jResponseHtml@@, dérivant de la classe @@C@jResponse@@
  
-Vous verrez plus tard qu'il existe d'autres types de réponses et que vous pouvez développer vos propres objets response.+Vous verrez plus tard qu'il existe d'autres types de réponses et que vous pouvez développer vos propres objets réponse.
  
-L'objet jResponseHtml s'occupe de générer une réponse en HTML (donc une page en HTML). Il génère automatiquement la partie <head> du HTML, à partir de certaines de ses propriétés. Par exemple spécifions le titre de la page :+L'objet @@C@jResponseHtml@@ s'occupe de générer une réponse en HTML (donc une page en HTML). Il génère automatiquement la partie <head> du HTML, à partir de certaines de ses propriétés. On peut ainsi spécifier le titre de la page, les feuilles de styles, les script javascript à lier etc. Par exemple, pour indique le titre de la page :
  
 <code php> <code php>
Ligne 67: Ligne 68:
  
  
-Tout le corps de la page, c'est à dire le contenu de la balise html <body>, doit être généré par vous même, via éventuellement le moteur de template de Jelix : [[fr:manuel-1.0:templates|jTpl]]. jResponseHtml instancie en standard un moteur de template placé dans la propriété body. Le nom du fichier template est à placer dans la propriété bodyTpl. Avant de voir le code voyons d'abord le contenu du template.+Tout le corps de la page, c'est à dire le contenu de la balise html @@E@<body>@@, doit être généré par vous même, via éventuellement le moteur de template de Jelix : [[http://docs.jelix.org/fr/manuel-1.1/templates|jTpl]]. @@C@jResponseHtml@@ instancie en standard un moteur de template placé dans la propriété @@P@body@@. Le nom du fichier template est à placer dans la propriété @@P@bodyTpl@@.
  
-==== Le template ====+==== Un objet réponse personnalisé ==== 
 + 
 +En théorie donc, dans chaque action, vous devez indiquer à l'objet réponse HTML le titre, les feuilles de styles, le template principal etc. Si c'est la même chose à faire dans chaque action (ce qui est bien souvent le cas puisqu'en général les pages d'un même sites ont le même aspect, le même bandeau, menu etc), ça risque bien de devenir rébarbatif. 
 + 
 +Pourquoi donc n'aurions nous pas un objet réponse html qui définit lui même ces propriétés, et qu'on récupérerait dans chaque action et en lui indiquant juste ce qui est spécifique à la page affichée ? 
 + 
 +C'est en fait ce qui se passe dans une application créée avec @@c@createapp@@. Dans le répertoire @@F@responses/@@, vous avez une classe @@C@myHtmlResponse@@ déjà créée, qui hérite de @@C@jResponseHtml@@. Et qui défini certaines choses par défaut: 
 + 
 +<code php> 
 +class myHtmlResponse extends jResponseHtml { 
 + 
 +    public $bodyTpl = 'jelix~defaultmain'; 
 + 
 +    function __construct() { 
 +        parent::__construct(); 
 + 
 +        // Include your common CSS and JS files here 
 +    } 
 + 
 +    protected function doAfterActions() { 
 +        // Include all process in common for all actions, like the settings of the 
 +        // main template, the settings of the response etc.. 
 + 
 +        $this->body->assignIfNone('MAIN','<p>no content</p>'); 
 +    } 
 +
 +</code> 
 + 
 +On voit que le template par défaut des pages est le template "jelix~defaultmain" (qui correspond au fichier @@F@lib/jelix/core-modules/jelix/templates/defaultmain.tpl@@). 
 + 
 +Cette classe @@C@myHtmlResponse@@ est déclarée dans la configuration comme correspondant au type de réponse "html". Ceci est spécifié dans @@F@var/config/defaultconfig.ini.php@@ : 
 + 
 +<code ini> 
 +[responses] 
 +html=myHtmlResponse 
 +</code>  
 + 
 +Quand on fait donc @@$this->getResponse('html')@@ dans un contrôleur, nous obtenons alors un objet @@C@myHtmlResponse@@ au lieu de @@C@jResponseHtml@@ (comme c'est le cas par défaut si on ne passe pas par createapp). 
 + 
 +À propos de "jelix~defaultmain", il n'est pas besoin de mettre le suffixe ".tpl" du nom du fichier, car il s'agit en fait d'un [[http://docs.jelix.org/fr/manuel-1.1/selecteurs|sélecteur]] Jelix. Un [[http://docs.jelix.org/fr/manuel-1.1/selecteurs|sélecteur]] est une chaîne, permettant de désigner facilement une ressource du projet, indépendamment de son emplacement physique. 
 + 
 +Un sélecteur comporte un nom de module et un nom de ressource séparés par le caractère "~", comme ceci : @@nom_module~nom_ressource@@. La partie "nom_module~" est facultative quand il s'agit du module courant. Le nom de la ressource n'est pas forcément un nom de fichier, même si la plupart du temps elle désigne un fichier. L'objet qui utilise le sélecteur (ici [[http://docs.jelix.org/fr/manuel-1.1/templates|jTpl]]) sait comment récupérer le fichier correspondant au sélecteur. Vous verrez que les sélecteurs sont abondamment utilisés, et permettent une certaine souplesse et une indépendance vis à vis des chemins de fichiers physiques. 
 + 
 +==== Premier affichage ==== 
 + 
 +Voyons maintenant ce que génère cette réponse avec le template "jelix~defaultmain", avant même que l'on ait à coder quoique ce soit. 
 + 
 +Tapons l'adresse suivante dans le navigateur (en adaptant le nom de domaine et le chemin jusqu'à actu.org/www selon votre installation): http://localhost/jelix/actu.org/www/index.php/news/default/index 
 + 
 +"news" est le nom du module, "default" le nom du contrôleur, et "index" le nom de la méthode dans le contrôleur. "default" et "index" étant des noms par défaut pour Jelix, vous pouvez, pour cette action, taper juste http://localhost/jelix/actu.org/www/index.php/news/
 + 
 +Si vous avez une erreur 404, vérifiez que le chemin est bon, et que apache est configuré avec "AcceptPathInfo on". 
 + 
 +Quand il n'y a pas d'erreur, vous avez cette page : 
 + 
 +<code> 
 +Welcome in your new jelix application 
 + 
 +no content 
 + 
 +</code> 
 + 
 +Si vous indiquez juste http://localhost/jelix/actu.org/www/index.php, vous allez avoir une erreur, car il n'y a pas d'action par defaut défini pour jelix. On va indiquer que l'action index du module news est l'action par défaut de l'appli. Pour cela, ouvrez le fichier de configuration @@F@actu.org/var/config/index/config.ini.php@@ et indiquez-la : 
 + 
 +<code ini> 
 +startModule "news" 
 +startAction "default:index" 
 +</code> 
 + 
 + 
 +==== Créer un template général ==== 
 + 
 +Nous avons donc un template principal ("jelix~defaultmain") pour toutes les pages. Comme vous le voyez à l'affichage, ce n'est pas forcément ce que vous voulez. Créer donc un nouveau template général, que vous mettrez dans @@F@modules/news/templates/main.tpl@@ par exemple: 
 + 
 +<code html> 
 +<h1>Actu.org: toute l'actu</h1> 
 + 
 +<div id="maincontent"> 
 +{$MAIN} 
 +</div> 
 + 
 +</code> 
 + 
 +Comme il a été dit auparavant, le contenu du template sera le contenu de la balise @@E@<body>@@. C'est pourquoi vous n'avez pas à mettre les balises standard @@E@<html>@@, @@E@<head>@@, etc... Juste le contenu de la page. 
 + 
 + 
 +"{$MAIN}" affiche une variable de template nommée @@V@$MAIN@@. Dans chaque action, vous devrez indiquer le contenu de cette variable, qui sera dans le cadre de notre application, le contenu spécifique de la page que l'on veut afficher. 
 + 
 +Spécifions maintenant ce template à notre réponse personnalisée dans @@F@responses/myhtmlresponse.class.php@@: 
 + 
 +<code php> 
 +class myHtmlResponse extends jResponseHtml { 
 + 
 +    public $bodyTpl = 'news~main'; 
 + 
 +.... 
 +</code> 
 + 
 +Si vous rafraîchissez http://localhost/jelix/actu.org/www/index.php/news/, vous devriez voir votre nouveau template. 
 + 
 + 
 + 
 +==== Template de contenu spécifique ==== 
 + 
 +Pour notre action principal, nous allons définir un template, dont le contenu sera assigné à la variable @@V@$MAIN@@ du template principal (ce qui vous fera donc deux templates).
  
 Créez un fichier listenews.tpl dans le répertoire //templates// du module. Et mettez y ce contenu : Créez un fichier listenews.tpl dans le répertoire //templates// du module. Et mettez y ce contenu :
Ligne 78: Ligne 183:
 </code> </code>
  
-Comme il a été dit auparavant, le contenu du template sera le contenu de la balise <body>. C'est pourquoi vous n'avez pas à mettre les balises standard <html>, <head>, etc... Juste le contenu de la page. 
  
  
Ligne 90: Ligne 194:
    function index () {    function index () {
       $rep = $this->getResponse('html');       $rep = $this->getResponse('html');
 +
 +      // on définit un titre de page
       $rep->title = 'Dernières actualités';       $rep->title = 'Dernières actualités';
-      $rep->bodyTpl = 'listenews';+ 
 +      // creation d'un objet template pour le contenu spécifique 
 +      $tpl = new jTpl(); 
 + 
 +      // assignation du resultat du template listenews à la variable $MAIN 
 +      $rep->body->assign('MAIN', $tpl->fetch('listenews'))
       return $rep;       return $rep;
    }    }
Ligne 97: Ligne 208:
 </code> </code>
  
 +Rafraichissez la page dans votre navigateur. Vous devriez avoir:
  
-On a donc rajouté une instruction pour indiquer à l'objet réponse que l'on utilise le template **listenews.tpl**.+<code> 
 +Actu.org: toute l'actu
  
-Il n'est pas besoin de mettre le suffixe ".tpl" du nom du fichier, car il s'agit en fait d'un [[fr:manuel-1.0:selecteurs|sélecteur]] Jelix. Un [[fr:manuel-1.0:selecteurs|sélecteur]] est une chaîne, permettant de désigner facilement une ressource du projet, indépendamment de son emplacement physique.+Dernières actualités
  
-Un sélecteur comporte un nom de module et un nom de ressource séparés par le caractère "~", comme ceci : **nom_module~nom_ressource**. La partie "**nom_module~**" est facultative quand il s'agit du module courant. Le nom de la ressource n'est pas forcément un nom de fichier, même si la plupart du temps elle désigne un fichier. L'objet qui utilise le sélecteur (ici [[fr:manuel-1.0:templates|jTpl]]) sait comment récupérer le fichier correspondant au sélecteur. Vous verrez que les sélecteurs sont abondamment utilisés, et permettent une certaine souplesse et une indépendance vis à vis des chemins de fichiers physiques.+Ouverture prochaine de cette rubrique.
  
 +</code>
  
 +ou plus exactement le code HTML suivant :
  
 +<code html>
 +<h1>Actu.org: toute l'actu</h1>
  
 +<div id="maincontent">
 +  <h2>Dernières actualités</h2>
 +  <p>Ouverture prochaine de cette rubrique.</p>
 +</div>
  
-===== Premier affichage ===== 
- 
-Nous sommes maintenant prêt à afficher la première version de notre action. Pour cela, tapez l'url suivante dans votre navigateur : 
- 
-  http://localhost/jelix/actu.org/www/index.php?module=news&action=default:index 
- 
-Vous verrez alors s'afficher le contenu du template que l'on vient de créer. 
- 
-Le paramètre **module** indique le nom du module. Le paramètre **action** est le nom de l'action à exécuter dans ce module. Ce nom est constitué de deux parties, séparées par deux points ":" (pour les utilisateurs de jelix 1.0beta3.1 ou précédent, il faut utiliser le caractère "_"). La première partie est le nom du contrôleur, la deuxième le nom de la méthode à exécuter. Si il n'y a pas de ":", jelix considère qu'il s'agit du nom de la méthode dans le contrôleur de nom "default". 
- 
-On peut indiquer que cette action sera l'action par défaut de l'application. Pour cela, ouvrez le fichier de configuration //actu.org/var/config/index/config.ini.php// et indiquez-la : 
- 
-<code ini> 
-startModule = "news" 
-startAction = "default:index" 
 </code> </code>
  
-Pour afficher notre première page, vous pouvez alors utiliser simplement l'url :  
- 
-  http://localhost/jelix/actu.org/www/index.php 
  
 ==== Problème d'affichage des caractères accentués ==== ==== Problème d'affichage des caractères accentués ====
Ligne 133: Ligne 236:
 Si les caractères accentués s'affichent mal dans votre navigateur, c'est que l'édition de vos fichiers ne s'est pas faite avec le même encodage que celui indiqué dans la configuration de Jelix (qui est par défaut UTF-8). Donc : Si les caractères accentués s'affichent mal dans votre navigateur, c'est que l'édition de vos fichiers ne s'est pas faite avec le même encodage que celui indiqué dans la configuration de Jelix (qui est par défaut UTF-8). Donc :
  
-  * soit vous modifiez la configuration de votre éditeur préféré pour qu'il édite en UTF-8, et il faut alors convertir vos scripts existants pour UTF-8 (ou les réécrire) +  * soit vous modifiez la configuration de votre éditeur préféré pour qu'il édite en UTF-8, et il faut alors convertir vos scripts/templates existants pour UTF-8 (ou les réécrire) 
-  * soit vous modifiez le fichier var/config/defaultconfig.ini.php en changeant la propriété charset (en mettant ISO-8859-1 par exemple).+  * soit vous modifiez le fichier @@F@var/config/defaultconfig.ini.php@@ en changeant la propriété charset (en mettant ISO-8859-1 par exemple). Toutefois, nous vous recommandons de rester en UTF-8, ceci étant le charset universel et de plus en plus adopté sur le web.
  

fr/tutoriels/jelixnews-1.1/creation-action.1237371338.txt.gz · Dernière modification : 2009/03/18 10:51 (modification externe)

Fils rss des changements récents dans le wiki Creative Commons License