Raccourcis : Contenu - rubriques - sous rubriques
FR

Piste:

Wiki: Plan du site - Derniers changements - Back link

Différences

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

Lien vers cette vue comparative

fr:tutoriels:jelixnews-1.7:creation-action [2012/04/14 22:18]
127.0.0.1 modification externe
fr:tutoriels:jelixnews-1.7:creation-action [2019/05/22 22:14] (Version actuelle)
laurent
Ligne 2: Ligne 2:
 ===== Un peu de théorie ===== ===== Un peu de théorie =====
  
-Une action est un élément fondamental du framework. Tout affichage, tout traitement de formulaire, tout appel de service web est une action.+Une action est un élément fondamental du framework. Tout affichage, tout traitement 
 +de formulaire, tout appel de service web est une action.
  
-Une action est appelée dans le cadre d'une requête d'un type précis et génère une réponse spécifique dans un format spécifique,​ qui peut être lié au type de requête en question.+Une action est appelée dans le cadre d'une requête d'un type précis et génère 
 +une réponse spécifique dans un format spécifique,​ qui peut être lié au type de 
 +requête en question.
  
-Il existe plusieurs types de requêtes, ​notamment ​le type que l'on nomme dans Jelix, "​classic",​ pour lequel une action peut fournir une réponse dans un format quelconque : HTML, XML, etc. C'est pour ce type de requête que vous définirez le plus souvent des actions. En général, ce type de requête fournit ses paramètres dans l'url ou dans le corps de la requête HTTP (méthode POST).+Il existe plusieurs types de requêtes, ​notament ​le type que l'on nomme dans 
 +Jelix, "​classic",​ pour lequel une action peut fournir une réponse dans un 
 +format quelconque : HTML, XML, etc. C'est pour ce type de requête que vous 
 +définirez le plus souvent des actions. En général, ce type de requête fournit 
 +ses paramètres dans l'url ou dans le corps de la requête HTTP (méthode POST).
  
-Vous avez aussi des types de requêtes plus spécifiques,​ comme par exemple le type xmlrpc (utilisée dans le cadre d'un service web). En XML-RPC, les données en entrée ne sont pas des paramètres dans une url, mais sont stockées dans un contenu XML. Comme le veut le protocole XML-RPC, une action définie pour ce type de requête doit fournir obligatoirement une réponse au format XML-RPC.+Vous avez aussi des types de requêtes plus spécifiques,​ comme par exemple le 
 +type xmlrpc (utilisée dans le cadre d'un service web). En XML-RPC, les données 
 +en entrée ne sont pas des paramètres dans une url, mais sont stockées dans un 
 +contenu XML. Comme le veut le protocole XML-RPC, une action définie pour ce 
 +type de requête doit fournir obligatoirement une réponse au format XML-RPC.
  
-En connaissant le type de requête traitée et l'​action,​ Jelix connaît ainsi le type de la réponse à générer, et donc contrôle plus ou moins la génération de la réponse. Ainsi, même en cas d'​erreur (une exception ou autre) survenant pendant le traitement de l'​action,​ le format de sortie sera toujours celui attendu. Un client qui appelle un service web en XML-RPC, aura donc quoi qu'il arrive une réponse au format XML-RPC. Cela apporte une certaine robustesse à l'​application.+En connaissant le type de requête traitée et l'​action,​ Jelix connaît ainsi le 
 +type de la réponse à générer, et donc contrôle plus ou moins la génération de 
 +la réponse. Ainsi, même en cas d'​erreur (une exception ou autre) survenant 
 +pendant le traitement de l'​action,​ le format de sortie sera toujours celui 
 +attendu. Un client qui appelle un service web en XML-RPC, aura donc quoi qu'il 
 +arrive une réponse au format XML-RPC. Cela apporte une certaine robustesse à 
 +l'​application.
  
 Voici un schéma simplifié du déroulement d'une action : Voici un schéma simplifié du déroulement d'une action :
Ligne 27: Ligne 44:
  
  
-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@@.+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 @@M@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 @@F@controllers/​default.classic.php@@. Vous devez avoir ce contenu :+Modifions donc cette action par défaut. Pour cela ouvrons le fichier 
 +@@F@module/​news/​controllers/​default.classic.php@@. Vous devez avoir ce contenu :
  
 <code php> <code php>
Ligne 44: Ligne 64:
 </​code>​ </​code>​
  
-Vous remarquerez qu'il y a certaines conventions de nommage. Les classes contrôleurs ont un nom suffixé par "​Ctrl"​. Ce qui précède le suffixe, "​default",​ est le nom du contrôleur,​ que vous indiquerez dans le paramètre action, et c'est aussi le préfixe du nom du fichier *.classic.php.+Vous remarquerez qu'il y a certaines conventions de nommage. Les classes 
 +contrôleurs ont un nom suffixé par "​Ctrl"​. Ce qui précède le suffixe, 
 +"​default",​ est le nom du contrôleur,​ que vous indiquerez dans le paramètre 
 +action, et c'est aussi le préfixe du nom du fichier *.classic.php.
  
  
 ==== Objet réponse ==== ==== Objet réponse ====
  
-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@@.+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 réponse.+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 @@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 :+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 68: Ligne 98:
  
  
-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.3/​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@@.+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 : [[https://​docs.jelix.org/​fr/​manuel-1.7/​composants/​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@@.
  
 ==== Un objet réponse personnalisé ==== ==== 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.+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 ?+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.php@@. 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:+C'est en fait ce qui se passe dans une application créée avec @@c@create-jelix-app@@. 
 +Dans le répertoire @@F@app/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> <code php>
Ligne 98: Ligne 142:
 </​code>​ </​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@@).+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@@ :+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@app/system/mainconfig.ini.php@@ :
  
 <code ini> <code ini>
Ligne 107: Ligne 153:
 </​code>​ </​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).+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.3/​selecteurs|sélecteur]] ​Jelix. Un [[http://​docs.jelix.org/​fr/​manuel-1.3/​selecteurs|sélecteur]] est une chaîne, permettant de désigner facilement une ressource du projet, ​indépendamment ​de son emplacement physique.+À 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 [[https://​docs.jelix.org/​fr/​manuel-1.7/concepts/​selecteurs|sélecteur ​Jelix]]. 
 +Un [[https://​docs.jelix.org/​fr/​manuel-1.7/concepts/​selecteurs|sélecteur]] est une 
 +chaîne, permettant de désigner facilement une ressource du projet, ​indépendement ​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.3/​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.+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 [[https://​docs.jelix.org/​fr/​manuel-1.7/​composants/​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 ==== ==== 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.+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/​actu.org/​www/​index.php/​news/​default/​index+Nous n'allons pas configurer un serveur web nginx ou apache, mais utiliser, pour la démonstration, ​le serveur web de php.
  
-"​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/​actu.org/www/​index.php/​news/​.+<code bash> 
 +cd actu.org 
 +php -S localhost:​8080 -t www
  
-Si vous avez une erreur 404, vérifiez que le chemin est bon, et que apache est configuré avec "​AcceptPathInfo on".+</​code>​
  
-Quand il n'y a pas d'​erreur,​ vous avez cette page :+ 
 + 
 +Tapons l'​adresse suivante dans le navigateur : http://​localhost:​8080/​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 http://​localhost:​8080/​index.php/​news/​. 
 +Ou encore, comme nous avons indiqué @@--default-module@@ à la création de l'​application,​ 
 +vous pouvez même juste indiquer http://​localhost:​8080. 
 + 
 +Si il n'y a pas d'​erreur,​ vous avez cette page :
  
 <​code>​ <​code>​
Ligne 131: Ligne 203:
  
 </​code>​ </​code>​
- 
-Si vous indiquez juste http://​localhost/​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 ==== ==== 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:+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> <code html>
Ligne 153: Ligne 220:
 </​code>​ </​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.+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.+@@{$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@@:​+Spécifions maintenant ce template à notre réponse personnalisée dans 
 +@@F@responses/​myhtmlresponse.class.php@@:​
  
 <code php> <code php>
Ligne 168: Ligne 240:
 </​code>​ </​code>​
  
-Si vous rafraîchissez http://​localhost/​actu.org/​www/​index.php/news/, vous devriez voir votre nouveau template.+Si vous rafraîchissez http://​localhost:8080/news/, vous devriez voir votre nouveau template.
  
  
Ligne 174: Ligne 246:
 ==== Template de contenu spécifique ==== ==== Template de contenu spécifique ====
  
-Pour notre action principale, 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).+Pour notre action principale, 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 :
  
 <code xml> <code xml>
Ligne 234: Ligne 309:
 ==== Problème d'​affichage des caractères accentués ==== ==== Problème d'​affichage des caractères accentués ====
  
-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/​templates 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 @@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.+  * soit vous modifiez le fichier @@F@app/system/mainconfig.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 le plus adopté sur le web aujourd'​hui.
  
fr/tutoriels/jelixnews-1.7/creation-action.txt · Dernière modification: 2019/05/22 22:14 par laurent
Fils rss des changements récents dans le wiki Creative Commons License