From 2fd00de2170fcb16b5214c7839c18f0dacab8cdb Mon Sep 17 00:00:00 2001 From: tof <> Date: Fri, 31 Aug 2007 09:58:35 +0000 Subject: Full translation of Blog Tutorial in French. Thanks to Eric.M ! --- .../protected/pages/Day5/fr/ErrorLogging.page | 158 +++++++++++++++++++++ .../protected/pages/Day5/fr/Performance.page | 66 +++++++++ .../protected/pages/Day5/fr/Summary.page | 41 ++++++ .../protected/pages/Day5/fr/UseTheme.page | 138 ++++++++++++++++++ .../protected/pages/Day5/fr/output.gif | Bin 0 -> 4282 bytes .../protected/pages/Day5/fr/output2.gif | Bin 0 -> 7798 bytes .../protected/pages/Day5/fr/output3.gif | Bin 0 -> 5190 bytes 7 files changed, 403 insertions(+) create mode 100755 demos/blog-tutorial/protected/pages/Day5/fr/ErrorLogging.page create mode 100755 demos/blog-tutorial/protected/pages/Day5/fr/Performance.page create mode 100755 demos/blog-tutorial/protected/pages/Day5/fr/Summary.page create mode 100755 demos/blog-tutorial/protected/pages/Day5/fr/UseTheme.page create mode 100755 demos/blog-tutorial/protected/pages/Day5/fr/output.gif create mode 100755 demos/blog-tutorial/protected/pages/Day5/fr/output2.gif create mode 100755 demos/blog-tutorial/protected/pages/Day5/fr/output3.gif (limited to 'demos/blog-tutorial/protected/pages/Day5') diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/ErrorLogging.page b/demos/blog-tutorial/protected/pages/Day5/fr/ErrorLogging.page new file mode 100755 index 00000000..8e7c77e6 --- /dev/null +++ b/demos/blog-tutorial/protected/pages/Day5/fr/ErrorLogging.page @@ -0,0 +1,158 @@ + + +

Gestion et journalisation d'erreur

+ +

+Si vous tentez de naviguez à l'URL http://hostname/blog/index.php?page=EditPost&id=100, vous verrez la page d'erreur suivante parce que le message avec l'ID 100 n'existe pas pour le moment. Nous voudrions personnaliser cette page d'erreur de manière à ce qu'elle garde la présentation générale du site. Nous voudrions aussi journaliser cette erreur pour étudier le comportement des utilisateurs. Dans cette section, nous allons mettre en place ces deux fonctionnalités. +

+ + + + +Une des tâches importantes dans les applications Web est la gestion des erreurs ainsi que leurs journalisation. Il y a deux types d'erreurs qui peuvent se produire dans une application PRADO : celles provenant des développeurs et celles des utilisateurs. Les premières doivent être résolues avant que l'application ne soit en production, tandis que les deuxièmes sont généralement un problème de prise en charge au niveau du design et doivent être gérées proprement (ie: journaliser cette erreur et indiquer à l'utilisateur que faire après). PRADO fournit un ensemble de fonctionnalités très utiles pour gérer et journaliser les erreurs. + + + +

Personnalisation de la gestion d'erreur

+ +

+PRADO charge de manière implicite un module de gestion d'erreurs. Nous voulons personnaliser ce module pour qu'il affiche une page spécifique pour les erreurs causées par les utilisateurs. Nous modifions donc notre application comme ci-dessous : +

+ + +...... + + ...... + + ...... + +...... + + +

+La classe BlogErrorHandler comme spécifiée ci-dessus est un nouveau gestionnaire d'erreur que nous allons créer après. Il étend et remplace le module par défaut TErrorHandler. +

+ +

+Nous créons un fichier nommé protected/BlogErrorHandler.php avec le contenu suivant. La classe BlogErrorHandler surcharge deux méthodes de TErrorHandler : +

+ + +Prado::using('System.Exceptions.TErrorHandler'); +Prado::using('Application.BlogException'); + +class BlogErrorHandler extends TErrorHandler +{ + /** + * Renvoi le fichier gabarit utilisé pour afficher l'erreur. + * Cette méthode surcharge la méthode originale. + */ + protected function getErrorTemplate($statusCode,$exception) + { + // on utilise notre propre gabarit pour BlogException + if($exception instanceof BlogException) + { + // récupère le chemin du fichier de gabarit : protected/error.html + $templateFile=Prado::getPathOfNamespace('Application.error','.html'); + return file_get_contents($templateFile); + } + else // sinon on utilise le gabarit par défaut. + return parent::getErrorTemplate($statusCode,$exception); + } + + /** + * Gère les erreurs causées par les utilisateurs. + * Cette méthode surcharge la méthode originale. + * Elle est appelée lorsqu'une exception utilisateur est générée. + */ + protected function handleExternalError($statusCode,$exception) + { + // Journaliser l'erreur (seulement pour BlogException) + if($exception instanceof BlogException) + Prado::log($exception->getErrorMessage(),TLogger::ERROR,'BlogApplication'); + // appelle l'implémentation de la classe parente + parent::handleExternalError($statusCode,$exception); + } +} + + +

+Dans le code précédent, nous spécifions que lorsqu'une exception de type BlogException est générée, nous utilisons le gabarit protected/error.html pour afficher l'erreur. Par ailleurs, nous devons créer la classe BlogException et remplacer toutes les occurrences de THttpException dans notre code (par exemple dans les pages EditUser et ReadPost). Nous devons aussi créer le gabarit protected/error.html. La classe BlogException hérite de THttpException et est vide. Le fichier de classe est enregistré sous protected/BlogException.php. +

+ + +class BlogException extends THttpException +{ +} + + +

+Ci-dessous le contenu du gabarit protected/error.html. Remarquez que ce gabarit n'est pas un gabarit PRADO, ceci parce qu'il ne reconnait qu'un nombre limité de mots clés, par exemple %%ErrorMessage%%, %%ServerAdmin%%. +

+ + + + +%%ErrorMessage%% + + +
+ +
+

%%ErrorMessage%%

+

+Une erreur est apparue lors du traitement de votre demande. +

+

+Si vous pensez que c'est une erreur de notre serveur, veuillez contacter webmaster. +

+
+ + + + + +

Journalisation des erreurs

+ +

+Dans la méthode handleExternalError() de BlogErrorHandler, nous appelons Prado::log() pour journaliser l'erreur si elle est de type BlogException. L'erreur est stockée en mémoire. Pour enregistrer le journal d'erreur sur un support non volatil, tel que le disque dur ou une base de données, nous devons indiquer à PRADO comment procéder. Ceci est fait par la configuration d'application suivante : +

+ + +...... + + ...... + + + + ...... + +...... + + +

+Dans le code ci-dessus, nous ajoutons une "route" pour enregistrer le journal d'erreur dans un fichier. Nous spécifions aussi le filtre de catégorie BlogApplication, de manière à ce que seules les erreurs de type BlogApplication soient sauvegardées. Cette possibilité permet de réduire la taille du journal et d'en améliorer la lisibilité. +

+ +

Test

+

+Pour voir comme notre blog se comporte suite à une demande invalide, nous naviguons à l'URL http://hostname/blog/index.php?page=posts.ReadPost&id=100. Nous devrions voir la page suivante qui est différente de celle vue précédemment. +

+ + + +

+Si nous regardons dans le dossier protected/runtime, nous devrions y trouver un fichier nommé prado.log. C'est le journal d'erreur que nous venons juste de paramétrer. Le fichier pourrait contenir quelque chose comme : +

+ + +Jun 28 22:15:27 [Error] [BlogApplication] Unable to find the specified post. +Jun 29 08:42:57 [Error] [BlogApplication] Unable to find the specified post. + + + \ No newline at end of file diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/Performance.page b/demos/blog-tutorial/protected/pages/Day5/fr/Performance.page new file mode 100755 index 00000000..59eee1b0 --- /dev/null +++ b/demos/blog-tutorial/protected/pages/Day5/fr/Performance.page @@ -0,0 +1,66 @@ + + +

Amélioration des performances

+ +

+Avant le déploiement de notre blog, nous voudrions améliorer les performances. +

+ +

Changer le mode de fonctionnement de l'application

+ +

+Une application PRADO peut-être configurée pour fonctionner suivant différents modes. Par défaut, elle fonctionne en mode Debug, mode qui génère beaucoup de message de journalisation et qui, en cas d'erreurs, affiche la pile des appels et l'emplacement de l'erreur. Ce comportement est préférable en cours de développement, mais pas en production. Pour changer le mode de fonctionnement de Debug à Normal ( qui signifie "en production"), nous devons modifier le fichier de configuration de l'application comme ci-dessous : +

+ + + + + ...... + + + +

Enabling Caching

+ +

+There are a lot of parsing work involved in a PRADO application: configuration XMLs, templates, theme skins, etc. For every user request, PRADO needs to redo the parsing. To save this effort, we can enable caching. To do so, we modify the application configuration as follows, +

+ + +...... + + ...... + + ...... + +...... + + +

+Maintenant, après avoir requis n'importe quelle page de notre blog, nous devrions trouver un fichier nommé sqlite3.cache. C'est un fichier de base de données qui mémorise les éléments analysés : gabarits, configurations, etc. +

+ + +Le module de cache que nous venons d'activer utilise une base de données comme support d'enregistrement. PRADO propose d'autres modules de cache plus rapide, tels que TMemCache, TAPCCache. Ces modules requièrent les extensions PHP correspondantes. + + + +

Utilisation de pradolite.php

+ +

+Afficher une page PRADO requiert des dizaines de fichiers PHP, ce qui est une cause de perte de temps. Ces fichiers comportent aussi beaucoup de commentaires qui permettent de générer la documentation des API. Dans le but de réduire ce coût, nous modifions notre fichier index.php et remplaçons prado.php par pradolite.php. Ce dernier est un gros fichier incluant les fichiers PHP nécessaires et dont on a retiré les commentaires. +

+ +

Autres techniques

+ +

+D'autres techniques sont disponibles pour améliorer les performances d'une application PRADO. D'après notre expérience, un des goulets d'étranglement dans une application Web, est l'accès aux bases de données. Les requêtes en base de données prennent souvent du temps, ce qui dégrade le temps d'affichage d'une page. Le cache est la principale solution à ce problème. Le module de cache activé dans notre fichier de configuration d'application peut aussi être utilisé dans ce but. +

+

+Pour une page relativement stable et souvent consultée, le cache de sortie doit être envisagé. Le cache de sortie met en cache les parties sélectionnées d'une page. Ceci peut améliorer les performances des pages mises en cache de manière significative. +

+ +

+Il a été prouvé que les solutions de cache côté serveur étaient très efficaces pour améliorer les performances d'une application PRADO. Par exemple, nous avons observé qu'en utilisant le Zend Optimizer, le RPS (requêtes par seconde) peut être multiplié par 10. Bien sûr, ceci au risque d'avoir des pages périmées, tandis que les solutions de cache de PRADO garantissent la validité des pages fournies. +

+ +
\ No newline at end of file diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/Summary.page b/demos/blog-tutorial/protected/pages/Day5/fr/Summary.page new file mode 100755 index 00000000..1472c934 --- /dev/null +++ b/demos/blog-tutorial/protected/pages/Day5/fr/Summary.page @@ -0,0 +1,41 @@ + + +

Résumé

+ +

+Nous pouvons finalement déployer notre blog. Pour cela, nous devons juste copier le dossier blog complet vers le dossier du serveur Web. Nous pourrions avoir besoin de modifier index.php pour qu'il puisse trouver le chemin vers l'emplacement où a été installé le framework PRADO. +

+ +

+Nous avons donc fini notre blog. Le processus peut paraitre complexe vu que nous avons passé pas loin de cinq jours pour y arriver. Toutefois, comme nous l'avions dit au début, le but de ce tutoriel est d'aider les développeurs PRADO à appréhender les principales techniques de PRADO.Le tutoriel n'avais pas pour but de finir un blog en cinq minutes, sinon nous n'aurions rien appris. +

+ +

+En résumé, développer une application de gestion de base de données PRADO nécessite les étapes suivantes : +

+
    +
  1. Analyse et création de la base de données
  2. +
  3. Créer le squelette de l'application avec prado-cli
  4. +
  5. Mise en place de la gestion d'erreur pour gérer les erreurs d'utilisations
  6. +
  7. Création et mise en place du thème
  8. +
  9. Création et mise en place des gabarits principaux
  10. +
  11. Création de la connexion et des classes d'accès aux données
  12. +
  13. Création des différentes pages
  14. +
  15. Test et amélioration des performances/li> +
  16. Déploiement
  17. +
+ +

+Contrairement à l'ordre de notre tutoriel, la gestion d'erreur et la création des thèmes sont placées au début du processus. Ceci est dû au fait que des changements d'ordre généraux sont la plupart du temps requis. Par exemple, nous avons dû remplacer THttpException par BlogException dans notre tutoriel. Si vous définissez vos feuilles de styles plus tôt, vous pourrez plus facilement les utiliser au cours de la création des gabarits de pages. +

+ +

+Un dernier conseil, essayez de penser orienté objet pendant la phase d'analyse et d'implémentation. Utilisez l'héritage le plus souvent, et vous trouverez que le projet est plus facile à développer en équipe. Il vous sera aussi plus facile de réutiliser votre code et ainsi vos futurs projets seront finis plus rapidement. +

+ + + + +
+

Traduction (laborieuse) par Eric.M, nous pouvez me contacter par message privé ou par email sur le forum PRADO.

+
\ No newline at end of file diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/UseTheme.page b/demos/blog-tutorial/protected/pages/Day5/fr/UseTheme.page new file mode 100755 index 00000000..840a26b0 --- /dev/null +++ b/demos/blog-tutorial/protected/pages/Day5/fr/UseTheme.page @@ -0,0 +1,138 @@ + + +

Utilisation des Thèmes et des Skins

+ +

+PRADO propose un support intrinsèque des thèmes. En utilisant les thèmes, nous pouvons mieux séparer la logique applicative de la présentation et nous pouvons aussi changer facilement la présentation générale de notre blog. +

+ +

Création des thèmes

+ +

+Nous devons auparavant créer un dossier themes. C'est le dossier parent de tous les thèmes pour une application de PRADO. Chaque sous-dossier devient ainsi un thème dont le nom est le nom du sous-dossier. +

+ +

+Pour créer un thème nommé Basic, nous créons un sous-dossier theme/Basic. Dans ce dossier, nous pouvons mettre des feuilles de styles dépendantes du thème, des fichiers Javascript, des images et des fichiers skins. +

+ + +Le dossier themes doit être accessible de l'extérieur. Ne mettez pas de données sensibles dans ce dossier. Nous pouvons changer l'emplacement de ce dossier en configurant le module TThemeManager dans le fichier de configuration de l'application. + + + +

Création de la feuille de style

+ +

+Dans le dossier themes/Basic, nous créons un fichier CSS nommé style.css. Quand une page utilise ce thème, PRADO importe automatiquement la feuille de style dans cette page. Le même traitement est appliqué aux fichiers Javascript. +

+ +

+Le contenu du fichier CSS est le suivant : +

+ + +body { + font-family: verdana, 'trebuchet ms', sans-serif; + font-size: 10pt; + background: white; +} +#page { + margin: 0 auto 0 auto; + width: 600px; +} +#footer { + text-align: center; + margin-top: 10px; + padding: 10px; + border-top: 1px solid silver; +} +.post-box { + margin-bottom: 10px; + padding: 5px; +} +.post-box h3 { + padding: 5px; + font-size: 13pt; + background: lightgray; +} +.post-box a { + color: black; + text-decoration: none; +} +.post-box a:hover { + color: red; +} + + + +

Création du fichier de Skin

+ +

+Nous utilisons des skin pour initialiser les propriétés des contrôles PRADO. Les fichiers skin sont enregistrés avec une extension .skin dans le dossier du thème. Chaque fichier skin peut contenir plusieurs modèles pour un ou plusieurs types de contrôles. +

+ +

+Pour notre test, nous allons créer un fichier skin qui changera la couleur de fond de nos liens dans le pied de page. Nous créons un fichier nommé button.skin dans le dossier du thème themes/Basic. +

+ + +<com:THyperLink SkinID="MainMenu" BackColor="lightgreen" /> + + +

+Le fichier button.skin contient une seule définition pour les contrôles de type THyperLink dont la propriété SkinID est MainMenu. La définition applique une couleur vert-clair comme couleur de fond du contrôle. +

+ +

+En accord avec cette définition, nous modifions notre fichier protected/common/MainLayout.tpl pour appliquer aux liens du pied de page la valeur MainMenu à la propriété SkinID. +

+ +...... + +...... + + + +La syntaxe des fichiers skin est très proche de celle des gabarits. Chaque balise <com:> définit la présentation d'un type de contrôle. PRADO concatène automatiquement les fichiers skin pour un thème et applique le tout lorsque la page est affichée. + + + +

Utilisation du thème

+ +

+Pour utiliser le thème que nous venons juste de créer, nous modifions notre fichier de configuration de l'application comme ci-après. Comme vous pouvez le voir, nous affectons la valeur Basic (le nom du thème) à la priorité Theme pour toutes les pages. +

+ + +...... + + + + + +...... + + + +Il est possible de préciser différents thèmes pour différentes pages, et ceci peut-être faits soit en modifiant le fichier de configuration de page soit par programmation (propriété Theme). En dernier recours, on peut le faire dans la méthode onPreInit() de la page, ceci parce que PRADO applique le thème au début du cycle de vie de la page. + + + +

Test

+

+Pour voir la nouvelle présentation de notre site, allons à l'URL http://hostname/blog/index.php. Nous pouvons constater que la mise en page, les polices, les bordures sont modifiées. De même, la couleur de fond des liens en pied de page est vert-clair. +

+ + + +
\ No newline at end of file diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/output.gif b/demos/blog-tutorial/protected/pages/Day5/fr/output.gif new file mode 100755 index 00000000..67bd18a3 Binary files /dev/null and b/demos/blog-tutorial/protected/pages/Day5/fr/output.gif differ diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/output2.gif b/demos/blog-tutorial/protected/pages/Day5/fr/output2.gif new file mode 100755 index 00000000..16c81704 Binary files /dev/null and b/demos/blog-tutorial/protected/pages/Day5/fr/output2.gif differ diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/output3.gif b/demos/blog-tutorial/protected/pages/Day5/fr/output3.gif new file mode 100755 index 00000000..6879bbdf Binary files /dev/null and b/demos/blog-tutorial/protected/pages/Day5/fr/output3.gif differ -- cgit v1.2.3