Piste :
Wiki: Plan du site - Derniers changements - Back link
Différences ¶
Ci-dessous, les différences entre deux révisions de la page.
fr:tutoriels:jelixnews-1.7:creation-action [2012/04/14 20:18] – modification externe 127.0.0.1 | fr:tutoriels:jelixnews-1.7:creation-action [2019/05/22 20: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, | + | 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, | ||
+ | requête en question. | ||
- | Il existe plusieurs types de requêtes, | + | Il existe plusieurs types de requêtes, |
+ | Jelix, " | ||
+ | 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, | + | Vous avez aussi des types de requêtes plus spécifiques, |
+ | 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' | + | En connaissant le type de requête traitée et l' |
+ | 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' | ||
+ | pendant le traitement de l' | ||
+ | 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' | ||
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/ | + | 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/ | ||
En général il y a une méthode @@M@index()@@ pour l' | En général il y a une méthode @@M@index()@@ pour l' | ||
- | Modifions donc cette action par défaut. Pour cela ouvrons le fichier @@F@controllers/ | + | Modifions donc cette action par défaut. Pour cela ouvrons le fichier |
+ | @@F@module/ | ||
<code php> | <code php> | ||
Ligne 44: | Ligne 64: | ||
</ | </ | ||
- | Vous remarquerez qu'il y a certaines conventions de nommage. Les classes contrôleurs ont un nom suffixé par " | + | Vous remarquerez qu'il y a certaines conventions de nommage. Les classes |
+ | contrôleurs ont un nom suffixé par " | ||
+ | " | ||
+ | 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, | + | Dans la méthode @@M@index()@@ du contrôleur, |
+ | @@V@$rep@@ une réponse de type " | ||
+ | classe @@C@jResponseHtml@@, | ||
- | Vous verrez plus tard qu'il existe d' | + | Vous verrez plus tard qu'il existe d' |
+ | pouvez développer vos propres objets réponse. | ||
- | L' | + | L' |
+ | (donc une page en HTML). Il génère automatiquement la partie < | ||
+ | à 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@< | + | Tout le corps de la page, c'est à dire le contenu de la balise html @@E@< |
+ | doit être généré par vous même, via éventuellement le moteur de template de | ||
+ | Jelix : [[https:// | ||
+ | @@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' | + | En théorie donc, dans chaque action, vous devez indiquer à l' |
+ | 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' | ||
+ | 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' | + | Pourquoi donc n' |
+ | ces propriétés, | ||
+ | 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/ | + | 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/ | ||
+ | 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: | ||
</ | </ | ||
- | On voit que le template par défaut des pages est le template " | + | On voit que le template par défaut des pages est le template " |
+ | (qui correspond au fichier @@F@lib/ | ||
- | Cette classe @@C@myHtmlResponse@@ est déclarée dans la configuration comme correspondant au type de réponse " | + | Cette classe @@C@myHtmlResponse@@ est déclarée dans la configuration comme |
+ | correspondant au type de réponse " | ||
<code ini> | <code ini> | ||
Ligne 107: | Ligne 153: | ||
</ | </ | ||
- | Quand on fait donc @@$this-> | + | Quand on fait donc @@$this-> |
+ | 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 " | + | À propos de " |
+ | du nom du fichier, car il s'agit en fait d'un [[https:// | ||
+ | Un [[https:// | ||
+ | chaîne, permettant de désigner facilement une ressource du projet, | ||
- | Un sélecteur comporte un nom de module et un nom de ressource séparés par le caractère " | + | Un sélecteur comporte un nom de module et un nom de ressource séparés par le |
+ | caractère " | ||
+ | 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' | ||
+ | (ici [[https:// | ||
+ | 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 " | + | Voyons maintenant ce que génère cette réponse avec le template " |
+ | 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' | + | Nous n'allons pas configurer un serveur web nginx ou apache, mais utiliser, pour la démonstration, |
- | " | + | <code bash> |
+ | cd actu.org | ||
+ | php -S localhost: | ||
- | Si vous avez une erreur 404, vérifiez que le chemin est bon, et que apache est configuré avec " | + | </ |
- | Quand il n'y a pas d' | + | |
+ | |||
+ | Tapons l' | ||
+ | |||
+ | " | ||
+ | nom de la méthode dans le contrôleur. " | ||
+ | défaut pour Jelix, vous pouvez, pour cette action, taper http:// | ||
+ | Ou encore, comme nous avons indiqué @@--default-module@@ à la création de l' | ||
+ | vous pouvez même juste indiquer http:// | ||
+ | |||
+ | Si il n'y a pas d' | ||
< | < | ||
Ligne 131: | Ligne 203: | ||
</ | </ | ||
- | |||
- | Si vous indiquez juste http:// | ||
- | |||
- | <code ini> | ||
- | startModule = " | ||
- | startAction = " | ||
- | </ | ||
- | |||
==== Créer un template général ==== | ==== Créer un template général ==== | ||
- | Nous avons donc un template principal (" | + | Nous avons donc un template principal (" |
+ | Comme vous le voyez à l' | ||
+ | Créer donc un nouveau template général, que vous mettrez dans | ||
+ | @@F@modules/ | ||
<code html> | <code html> | ||
Ligne 153: | Ligne 220: | ||
</ | </ | ||
- | Comme il a été dit auparavant, le contenu du template sera le contenu de la balise @@E@< | + | Comme il a été dit auparavant, le contenu du template sera le contenu de la |
+ | balise @@E@< | ||
+ | standard @@E@< | ||
- | "{$MAIN}" | + | @@{$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, | ||
- | Spécifions maintenant ce template à notre réponse personnalisée dans @@F@responses/ | + | Spécifions maintenant ce template à notre réponse personnalisée dans |
+ | @@F@responses/ | ||
<code php> | <code php> | ||
Ligne 168: | Ligne 240: | ||
</ | </ | ||
- | Si vous rafraîchissez http:// | + | Si vous rafraîchissez http:// |
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 // | + | Créez un fichier listenews.tpl dans le répertoire // |
+ | Et mettez y ce contenu : | ||
<code xml> | <code xml> | ||
Ligne 234: | Ligne 309: | ||
==== Problème d' | ==== Problème d' | ||
- | Si les caractères accentués s' | + | Si les caractères accentués s' |
+ | l' | ||
+ | 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/ | * 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/ | ||
- | * 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' |