Architecture(s) et application(s) Web - CSC4101 - Génération de pages - Télécom SudParis
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
CSC4101 2018-2019 CM 3 Table des matières 1 Objectifs de cette séquence 1 2 Génération de pages 1 3 Inspecteur du navigateur 6 4 Gabarits (templates) 6 5 Symfony 11 6 Take away 11 7 Récap 11 8 Ensuite.. . 11 9 Postface 12 1 Objectifs de cette séquence L'objectif de cette troisième séquence du cours sera de présenter le standard HyperText Markup Language (HTML) et la façon dont il peut être produit pour réaliser des interfaces pour les applications Web. On explicitera la façon dont les interactions entre un client HTTP et le serveur Web ont permis de passer d'une consultation de documents Hypertextes sur la Toile à la mise en ÷uvre d'applications interactives. On présentera le composant Twig utilisé dans l'environnement Symfony pour générer les pages HTML côté serveur à partir d'un système de gabarits (templates ). 2 Génération de pages Cette section présente les principes architecturaux adoptés pour mettre en ÷uvre des applica- tions sur le Web via le protocole HTTP. 2.1 Ressources Web accédées par le client HTTP Ressource Web objet d'une requête (méthode + URL) Représentation (document) format transmis dans la réponse (content-type) On va se concentrer sur le format le plus courant pour la représentation des ressources, HTML. 2.1.1 Questions philosophiques Ressource == Représentation ? Représentation == Visualisation réalisée par le client HTTP ? Poly étudiant 1
CSC4101 2018-2019 CM 3 Discussion philosophique, qui est parfois importante à prendre en compte. . . Une ressource a beau être identiée de façon unique par son URI, elle peut avoir de multiples représentations. En déréférençant une URI, on peut demander à un serveur Web faisant autorité de donner sa représentation, canonique. . . mais sur le Web, les choses sont parfois plus oues que celà, notamment quand on parle du Web sémantique (aussi appelé Web des données). Exemple : page Wikipedia qui parle d'une ressource, comme par exemple un personnage historique. Un personnage historique n'a pas d'URL propre, ce qui n'empêche pas de le représenter, et de considérer qu'une représentation eectuée par Wikipedia peut faire autorité. On peut aussi se demander si un même document, par exemple une représentation sous forme de document HTML donne toujours la même représentation sur tous les écrans. . . en principe oui, pour les informations importantes, la structure du contenu. Si le développeur a bien fait son travail. 2.2 Représentation de ressources R C UD on s'intéresse dans un premier temps à la représentation d'une consultation de ressources. on verra la modication ultérieurement. 2.3 Notion de Vues MVC Modèle Vues Contrôleur On parle souvent du patron de conception MVC, de frameworks MVC. Ici, on représente une version simpliée d'une boucle de rétroaction sur l'utilisation de l'application. 2.4 Contenu d'une page Web Visualisation d'une page contenant diérentes ressources document HTML principal images feuilles de style scripts ... Hypertexte : proviennent pas toutes du même serveur HTTP (requêtes supplémentaires) À noter qu'une partie de ces éléments peuvent être mis en cache dans le navigateur. On met de côté ash et autres contenus dans le canevas de pages, en plein écran Poly étudiant 2
CSC4101 2018-2019 CM 3 2.5 Recette de fabrication d'une page Génération d'une représentationd'une ressource gérée par l'application, transmise dans la ré- ponse HTTP HTML (construit côté serveur) : pages d'applications ou JSON, XML, etc. + ressources statiques complémentaires : CSS, Images, JavaScript, etc. ? + adaptation dynamique (exécution du CSS et du JavaScript côté client) On se concentre maintenant sur la génération du contenu HTML qui va servir d'interface à nos programmes. Les CSS et images sont en général statiques et dénis une fois pour toute par les développeurs, et mis en ligne tels-quels. La visualisation nale dépend de l'interprétation du HTML, du CSS et de l'exécution du Javascript qui modie le contenu de la page. 2.5.1 Fourniture des pages aux utilisateurs 2.5.2 Fabriquer du HTML côté serveur générer un contenu qui transite vers le navigateur dans la réponse à une requête HTTP (du HTML) côté client un programme Javascript s'exécute dans le contexte d'une page chargée par le navi- gateur, et construit du HTML en mémoire pour enrichir cette page (et déclenche d'autres requêtes HTTP) Dans ce cours, principalement 1ère option La construction dynamique du contenu des pages sera vu en séance 10. 2.5.3 Fabriquer du JSON, etc. Plus simple : le client ne le modie pas. 2.6 Génération des pages Examinons maintenant les techniques dont nous disposons pour mettre en ÷uvre les pages de l'application. 2.6.1 Séparation structure / mise en forme HTML : structure de la page, texte, méta-données CSS : mise en forme Poly étudiant 3
CSC4101 2018-2019 CM 3 Encore une fois, on ne va pas rentrer dans les détails des langages HTML et CSS. CSS sera vu plus spéciquement dans la prochaine séance. 2.6.2 Programme TP / Hors-présentiel Apprentissage de HTML et de Twig TP : pratique HTML + Gabarits Twig par l'exemple HP : Apprentissage langages, préciser les notions HP : Application sur le projet 2.7 HTML (5) HyperText Markup Language Rappel : vous avez vu HTML au début de ce cours en autonomie Ressources : https://www.codecademy.com/fr/learn/web : CodeCademy HTML & CSS (français) http://www.w3schools.com/html/ HTML(5) Tutorial W3schools https://developer.mozilla.org/fr/docs/Web/Guide/HTML/HTML5 2.7.1 Structure Structure arborescente (sections de texte) visible : ... ... ... ... Structure additionnelle (pas forcément visible, mais utilisable par le CSS) : ... ... La structure pas forcément visible prend tout son sens lorsqu'on ajoute du CSS. Tester la fonction d'achage sans styles du navigateur. 2.7.2 Balises sémantiques Poly étudiant 4
CSC4101 2018-2019 CM 3 Le navigateur ne sait pas forcément quoi faire de ces sections, donc il faut obligatoirement un CSS associé. Par contre, pour l'accessibilité, par exemple, on peut sauter directement à la lecture des sections en ignorant les en-têtes et autres. 2.7.3 Formulaires Soumission de données pour les applications : génère des requêtes HTTP vers des ressources. -> séance n+2 Sera vu principalement dans 2 séance. 2.7.4 Produire du HTML avec PHP HTML + PHP inline achage d'HTML sur la sortie standard du programme echo "..."; ou print("..."); Mieux : Bibliothèque de génération HTML Gabarits (Templates ) Cf. la section précédente pour les mécanismes d'appel des programmes en PHP par le serveur Web. La sortie standard est transmise dans la réponse à la requête HTTP, d'où la possibilité d'utiliser echo ou print(). Dans d'autres langages de programmation, le principe est équivalent. 2.7.5 Exemple achage PHP en ligne Ne pas faire comme ça en 2018 ! Poly étudiant 5
CSC4101 2018-2019 CM 3 Variante du Hello world PHP déjà vu à la séance précédente. Mélange de HTML et de code exécutable dans le même chier : rend très dicile la mainte- nance : mélange forme et fond. Obsolète, même si ça fonctionne encore. 2.7.6 Génération de HTML Ne pas faire comme ça en 2016 ! HTML est généré à partir de la concaténation de chaînes de caractère qui sont nalement achées sur la sortie du programme avec print. Déjà mieux que la version précédente : modularisation du comportement possible dans des fonctions, etc. Mais mélange toujours la présentation et la logique métier : balises dans le corps de la fonction : quid si on change la mise en page : retoucher toutes les fonctions. Et surtout, pas de vérication que le HTML est propre, bien formé : plein de bugs ne sont pas détectables ! Fortement déconseillé : aujourd'hui on recommende les templates. 3 Inspecteur du navigateur L'outil pour aider à la mise au point du HTML, dans le navigateur. Cette partie est faiteen démo, principalement. 4 Gabarits (templates) 4.1 Génération du HTML grâce aux gabarits Page construite à partir : structure de la page : gabarit (statique) donnéesgénérées par le programme (dynamiques) Génération HTML par moteur de templates Poly étudiant 6
CSC4101 2018-2019 CM 3 Vieux principe de conception (architecture / couture / . . . ) Le principe d'un gabarit, modèle ou patron est de prévoir la structure générale, les proportions des diérents éléments. On décompose en vues plus simples spéciques à certains éléments pour rendre la compréhen- sion plus simple et permettre de faire évoluer des sous-éléments indépendamment. 4.2 Twig "logo Twig" http://twig.sensiolabs.org/ Moteur de templates utilisé dans Symfony Utilisable seul Syntaxe inspirée de celle d'autres moteurs de templates populaires (Django) 4.3 Exemple : liens d'un menu Résultat souhaité : Ma page Produits Société Boutique Ma page Salut le monde On veut un menu sous forme de balises ... identiques. La seule diérence est le lien cible (contenu attribut href) et son libellé (texte dans la balise , appelé caption ). 4.3.1 Gabarit de base d'un élément de menu Motif à répéter : Poly étudiant 7
CSC4101 2018-2019 CM 3 {{ caption }} 4.3.2 Données à injecter array( array('href' => 'products/', 'caption' => 'Produits'), array('href' => 'company/', 'caption' => 'Société'), array('href' => 'shop/', 'caption' => 'Boutique') ); On alimente le moteur de template avec le template précédent, en lui fournissant la bonne structure de données, par exemple, ici, un tableau associatif en PHP. Twig fonctionne aussi avec d'autres types de données : JSON, etc. 4.4 Gabarit de page complet Ma page {% for item in navigation %} {{ item.caption }} {% endfor %} Ma page {{ a_variable }} Figure 1 Template home.html.twig Boucle for qui itère pour construire une barre de navigation contenant des liens hypertextes, à partir d'une liste de couples (URL, titre du lien), et ajoute la valeur d'une variable dans le corps de la page. 4.4.1 Données complètes array( 'navigation' => array( array('href' => 'products/', 'caption' => 'Produits'), array('href' => 'company/', 'caption' => 'Société'), array('href' => 'shop/', 'caption' => 'Boutique') ), 'a_variable' => "Salut le monde" ); 4.4.2 Résultat généré Poly étudiant 8
CSC4101 2018-2019 CM 3 Ma page Produits Société Boutique Ma page Salut le monde Une fois la boucle et les substitutions eectuées, le moteur de template a généré cette page HTML. Avantage : si on décide de renommer les URLs des rubriques du site, pas besoin de retoucher le HTML. A priori, un seul endroit impacté dans le code. 4.5 Programmer en Twig Programmation simple Mélange HTML et instructions Twig Algorithmique basique : boucles, conditionnelles syntaxe à la Python Pattern matching Structuration en motifs factorisables (va en général de pair avec les CSS) Tests sur http://twigfiddle.com/ 4.5.1 Exemple code Twig
CSC4101 2018-2019 CM 3 Compléter le contenu dans chaque page spécique en surchargeant des blocs 4.6.2 Structure de base base.html.twig {% block head %} {% block title %}{% endblock %} {% endblock %} {% block content %}{% endblock %} {% block footer %} © Copyright 2016 by .... {% endblock %} Cette structure principale permet de se dénir et faire évoluer le design général des pages de l'application : inclusion de CSS, modication de la présentation, etc. Chaque page sera générée à partir de ce template de base, en spécialisant le bloc content (initialement vide). Avantage : un seul chier impacté en cas de changement du look du site. Possibilité de spécialiser les CSS de chaque sous-rubrique du site, par exemple, en surchargeant le contenu par défaut du bloc head. 4.6.3 Spécialisation pour une page accueil.html.twig {% extends "base.html.twig" %} {% block title %}Accueil{% endblock %} {% block content %} Accueil Bienvenue sur ma page géniale {% endblock %} Exemple de template pour une page du site, qui surcharge (extends) le bloc content. Similaire à la surcharge dans les classes lles en programmation orientée objet : spécialisation. 4.6.4 Mockup exécutables 1. Conception des mockups 2. Codage des templates et CSS 3. Validation des interfaces sur un prototype 4. Implémentation du reste de l'application Poly étudiant 10
CSC4101 2018-2019 CM 3 Travail en parallèle de diérentes équipes Si on connaît HTML, on peut faire du Twig facilement. 5 Symfony 5.1 Mise au point logs dump() Data xtures ligne de commande barre d'outils Symfony 5.2 Barre d'outils Requêtes Réponses Gabarits Doctrine Performances ... 5.3 Gestion des erreurs Code source Lire les messages d'erreurs ! 5.4 Coder PHP : Contrôleurs (routeur, etc.) PHP + Doctrine : Modèles des données HTML + Twig : Vues Twig s'interface avec le modèle Doctrine => moins de code à écrire en PHP ø/ Inconvénient : pas mal de syntaxes diérentes 6 Take away HTML Gabarits pour mettre en ÷uvre les Pages (production des pages HTML avec Twig) Surcharge des blocs 7 Récap HTTP (GET) PHP Doctrine Routeur Symfony HTML Twig Tout ce qu'il faut pour un site Web dynamique en lecture seule :-) 8 Ensuite. . . 8.1 Tout de suite, séance TP n°3 Découverte de Twig sur application sur l rouge ToDo Démarrage du projet (binômes) à poursuivre en hors-présentiel Poly étudiant 11
CSC4101 2018-2019 CM 3 8.2 Projet noté Cahier des charges Checklist d'avancement À votre rythme ! 8.3 Hors-présentiel d'ici au prochain cours 3 h à caser dans la semaine HTML en autonomie Twig en autonomie Fin séance TP Suite projet 9 Postface 9.1 Crédits illustrations et vidéos logo Twig © 2010-2017 SensioLabs Copyright Ce cours est la propriété de ses auteurs et de Télécom SudParis. Cependant, une partie des illustrations incluses est protégée par les droits de ses auteurs, et pas nécessairement librement diusable. En conséquence, le contenu du présent polycopié est réservé à l'utilisation pour la formation initiale à Télécom SudParis. Merci de contacter les auteurs pour tout besoin de réutilisation dans un autre contexte. Poly étudiant 12
Vous pouvez aussi lire