Piste : • config-base
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' |

