# Table of Contents - [Bienvenue sur mon espace de cours | David Annebicque](#bienvenue-sur-mon-espace-de-cours-david-annebicque) - [Organisation du cours | Programmation Orientée Objet en PHP (B.U.T.)](#organisation-du-cours-programmation-orient-e-objet-en-php-b-u-t-) - [Présentation | Vue.js BUT](#pr-sentation-vue-js-but) - [Introduction | SAE401](#introduction-sae401) - [Introduction | SAE 301](#introduction-sae-301) - [Présentation | Symfony-6-LP | Symfony - B.U.T. MMI / LP DEV](#pr-sentation-symfony-6-lp-symfony-b-u-t-mmi-lp-dev) - [Présentation | Symfony - B.U.T. MMI / LP DEV](#pr-sentation-symfony-b-u-t-mmi-lp-dev) - [Python | Initiation à l'informatique](#python-initiation-l-informatique) - [Objectifs | Accessibilité (S1) | MMI Nouméa](#objectifs-accessibilit-s1-mmi-noum-a) - [Semestre 3 | Portfolio](#semestre-3-portfolio) - [1. Les sessions | MMI Nouméa](#1-les-sessions-mmi-noum-a) - [Planning | LP MIOT](#planning-lp-miot) - [Page 1 | Qui suis je ? | MMI Nouméa](#page-1-qui-suis-je-mmi-noum-a) - [Référentiel de compétences | Portfolio](#r-f-rentiel-de-comp-tences-portfolio) - [Présentation du module | Accessibilité numérique](#pr-sentation-du-module-accessibilit-num-rique) - [Introduction | BUT INFO / C# / Embarqué](#introduction-but-info-c-embarqu-) - [Introduction | SAE 303 - Dataviz](#introduction-sae-303-dataviz) - [Présentation | Vue.js LP](#pr-sentation-vue-js-lp) - [Séance 1 | Développement Front (S3) | MMI Nouméa](#s-ance-1-d-veloppement-front-s3-mmi-noum-a) - [Séance 1 : Concepts et installation | Vue.js BUT](#s-ance-1-concepts-et-installation-vue-js-but) - [Séance 6 : Routes et API | Vue.js BUT](#s-ance-6-routes-et-api-vue-js-but) - [FAQ | Programmation Orientée Objet en PHP (B.U.T.)](#faq-programmation-orient-e-objet-en-php-b-u-t-) - [Séance A : Introduction à la POO | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-a-introduction-la-poo-programmation-orient-e-objet-en-php-b-u-t-) - [Séance E : Héritage & Encapsulation | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-e-h-ritage-encapsulation-programmation-orient-e-objet-en-php-b-u-t-) - [Séance B : Concepts de la POO | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-b-concepts-de-la-poo-programmation-orient-e-objet-en-php-b-u-t-) - [Séance C : Encapsulation | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-c-encapsulation-programmation-orient-e-objet-en-php-b-u-t-) - [CM2 : Point d'étape | Programmation Orientée Objet en PHP (B.U.T.)](#cm2-point-d-tape-programmation-orient-e-objet-en-php-b-u-t-) - [Séance 19 : Evaluation écrite | Vue.js BUT](#s-ance-19-evaluation-crite-vue-js-but) - [Séance 7 : Evénements et Formulaires | Vue.js BUT](#s-ance-7-ev-nements-et-formulaires-vue-js-but) - [Séance 2 : Boucles et tests | Vue.js BUT](#s-ance-2-boucles-et-tests-vue-js-but) - [Interfaces | Programmation Orientée Objet en PHP (B.U.T.)](#interfaces-programmation-orient-e-objet-en-php-b-u-t-) - [Sujet | SAE401](#sujet-sae401) - [Séance 4-5 : Composants et API | Vue.js BUT](#s-ance-4-5-composants-et-api-vue-js-but) - [Organisation | SAE 301](#organisation-sae-301) - [Séance 3 : Routes | Vue.js BUT](#s-ance-3-routes-vue-js-but) - [Séance 15-16 : Pour réviser | Vue.js BUT](#s-ance-15-16-pour-r-viser-vue-js-but) - [TP Noté | Programmation Orientée Objet en PHP (B.U.T.)](#tp-not-programmation-orient-e-objet-en-php-b-u-t-) - [Séance 18 : TP Noté | Vue.js BUT](#s-ance-18-tp-not-vue-js-but) - [Sujet | SAE 301](#sujet-sae-301) - [Séance 9 : ApiPlatform | Vue.js BUT](#s-ance-9-apiplatform-vue-js-but) - [Livrable | SAE401](#livrable-sae401) - [Séance 10 : VueJs et ApiPlatform (1) | Vue.js BUT](#s-ance-10-vuejs-et-apiplatform-1-vue-js-but) - [Livrable et évaluation | SAE 301](#livrable-et-valuation-sae-301) - [Corrections séance D | Programmation Orientée Objet en PHP (B.U.T.)](#corrections-s-ance-d-programmation-orient-e-objet-en-php-b-u-t-) - [Semestre 2 | Portfolio](#semestre-2-portfolio) - [Semestre 1 | Portfolio](#semestre-1-portfolio) - [Séance 12 : Routes imbriquées // Animations et transitions | Vue.js BUT](#s-ance-12-routes-imbriqu-es-animations-et-transitions-vue-js-but) - [Semestre 4 | Portfolio](#semestre-4-portfolio) - [Organisation et Planning | SAE401](#organisation-et-planning-sae401) - [Séance 8 : Watch et évents | Vue.js BUT](#s-ance-8-watch-et-vents-vue-js-but) - [Séance F : Utilisation d'une base de données et des formulaires | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-f-utilisation-d-une-base-de-donn-es-et-des-formulaires-programmation-orient-e-objet-en-php-b-u-t-) - [Programme National | Portfolio](#programme-national-portfolio) - [Description générale | Programmation Orientée Objet en PHP (B.U.T.)](#description-g-n-rale-programmation-orient-e-objet-en-php-b-u-t-) - [2. Mise en place d'une authentification | MMI Nouméa](#2-mise-en-place-d-une-authentification-mmi-noum-a) - [Séance 0 : Présentation de la ressource en BUT3 | Vue.js BUT](#s-ance-0-pr-sentation-de-la-ressource-en-but3-vue-js-but) - [Séance D : Héritage | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-d-h-ritage-programmation-orient-e-objet-en-php-b-u-t-) - [Séance 11 : VueJs et ApiPlatform (2) | Vue.js BUT](#s-ance-11-vuejs-et-apiplatform-2-vue-js-but) - [Rappels et anciens supports | Vue.js BUT](#rappels-et-anciens-supports-vue-js-but) - [Séance 6-a : TypeScript | Vue.js BUT](#s-ance-6-a-typescript-vue-js-but) - [Séance E : Utilisation d'une base de données et des formulaires | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-e-utilisation-d-une-base-de-donn-es-et-des-formulaires-programmation-orient-e-objet-en-php-b-u-t-) - [Séance H : Des objets dans des classes | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-h-des-objets-dans-des-classes-programmation-orient-e-objet-en-php-b-u-t-) - [Séance 2 | Initiation à l'informatique](#s-ance-2-initiation-l-informatique) - [Séance G : Finalisation | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-g-finalisation-programmation-orient-e-objet-en-php-b-u-t-) - [Séance B : Génération de formulaire en POO | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-b-g-n-ration-de-formulaire-en-poo-programmation-orient-e-objet-en-php-b-u-t-) - [Séance 3 | Initiation à l'informatique](#s-ance-3-initiation-l-informatique) - [Séance 4 : Turtle | Initiation à l'informatique](#s-ance-4-turtle-initiation-l-informatique) - [Séance 3 | LP MIOT](#s-ance-3-lp-miot) - [Mini projet : Site e-commerce | Vue.js BUT](#mini-projet-site-e-commerce-vue-js-but) - [Séance 12 : Projet – Finalisation | Vue.js BUT](#s-ance-12-projet-finalisation-vue-js-but) - [Séance A : Structure de base | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-a-structure-de-base-programmation-orient-e-objet-en-php-b-u-t-) - [Séance C : Traitement des formulaires pour nos livres et auteurs | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-c-traitement-des-formulaires-pour-nos-livres-et-auteurs-programmation-orient-e-objet-en-php-b-u-t-) - [Séance 5 | Initiation à l'informatique](#s-ance-5-initiation-l-informatique) - [Installation de PHPStorm | Programmation Orientée Objet en PHP (B.U.T.)](#installation-de-phpstorm-programmation-orient-e-objet-en-php-b-u-t-) - [3. Email | MMI Nouméa](#3-email-mmi-noum-a) - [Séance I-J | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-i-j-programmation-orient-e-objet-en-php-b-u-t-) - [Séance 8 : Nuxt avancé & SEO | Vue.js BUT](#s-ance-8-nuxt-avanc-seo-vue-js-but) - [Séance 2 | Accessibilité (S1) | MMI Nouméa](#s-ance-2-accessibilit-s1-mmi-noum-a) - [Séance 1 | LP MIOT](#s-ance-1-lp-miot) - [Séance 6-b : Introduction à Nuxt 3 | Vue.js BUT](#s-ance-6-b-introduction-nuxt-3-vue-js-but) - [Séance 7 : Nuxt & API | Vue.js BUT](#s-ance-7-nuxt-api-vue-js-but) - [Séance 11 : Projet – Développement | Vue.js BUT](#s-ance-11-projet-d-veloppement-vue-js-but) - [Séance 3 | Accessibilité (S1) | MMI Nouméa](#s-ance-3-accessibilit-s1-mmi-noum-a) - [Séance 2 | LP MIOT](#s-ance-2-lp-miot) - [Séance 1 | Accessibilité (S1) | MMI Nouméa](#s-ance-1-accessibilit-s1-mmi-noum-a) - [Semestre 6 - Parcours en Alternance | Portfolio](#semestre-6-parcours-en-alternance-portfolio) - [Séance 8 : Exercice complet | Vue.js LP](#s-ance-8-exercice-complet-vue-js-lp) - [Séance 4 | Initiation à l'informatique](#s-ance-4-initiation-l-informatique) - [CM Introductif | SAE 303 - Dataviz](#cm-introductif-sae-303-dataviz) - [Séance 1 | Initiation à l'informatique](#s-ance-1-initiation-l-informatique) - [Séance D : Utilisation d'une base de données | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-d-utilisation-d-une-base-de-donn-es-programmation-orient-e-objet-en-php-b-u-t-) - [Enquête | BUT INFO / C# / Embarqué](#enqu-te-but-info-c-embarqu-) - [JavaScript et LocalStorage | SAE 301](#javascript-et-localstorage-sae-301) - [Séance 4 : Router et navigation | Vue.js BUT](#s-ance-4-router-et-navigation-vue-js-but) - [Séance I : Manager et BDD | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-i-manager-et-bdd-programmation-orient-e-objet-en-php-b-u-t-) - [Séance 5 | Développement Front (S3) | MMI Nouméa](#s-ance-5-d-veloppement-front-s3-mmi-noum-a) - [Séance G : Synthèse des concepts | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-g-synth-se-des-concepts-programmation-orient-e-objet-en-php-b-u-t-) - [Séance 9 : Exercice complet | Vue.js LP](#s-ance-9-exercice-complet-vue-js-lp) - [Séance 3 | Accessibilité numérique](#s-ance-3-accessibilit-num-rique) - [Séance 8 | Développement Front (S3) | MMI Nouméa](#s-ance-8-d-veloppement-front-s3-mmi-noum-a) - [Séance 5 | Accessibilité numérique](#s-ance-5-accessibilit-num-rique) - [Exercices S3 - FC | Programmation Orientée Objet en PHP (B.U.T.)](#exercices-s3-fc-programmation-orient-e-objet-en-php-b-u-t-) - [Choix du sujet | SAE 303 - Dataviz](#choix-du-sujet-sae-303-dataviz) - [Astuces WPF | BUT INFO / C# / Embarqué](#astuces-wpf-but-info-c-embarqu-) - [Séance 7 | Développement Front (S3) | MMI Nouméa](#s-ance-7-d-veloppement-front-s3-mmi-noum-a) - [Corrections S4 | Initiation à l'informatique](#corrections-s4-initiation-l-informatique) - [Exercice datavisualisation 2 | SAE 303 - Dataviz](#exercice-datavisualisation-2-sae-303-dataviz) - [Cours magistral 2 - préparer les données | SAE 303 - Dataviz](#cours-magistral-2-pr-parer-les-donn-es-sae-303-dataviz) - [Séance 10 : TP Noté | Vue.js LP](#s-ance-10-tp-not-vue-js-lp) - [Séance 2 | Accessibilité numérique](#s-ance-2-accessibilit-num-rique) - [Introduction | Accessibilité (S1) | MMI Nouméa](#introduction-accessibilit-s1-mmi-noum-a) - [Astuces pour vos IDE | Accessibilité numérique](#astuces-pour-vos-ide-accessibilit-num-rique) - [Organisation et Livrable | SAE 303 - Dataviz](#organisation-et-livrable-sae-303-dataviz) - [DLL HomeIO | BUT INFO / C# / Embarqué](#dll-homeio-but-info-c-embarqu-) - [Corrections séance F | Programmation Orientée Objet en PHP (B.U.T.)](#corrections-s-ance-f-programmation-orient-e-objet-en-php-b-u-t-) - [Séance F : Héritage multiple | Programmation Orientée Objet en PHP (B.U.T.)](#s-ance-f-h-ritage-multiple-programmation-orient-e-objet-en-php-b-u-t-) - [Exercice datavisualisation 1 | SAE 303 - Dataviz](#exercice-datavisualisation-1-sae-303-dataviz) - [Séance 4 | Accessibilité numérique](#s-ance-4-accessibilit-num-rique) - [Mise en place d'une supervision | BUT INFO / C# / Embarqué](#mise-en-place-d-une-supervision-but-info-c-embarqu-) - [Scénarios à intégrer | BUT INFO / C# / Embarqué](#sc-narios-int-grer-but-info-c-embarqu-) - [Séance 5 : State avancé (Pinia) | Vue.js BUT](#s-ance-5-state-avanc-pinia-vue-js-but) - [Bibliographie / Sitographie | Accessibilité numérique](#bibliographie-sitographie-accessibilit-num-rique) - [Outils de navigateur | Accessibilité numérique](#outils-de-navigateur-accessibilit-num-rique) - [Séance 10 : Projet – Kick-off réseau social | Vue.js BUT](#s-ance-10-projet-kick-off-r-seau-social-vue-js-but) - [Séance 6 | Développement Front (S3) | MMI Nouméa](#s-ance-6-d-veloppement-front-s3-mmi-noum-a) - [Séance 2 - S1 - BUT MMI | Accessibilité numérique](#s-ance-2-s1-but-mmi-accessibilit-num-rique) - [Cours magistral 1 - Donner du sens aux données | SAE 303 - Dataviz](#cours-magistral-1-donner-du-sens-aux-donn-es-sae-303-dataviz) - [Analyser les données - statistiques | SAE 303 - Dataviz](#analyser-les-donn-es-statistiques-sae-303-dataviz) - [LP | Vue.js LP](#lp-vue-js-lp) - [Quelques sources | Vue.js LP](#quelques-sources-vue-js-lp) - [Séance 2 | Développement Front (S3) | MMI Nouméa](#s-ance-2-d-veloppement-front-s3-mmi-noum-a) - [Analyser les données - TCD | SAE 303 - Dataviz](#analyser-les-donn-es-tcd-sae-303-dataviz) - [Gestion des volets | BUT INFO / C# / Embarqué](#gestion-des-volets-but-info-c-embarqu-) - [Séance 4 | Développement Front (S3) | MMI Nouméa](#s-ance-4-d-veloppement-front-s3-mmi-noum-a) - [Séance 3 : Communication avec API | Vue.js BUT](#s-ance-3-communication-avec-api-vue-js-but) - [Séance 5 - 8 | LP MIOT](#s-ance-5-8-lp-miot) - [Séance 3 | Développement Front (S3) | MMI Nouméa](#s-ance-3-d-veloppement-front-s3-mmi-noum-a) - [Séance 1 : Introduction & rappel Vue | Vue.js BUT](#s-ance-1-introduction-rappel-vue-vue-js-but) - [Séance 7 : Routes | Vue.js LP](#s-ance-7-routes-vue-js-lp) - [Personnaliser TWIG | Symfony-6-LP | Symfony - B.U.T. MMI / LP DEV](#personnaliser-twig-symfony-6-lp-symfony-b-u-t-mmi-lp-dev) - [Planning | Symfony-6-LP | Symfony - B.U.T. MMI / LP DEV](#planning-symfony-6-lp-symfony-b-u-t-mmi-lp-dev) - [Séance 1 : Eco-Système de Symfony | Symfony-6-LP | Symfony - B.U.T. MMI / LP DEV](#s-ance-1-eco-syst-me-de-symfony-symfony-6-lp-symfony-b-u-t-mmi-lp-dev) - [Webpack | Symfony-6-LP | Symfony - B.U.T. MMI / LP DEV](#webpack-symfony-6-lp-symfony-b-u-t-mmi-lp-dev) - [Premier exemple pas à pas | BUT INFO / C# / Embarqué](#premier-exemple-pas-pas-but-info-c-embarqu-) - [Travail à rendre | Symfony-6-LP | Symfony - B.U.T. MMI / LP DEV](#travail-rendre-symfony-6-lp-symfony-b-u-t-mmi-lp-dev) - [Séance 1 : installation | Symfony-6-LP | Symfony - B.U.T. MMI / LP DEV](#s-ance-1-installation-symfony-6-lp-symfony-b-u-t-mmi-lp-dev) - [Gestion de la porte de garage | BUT INFO / C# / Embarqué](#gestion-de-la-porte-de-garage-but-info-c-embarqu-) - [FAQ | Symfony-6-LP | Symfony - B.U.T. MMI / LP DEV](#faq-symfony-6-lp-symfony-b-u-t-mmi-lp-dev) - [Séance 1 : Architecture de Symfony | Symfony-6-LP | Symfony - B.U.T. MMI / LP DEV](#s-ance-1-architecture-de-symfony-symfony-6-lp-symfony-b-u-t-mmi-lp-dev) - [Séance 4 : Manipuler les formulaires | Vue.js LP](#s-ance-4-manipuler-les-formulaires-vue-js-lp) - [Repository | Symfony-6-LP | Symfony - B.U.T. MMI / LP DEV](#repository-symfony-6-lp-symfony-b-u-t-mmi-lp-dev) - [Séance 1 | Accessibilité numérique](#s-ance-1-accessibilit-num-rique) - [Services et Injection de dépendances | Symfony-6-LP | Symfony - B.U.T. MMI / LP DEV](#services-et-injection-de-d-pendances-symfony-6-lp-symfony-b-u-t-mmi-lp-dev) - [Séance 3 : Écouter des événements | Vue.js LP](#s-ance-3-couter-des-v-nements-vue-js-lp) - [Séance 0 : Docker et Installation | Symfony - B.U.T. MMI / LP DEV](#s-ance-0-docker-et-installation-symfony-b-u-t-mmi-lp-dev) - [Séance 5 : Cycle de vie et premiers pas avec les API | Vue.js LP](#s-ance-5-cycle-de-vie-et-premiers-pas-avec-les-api-vue-js-lp) - [Séance 2 : Architecture et composables | Vue.js BUT](#s-ance-2-architecture-et-composables-vue-js-but) --- # Bienvenue sur mon espace de cours | David Annebicque [hashtag](https://cours.davidannebicque.fr/david-annebicque#but-mmi-metiers-du-multimedia-et-de-linternet) BUT MMI (Métiers du Multimédia et de l'Internet) ---------------------------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/david-annebicque#ressources) Ressources [](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/) POO [](https://cours.davidannebicque.fr/symfony/) Symfony [](https://cours.davidannebicque.fr/vue.js-but/) Vue.js [](https://cours.davidannebicque.fr/portfolio/semestre-3) Portfolio ### [hashtag](https://cours.davidannebicque.fr/david-annebicque#sae) SAÉ [](https://cours.davidannebicque.fr/sae-301/) SAE301 : Application web avec une UX [](https://cours.davidannebicque.fr/sae401/) SAE401 : S4 [hashtag](https://cours.davidannebicque.fr/david-annebicque#mmi-noumea) MMI Nouméa --------------------------------------------------------------------------------------- [](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/) S1 : Accessibilité [](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/) S3 : Développement Front [](https://cours.davidannebicque.fr/mmi-noumea/) S3 : Développement back [](https://cours.davidannebicque.fr/mmi-noumea/qui-suis-je/) Qui suis je ? [hashtag](https://cours.davidannebicque.fr/david-annebicque#lp-dev) LP DEV ------------------------------------------------------------------------------- [](https://cours.davidannebicque.fr/symfony/symfony-6-lp/) Symfony LP [](https://cours.davidannebicque.fr/vue.js/) Vue.js LP [hashtag](https://cours.davidannebicque.fr/david-annebicque#autres-formations) Autres formations ----------------------------------------------------------------------------------------------------- [](https://cours.davidannebicque.fr/but-info/) BUT INFO [](https://cours.davidannebicque.fr/passerelle/) Passerelle [hashtag](https://cours.davidannebicque.fr/david-annebicque#anciens-cours) Anciens cours --------------------------------------------------------------------------------------------- [](https://cours.davidannebicque.fr/lp-miot/) LP MIOT (Initiation au web) [](https://cours.davidannebicque.fr/accessibilite-numerique) Accessibilité [](https://cours.davidannebicque.fr/sae-303-dataviz) SAE 303 : Dataviz [](https://cours.davidannebicque.fr/portfolio/referentiel-de-competences) Portfolio --- # Organisation du cours | Programmation Orientée Objet en PHP (B.U.T.) Vous trouverez sur ce site tous les supports de cours pour le module de WR313a/WR313e du B.U.T. MMI de l'IUT de Troyes. Les sources nécessaires pour les différents TD et TP sont/seront disponibles dans le dépôt GitHub associé. Cette ressource est étroitement liée avec la ressource sur Symfony, et des liens seront fait entre les deux. Les exercices et séances pourront se croiser. Reportez-vous au planning global se trouvant sur ce lien. La première partie de cette ressource sera consacrée aux concepts de la Programmation Orientée Objet (POO), puis mise en pratique, notamment au travers de Symfony. L'évaluation se fera en deux parties : * Une évaluation écrite, couplée avec l'évaluation de Symfony * Une évaluation pratique avec un TP noté individuel. [SuivantFAQchevron-right](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/faq) Mis à jour il y a 4 mois --- # Présentation | Vue.js BUT circle-info Le support de cours est ici : [https://presentations.davidannebicque.fr/vuejsarrow-up-right](https://presentations.davidannebicque.fr/vuejs) [hashtag](https://cours.davidannebicque.fr/vue.js-but/#quels-sont-les-problemes-du-developpement-front-classique) Quels sont les problèmes du développement front "classique" ? ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ * Chaque page web HTML est codée intégralement, et peu réutilisable pour d'autres pages (hors include en php). * Une page web est relativement figée (sans javascript), et ne permet pas une interaction "temps réel" (un champ complété alimente une zone directement). * Le manque de découpage de la page ne permet pas de réutiliser tout ou partie de la page sur une autre page [hashtag](https://cours.davidannebicque.fr/vue.js-but/#quest-ce-que-vue.js) Qu'est ce que Vue.js ? ------------------------------------------------------------------------------------------------------- > Vue.js (aussi appelé plus simplement Vue), est un [framework JavaScriptarrow-up-right](https://fr.wikipedia.org/wiki/Framework_JavaScript) > [open-sourcearrow-up-right](https://fr.wikipedia.org/wiki/Open_source) > utilisé pour construire des interfaces utilisateur et des [applications web monopagesarrow-up-right](https://fr.wikipedia.org/wiki/Application_web_monopage) > . Vue a été créé par Evan You et est maintenu par lui et le reste des membres actifs de l'équipe principale travaillant sur le projet et son écosystème. [![Logo](https://cours.davidannebicque.fr/vue.js-but/~gitbook/image?url=https%3A%2F%2Fvuejs.org%2Flogo.svg&width=20&dpr=3&quality=100&sign=66d1088&sv=2)Vue.jsvuejschevron-right](https://vuejs.org/) La documentation officielle Vue.js apporte la notion de composant (qui n'est pas nouvelle en soit, HTML intégre déjà la notion de composant), et permet un "binding" complet entre les éléments (mise à jour réciproque des éléments). Vue.js apporte une structuration forte du développement front, une réutilisabilité importante avec la notion de composant et améliore l'interactivité de l'application et l'expérience des utilisateurs. Vue.js nécessite un environnement NodeJs pour fonctionner. Le code écrit n'est pas directement exploitable par les navigateurs et implique un mécanisme de "traduction". Un automatisateur de tâche est indispensable, tel que webpack ou, ViteJs qui est recommandé avec la version 3 de Vue.js. Vue.js implique également une bonne connaissance de la syntaxe JavaScript et en particulier les versions ECMAScript 6 (ES6) et suivantes. [hashtag](https://cours.davidannebicque.fr/vue.js-but/#quelles-sont-les-alternatives-a-vue.js) Quelles sont les alternatives à Vue.js ------------------------------------------------------------------------------------------------------------------------------------------ Les "concurrents" directs de Vue.js sont : * AngularJs (dont le développeur de Vue.js est issu), précurseur sur l'approche par composant, fondé par Google. * ReactJs, développé par Facebook Lire par exemple : [![Logo](https://cours.davidannebicque.fr/vue.js-but/~gitbook/image?url=https%3A%2F%2Fkinsta.com%2Ffr%2Fwp-content%2Fuploads%2Fsites%2F4%2F2023%2F12%2Fcropped-kinsta-favicon-192x192.png&width=20&dpr=3&quality=100&sign=111105a2&sv=2)Vue vs React : Lequel devriez-vous utiliser ?Kinsta®chevron-right](https://kinsta.com/fr/blog/vue-vs-react/) [![Logo](https://cours.davidannebicque.fr/vue.js-but/~gitbook/image?url=https%3A%2F%2Fpagepro.co%2Fblog%2Fwp-content%2Fuploads%2F2018%2F09%2Fcropped-favicon-fe740bed81-1-192x192.png&width=20&dpr=3&quality=100&sign=b164ef45&sv=2)React vs Vue: Which Frontend Framework to Choose in 2026?Pageprochevron-right](https://pagepro.co/blog/react-vs-vue-comparison/) [NextSéance 1 : Concepts et installationchevron-right](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation) Last updated 1 year ago --- # Introduction | SAE401 [hashtag](https://cours.davidannebicque.fr/sae401/#programme-national) Programme National ---------------------------------------------------------------------------------------------- **Objectifs :** mettre en œuvre et combiner les compétences associées à la SAE (comprendre, concevoir, développer et entreprendre) pour développer une application web intégrant un back office et une interface dynamique dans un contexte international. En tant que développeurs web juniors, les étudiants doivent concevoir et développer une application ou un service web et doivent répondre à la question : **Comment développer une application ou un service web en proposant une expérience utilisateur de qualité ?** Une **partie significative** des contenus sera réalisée en anglais. La SAÉ doit prévoir des situations permettant d’évaluer la capacité des étudiants à communiquer au sein d’organisations. [SuivantSujetchevron-right](https://cours.davidannebicque.fr/sae401/cm-lancement/sujet) Mis à jour il y a 1 an --- # Introduction | SAE 301 [hashtag](https://cours.davidannebicque.fr/sae-301/#programme-national) Programme National ----------------------------------------------------------------------------------------------- Objectifs : combiner les ressources liées au développement web, au design d’expérience et à la gestion de projet pour concevoir et développer des parcours utilisateurs. En tant que développeurs web et UX-designers, les étudiants doivent analyser le cahier des charges d'une application ou d'un site web, identifier les parcours utilisateurs, avant d'en développer les fonctionnalités en répondant à la question : Comment mettre en place un site web offrant une expérience utilisateur de qualité ? [hashtag](https://cours.davidannebicque.fr/sae-301/#presentation-resumee) Présentation résumée --------------------------------------------------------------------------------------------------- Le service culture d'une mairie d'une ville moyenne souhaite proposer un site web à ses clients avec l'offre de spectacle qu'elle propose au travers de ses différents lieux (théâtres, salles, cinéma, espace en plein air). Les objectifs de cette SAE sont : * Produire un site ergonomique avec une UX travaillée * Produire un site accessible, éco-conçu et avec un référencement travaillé [SuivantSujetchevron-right](https://cours.davidannebicque.fr/sae-301/cm-lancement/sujet) Mis à jour il y a 2 ans --- # Présentation | Symfony-6-LP | Symfony - B.U.T. MMI / LP DEV **L'ensemble de ce cours se base sur la version 6 de Symfony** circle-check Le cours des versions précédentes se trouve : [https://cours.davidannebicque.fr/symfony/v/version-4.1/arrow-up-right](https://cours.davidannebicque.fr/symfony/v/version-4.1/) ou [https://cours.davidannebicque.fr/symfony/v/version-5/arrow-up-right](https://cours.davidannebicque.fr/symfony/v/version-5/) [Introduction](https://cours.davidannebicque.fr/symfony/symfony-6-lp/lp/introduction) * ["Eco-système" Symfony](https://cours.davidannebicque.fr/symfony/symfony-6-lp/lp/eco-systeme) * [Première Page](https://cours.davidannebicque.fr/symfony/symfony-6-lp/lp/premiere_page) * [Controller & Routes](https://cours.davidannebicque.fr/symfony/symfony-6-lp/lp/controller) * [Vues (TWIG)](https://cours.davidannebicque.fr/symfony/symfony-6-lp/lp/vues) * [Modèles - ORM - Entités](https://cours.davidannebicque.fr/symfony/symfony-6-lp/lp/modeles) * [Relations entre entités](https://cours.davidannebicque.fr/symfony/symfony-6-lp/lp/relations) * [FORM](https://cours.davidannebicque.fr/symfony/symfony-6-lp/lp/form) * Securité * [Bundles](https://cours.davidannebicque.fr/symfony/symfony-6-lp/semestre-4/bundles) * TP [SuivantPlanningchevron-right](https://cours.davidannebicque.fr/symfony/symfony-6-lp/lp/planning) Mis à jour il y a 3 ans Ce contenu vous a-t-il été utile ? --- # Présentation | Symfony - B.U.T. MMI / LP DEV circle-exclamation Le cours de 2025-2026 est mené par Patrice Gommery et se trouve ici : [https://docs.mmi-troyes.fr/books/wr319d-wra319darrow-up-right](https://docs.mmi-troyes.fr/books/wr319d-wra319d) **L'ensemble de ce cours se base sur la version 6 de Symfony** circle-check Le cours des versions précédentes se trouve : [https://cours.davidannebicque.fr/symfony/v/version-4.1/arrow-up-right](https://cours.davidannebicque.fr/symfony/v/version-4.1/) ou [https://cours.davidannebicque.fr/symfony/v/version-5/arrow-up-right](https://cours.davidannebicque.fr/symfony/v/version-5/) [hashtag](https://cours.davidannebicque.fr/symfony/#objectifs-du-s3) Objectifs du S3 ----------------------------------------------------------------------------------------- * Comprendre le concept de MVC (Modèle-Vue-Contrôleur) * Comprendre le fonctionnement d'un framework * Installer et débuter avec le framework Symfony Durant ce semestre nous aurons pour fil rouge la construction d'un mini forum de discussion. Vous pouvez en voir une demonstration ici : [https://forum.davidannebicque.ovharrow-up-right](https://forum.davidannebicque.ovh/) [SuivantSéance 0 : Docker et Installationchevron-right](https://cours.davidannebicque.fr/symfony/semestre-3/seance-0) Mis à jour il y a 5 mois Ce contenu vous a-t-il été utile ? --- # Python | Initiation à l'informatique Pour fonctionner Python nécessite l'interpréteur python et un éditeur de texte (on en trouve du plus simple (notePad, Visual Code) aux plus évolués (PyCharm). Nous allons utiliser une version "portable" qui ne nécessite pas d'installation et qui intégre tout ce dont nous avons besoin. [Mettez à jour vos favorisedupython.tuxfamily.orgchevron-right](https://edupython.tuxfamily.org/#t%C3%A9l%C3%A9chargement) Choisissez la **version zip**. Décompressez et executez le programme. Vous devriez avoir la fenêtre ci-dessous ![](https://cours.davidannebicque.fr/passerelle/~gitbook/image?url=https%3A%2F%2F1316320289-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F9DvAjMCFAfzeXYtRLGj4%252Fuploads%252FMXxJmAs0hcF2OAQgPhPA%252FCapture1.PNG%3Falt%3Dmedia%26token%3D189d2861-5d95-4f25-a180-11c7ced1ec40&width=768&dpr=3&quality=100&sign=2839d7fa&sv=2) Lien vers un autre cours python avec les principales instructions. [Introduction à Python — Cours Pythoncourspython.comchevron-right](https://courspython.com/introduction-python.html) Vous disposez maintenant d'une version de python sur votre poste, permettant de tester des programmes plus complet, et de les sauvegarder. Ou un outil en ligne [![Logo](https://cours.davidannebicque.fr/passerelle/~gitbook/image?url=https%3A%2F%2Fwww.online-python.com%2Flogo.png&width=20&dpr=3&quality=100&sign=f028a1a2&sv=2)Online Python - IDE, Editor, Compiler, Interpreterwww.online-python.comchevron-right](https://www.online-python.com/) [hashtag](https://cours.davidannebicque.fr/passerelle/#quelques-concepts-de-la-programmation) Quelques concepts de la programmation ---------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/passerelle/#les-variables) Les variables Une variable est un espace de mémoire qui permet de stocker une valeur. Cette valeur peut être de différents types : entier, réel, chaîne de caractères, liste, dictionnaire, etc. En python, on ne déclare pas le type de la variable, il est déterminé automatiquement. Copier a = 5 b = "Bonjour" c = 3.14 ### [hashtag](https://cours.davidannebicque.fr/passerelle/#afficher-quelque-chose-en-python) Afficher quelque chose en python Pour afficher quelque chose en python, on utilise la fonction `print()`. Copier print("Bonjour") Afficher une variable Copier a = 5 print(a) Afficher une variable avec du texte Copier a = 5 print("La valeur de a est", a) ### [hashtag](https://cours.davidannebicque.fr/passerelle/#demander-quelque-chose-a-lutilisateur) Demander quelque chose à l'utilisateur Pour demander quelque chose à l'utilisateur, on utilise la fonction `input()`. Copier a = input("Quel est votre nom ? ") print("Bonjour", a) ### [hashtag](https://cours.davidannebicque.fr/passerelle/#les-operateurs) Les opérateurs Les opérateurs permettent de réaliser des opérations sur les variables. On distingue les opérateurs arithmétiques, les opérateurs de comparaison, les opérateurs logiques, les opérateurs d'appartenance, les opérateurs d'identité. Copier a = 5 b = 3 c = a + b d = a - b e = a * b f = a / b g = a % b h = a ** b print(c, d, e, f, g, h) Les opérateurs de comparaison permettent de comparer deux valeurs. Ils renvoient un booléen (vrai ou faux). Copier a = 5 b = 3 c = a > b d = a < b e = a == b f = a != b g = a >= b h = a <= b print(c, d, e, f, g, h) ### [hashtag](https://cours.davidannebicque.fr/passerelle/#la-syntaxe-de-python) La syntaxe de python La syntaxe de python est très simple. Les blocs de code sont délimités par l'indentation. Il n'y a pas de caractères spéciaux pour délimiter les blocs de code (comme les accolades en C, par exemple). Copier a = 5 b = 3 if a > b: print("a est plus grand que b") else: print("a est plus petit que b") [SuivantSéance 1chevron-right](https://cours.davidannebicque.fr/passerelle/seance-1) Mis à jour il y a 1 an --- # Objectifs | Accessibilité (S1) | MMI Nouméa L'objectif de ce module est de vous sensibiliser aux bonnes pratiques du web et de l'écriture du HTML afin d'améliorer l'accessibilité de vos pages Web. Nous verrons lors du CM ces notions d'accessibilité et ce que cela implique dans l'ensemble de vos productions. L'accessibilité ne se limite pas aux pages web, mais à tous les contenus que vous produirez (vidéos, images, textes, sites, ...). Le module se décompose comme suit : * Séance 1 (TD) : Concepts théorique et Tableaux * Séance 2 (TD) : Les formulaires * Séance 3 (TP) : Auditer un site pour l'accessibilité et l'éco-conception [NextIntroductionchevron-right](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction) Last updated 2 years ago --- # Semestre 3 | Portfolio ### [hashtag](https://cours.davidannebicque.fr/portfolio/semestre-3#cm1) CM1 file-download 6MB [CM1\_S3.pptx](https://787828270-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWuu4m1EQjyaVJ7qOCUU9%2Fuploads%2Fz1eLLgiqtcQ89l6OnSbV%2FCM1_S3.pptx?alt=media&token=ba3a5fee-4259-46d1-a07b-fad44ea33626) downloadTélécharger[arrow-up-right-from-squareOuvrir](https://787828270-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWuu4m1EQjyaVJ7qOCUU9%2Fuploads%2Fz1eLLgiqtcQ89l6OnSbV%2FCM1_S3.pptx?alt=media&token=ba3a5fee-4259-46d1-a07b-fad44ea33626) Support du CM 1 ### [hashtag](https://cours.davidannebicque.fr/portfolio/semestre-3#td1) TD1 Questionnaire à compléter [https://forms.gle/SkUJJvCca7E2EH7v6arrow-up-right](https://forms.gle/SkUJJvCca7E2EH7v6) **Toutes les questions sont obligatoires** ### [hashtag](https://cours.davidannebicque.fr/portfolio/semestre-3#td2) TD2 Au regard de la SAE303 (Dataviz), déposez des traces (pour rappel : [https://intranet.iut-troyes.univ-reims.fr/fr/but/mmi/fiche-sae/110arrow-up-right](https://intranet.iut-troyes.univ-reims.fr/fr/but/mmi/fiche-sae/110) ). Déposez au moins 1 trace par compétence (associées à la SAE) et le texte associés. Déposez au moins deux traces hors IUT sur la/les compétences de votre choix. triangle-exclamation Dans UniFolio ([https://portfolio.iut-troyes.univ-reims.fr/arrow-up-right](https://portfolio.iut-troyes.univ-reims.fr/) ) vous devez créer un nouveau portfolio (1 par année), et le rendre public. ### [hashtag](https://cours.davidannebicque.fr/portfolio/semestre-3#td3-et-td4) **TD3 et TD4** Avec la SAE 301 terminée, compléter votre portfolio. De manière générale compléter le portfolio avec des traces faites à l'IUT (projets, SAE, ressources), et hors IUT (a minima 2 projets persos (quelques soit la/les compétences ciblées)). **Evaluation de la complétude du portfolio le 23 janvier après-midi** ### [hashtag](https://cours.davidannebicque.fr/portfolio/semestre-3#cm2) **CM2** file-download 398KB [CM2\_S3.pptx](https://787828270-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWuu4m1EQjyaVJ7qOCUU9%2Fuploads%2FWT15DYuVF6Pjxfj61dxo%2FCM2_S3.pptx?alt=media&token=f97d883a-2f76-4c97-8d98-8bda51d0c52b) downloadTélécharger[arrow-up-right-from-squareOuvrir](https://787828270-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWuu4m1EQjyaVJ7qOCUU9%2Fuploads%2FWT15DYuVF6Pjxfj61dxo%2FCM2_S3.pptx?alt=media&token=f97d883a-2f76-4c97-8d98-8bda51d0c52b) Support du CM2 [PrécédentSemestre 2chevron-left](https://cours.davidannebicque.fr/portfolio/semestre-2) [SuivantSemestre 4chevron-right](https://cours.davidannebicque.fr/portfolio/semestre-4) Mis à jour il y a 29 jours --- # 1. Les sessions | MMI Nouméa [hashtag](https://cours.davidannebicque.fr/mmi-noumea/#les-sessions-en-php) Les Sessions en PHP ---------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/#rappels-sur-les-variables-super-globale-ou-variable-globale-automatique) Rappels sur les variables "super globale", ou variable globale automatique Ces variables sont automatiquement générées par le script si cela est nécessaire. Ces variables sont accessibles partout dans le code. Vous connaissez et utilisez déjà ces variables avec les formulaires : `$_POST` et `$_GET`. Ces deux variables sont des tableaux associatifs permettant, respectivement, de récupérer des données envoyées par le client en POST ou en GET. Il existe bien d'autres variables de ce type : * `$_SERVER` : ce sont des valeurs renvoyées par le serveur (IP, ...) * `$_SESSION` : on y retrouve les variables de session. Ce sont des variables qui restent stockées sur le serveur le temps de la présence d'un visiteur. * `$_COOKIE` : contient les valeurs des cookies enregistrés sur l'ordinateur du visiteur. Cela nous permet de stocker des informations sur l'ordinateur du visiteur pendant plusieurs mois, pour se souvenir de son nom par exemple * `$_FILES` : elle contient la liste des fichiers qui ont été envoyés via le formulaire précédent ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/#principe) Principe Les sessions constituent un moyen de conserver des variables sur toutes les pages de votre site. Jusqu'ici, nous étions parvenus à passer des variables de page en page via la méthode GET (en modifiant l'URL : page.php?variable=valeur) et via la méthode POST (à l'aide d'un formulaire). Cette solution n'est pas très pratique et assez peu sécurisée. Comment faire, par exemple, si vous souhaitez mémoriser le fait qu'un utilisateur soit connecté/identifié ? ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/#fonctionnement) Fonctionnement L'utilisation des sessions se déroule en 3 grandes étapes : * Un visiteur arrive sur votre site. On demande à créer une session pour lui. PHP génère alors un numéro unique. Ce numéro est souvent très grand et écrit en hexadécimal, par exemple : a02bbffc6198e6e0cc2715047bc3766f. * Une fois la session générée, on peut créer une infinité de variables de session pour nos besoins. Par exemple, on peut créer une variable `$_SESSION['nom']`. Le serveur conserve ces variables même lorsque la page PHP a fini d'être générée. Cela veut dire que, quelle que soit la page de votre site, les variables sont connus. * Lorsque le visiteur se déconnecte de votre site, la session est fermée et PHP "oublie" alors toutes les variables de session que vous avez créées. Le numéro de session généré, qui sert d'identifiant et est appelé "ID de session" (ou PHPSESSID). PHP transmet automatiquement cet ID de page en page en utilisant généralement un cookie stocké sur l'ordinateur du visiteur. Il est en fait diffcile de savoir précisément quand un visiteur quitte votre site. En effet, lorsqu'il ferme son navigateur ou va sur un autre site, le vôtre n'en est pas informé. Soit le visiteur clique sur un bouton "Déconnexion" (que vous aurez créé) avant de s'en aller, soit on attend quelques minutes d'inactivité pour le déconnecter automatiquement : on parle alors de timeout. Le plus souvent, le visiteur est déconnecté par un timeout. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/#definition) Définition Une session est donc un moyen de stocker des informations (variables) sur le serveur, à la différence des cookies qui sont stockés sur le poste client. Les sessions permettent de conserver des informations d'une page à l'autre. Les sessions sont uniques pour chaque utilisateur, et ne sont accessibles que par le site qui les a créées. Un cookie est généralement créé pour stocker l'identifiant unique de la session. Un des grands intérêts des sessions est qu’on va pouvoir conserver des informations pour un utilisateur lorsqu’il navigue d’une page à une autre. De plus, les informations de session ne vont cette fois-ci pas être stockées sur les ordinateurs de vos visiteurs à la différence des cookies mais plutôt côté serveur ce qui fait que les sessions vont pouvoir être beaucoup plus sûres que les cookies. La durée de vie d'une session dépend de la configuration du serveur. Par défaut, elle est de 24 minutes. Il est possible de la modifier dans le fichier de configuration php.ini. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/#creation-dune-session) Création d'une session Pour créer une session, il faut utiliser la fonction `session_start()` qui va créer un fichier de session sur le serveur. Ce fichier contient les informations de la session. Il est identifié par un identifiant unique qui est stocké dans un cookie (souvent nommé PHPSESSID). Ce cookie est envoyé au navigateur du client. Le client envoie ce cookie à chaque requête HTTP. Le serveur peut ainsi retrouver le fichier de session correspondant à l'identifiant contenu dans le cookie. Il va falloir appeler `session_start()` dans chaque page où on souhaite pouvoir accéder aux variables de session. circle-exclamation **Attention au piège** ! Il faut appeler session\_start() sur chacune de vos pages **AVANT** d'écrire le moindre code HTML (avant même la balise ). Si vous oubliez de lancer session\_start(), vous ne pourrez pas accéder aux variables superglobales $\_SESSION. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/#utilisation-des-variables-de-session) Utilisation des variables de session Une fois la session démarrée, on peut utiliser les variables de session comme des variables normales. Elles sont stockées dans le tableau `$_SESSION`. #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/#exemple) Exemple Ci-dessous un exemple complet d'utilisation de session. Première page (on pourrait imaginer un formulaire de connexion qui récupère les données.) Copy ...

Salut !
Tu es sur l'accueil de mon site (index.php ). Tu veux aller sur une autre page ?

Aller sur une autre page Remarque : On peut créer/modifier les variables de session n'importe où dans le code. La seule chose qui importe, c'est que le session\_start() soit fait au tout début de la page. Une autre page utilisant la session précédemment créée : Copy ...

Re - bonjour !

Je me souviens de toi ! Tu t'appelles !
Et tu as ans.

### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/#destruction-dune-session) Destruction d'une session Pour détruire une session, il faut utiliser la fonction `session_destroy()`. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/#cas-dutilisation-des-sessions) Cas d'utilisation des sessions Concrètement, les sessions peuvent servir dans de nombreux cas sur votre site (et pas seulement pour retenir un nom et un prénom !). Voici quelques exemples : * Imaginez un script qui demande un login et un mot de passe pour qu'un visiteur puisse se connecter (s'authentifier). On peut enregistrer ces informations dans des variables de session et se souvenir de l'identifiant du visiteur sur toutes les pages du site ! * On peut restreindre l'accès à certaines pages en fonction de l'utilisateur connecté * On peut sauvegarder un panier sur un site e-commerce * On peut se souvenir de la langue choisie pour afficher un site * ... ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/#exercice) Exercice Ecrire 3 pages php (index.php, page1.php et page2.php). * Sur la page index.php, ajoutez un formulaire avec deux champs (nom, ville), et sauvegardez ces champs dans une session (on utilisera le fichier index.php pour le traitement également). Sur cette page index.php, vous mettrez deux liens pour accéder aux deux autres pages. * Sur chacune de ces deux pages vous afficherez les informations de la session. * Ajouter un lien (et une page) pour gérer l'effacement des données de la session. [Next2\. Mise en place d'une authentificationchevron-right](https://cours.davidannebicque.fr/mmi-noumea/2.-mise-en-place-dune-authentification) Last updated 2 years ago --- # Planning | LP MIOT Séance Date Heure Objectif 1 15 mars 13h30-17h00 Découverte HTML CSS 2 3 mai 8h30 - 12h30 Découverte Bootstrap 3 23 mai 14h00 - 18h00 CV à rendre 4 24 mai 8h30 - 12h30 Découverte JavaScript & Manipulation API / JSON 5 30 mai 14h00 - 18h00 Manipulation API / JSON 6 31 mai 8h30 - 12h30 Projet 7 31 mai 14h00 - 17h00 Projet 8 1 juin 14h00 - 17h30 Projet évalué en fin de séance [NextSéance 1chevron-right](https://cours.davidannebicque.fr/lp-miot/seance-1) Last updated 3 years ago --- # Page 1 | Qui suis je ? | MMI Nouméa file-download 2MB [Qui\_suis\_je.pptx](https://4226354140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7cPQxWoXFdKtQaILD0OV%2Fuploads%2Fc7IUlzuZbItHjSlXQUbZ%2FQui_suis_je.pptx?alt=media&token=fdf1248f-4857-462f-8808-75fa5d35ea72) downloadDownload[arrow-up-right-from-squareOpen](https://4226354140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7cPQxWoXFdKtQaILD0OV%2Fuploads%2Fc7IUlzuZbItHjSlXQUbZ%2FQui_suis_je.pptx?alt=media&token=fdf1248f-4857-462f-8808-75fa5d35ea72) ![](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2F4226354140-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F7cPQxWoXFdKtQaILD0OV%252Fuploads%252FvuflU4xdAygKRiyIGhoB%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202023-04-13%2520a%25CC%2580%252019.12.06.png%3Falt%3Dmedia%26token%3Dffcca1cb-9829-4edb-90cd-e0c11c82be82&width=768&dpr=3&quality=100&sign=80b7597f&sv=2) ![](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2F4226354140-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F7cPQxWoXFdKtQaILD0OV%252Fuploads%252F8VTvFT3IBESepZfmWOTg%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202023-04-13%2520a%25CC%2580%252019.11.53.png%3Falt%3Dmedia%26token%3De5fdabae-b0f5-48f8-9428-a848db4f6f36&width=768&dpr=3&quality=100&sign=77929c1&sv=2) Last updated 2 years ago --- # Référentiel de compétences | Portfolio file-pdf 1MB [MMI\_BU\_1.PDF](https://787828270-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWuu4m1EQjyaVJ7qOCUU9%2Fuploads%2FBSPgzrVP7puJ0bT4vMMx%2FMMI_BU_1.PDF?alt=media&token=30ef2866-e6dc-4fc7-b33b-d7dfc20d0e10) PDF downloadTélécharger[arrow-up-right-from-squareOuvrir](https://787828270-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWuu4m1EQjyaVJ7qOCUU9%2Fuploads%2FBSPgzrVP7puJ0bT4vMMx%2FMMI_BU_1.PDF?alt=media&token=30ef2866-e6dc-4fc7-b33b-d7dfc20d0e10) Parcours Stratégie de Communication numérique et design d'expériences file-pdf 1MB [MMI\_BU\_2.PDF](https://787828270-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWuu4m1EQjyaVJ7qOCUU9%2Fuploads%2FQs02bMLkY7DiqPFXo2gc%2FMMI_BU_2.PDF?alt=media&token=9ac48110-ef0e-43dc-9dc0-a194e8ed81b6) PDF downloadTélécharger[arrow-up-right-from-squareOuvrir](https://787828270-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWuu4m1EQjyaVJ7qOCUU9%2Fuploads%2FQs02bMLkY7DiqPFXo2gc%2FMMI_BU_2.PDF?alt=media&token=9ac48110-ef0e-43dc-9dc0-a194e8ed81b6) Parcours Développement Web et Dispositifs Interactifs file-pdf 1MB [MMI\_BU\_3.PDF](https://787828270-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWuu4m1EQjyaVJ7qOCUU9%2Fuploads%2F0csfqGY2FHJ7cJYe5Y5p%2FMMI_BU_3.PDF?alt=media&token=45efaedb-78fa-4fff-94ba-c417b43bc437) PDF downloadTélécharger[arrow-up-right-from-squareOuvrir](https://787828270-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWuu4m1EQjyaVJ7qOCUU9%2Fuploads%2F0csfqGY2FHJ7cJYe5Y5p%2FMMI_BU_3.PDF?alt=media&token=45efaedb-78fa-4fff-94ba-c417b43bc437) Parcours Création Numérique [PrécédentSemestre 6 - Parcours en Alternancechevron-left](https://cours.davidannebicque.fr/portfolio/semestre-6-parcours-en-alternance) [SuivantProgramme Nationalchevron-right](https://cours.davidannebicque.fr/portfolio/programme-national) Mis à jour il y a 2 ans --- # Présentation du module | Accessibilité numérique Module divisé en deux partie. Une première sur le référencement et l'optimisation (réalisée par Olivier Chérain), et une seconde **sur l'accessibilité web, le respect des normes (WCAG, RGAA...) et un peu de sobriété numérique.** [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique#objectifs-du-module) Objectifs du module ---------------------------------------------------------------------------------------------------------------- * Comprendre les normes d'accessibilités. * Analyser l'accessibilité de son site. * Améliorer l'accessibilité et la validation du code * Introduction à la sobriété numérique [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique#organisation) Organisation -------------------------------------------------------------------------------------------------- 4 TD et 4TP. 2 Notes. Une écrite sur la dernière séance, et l'évaluation de votre site promo dans le cadre du projet S4. [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique#planning) **Planning** ---------------------------------------------------------------------------------------------- **Date** Groupe Thème 08/02/2021 TD Cours introductif 15/02/2021 TD Analyse de votre site 22/02/2021 TD Améliorer l'accessibilité 08/03/2021 TP 22/03/2021 TP Accessibilité du site promo du jeu 29/03/2021 TP 07/04/2021 TP 13/04/2021 TP Evaluation [NextSéance 1chevron-right](https://cours.davidannebicque.fr/accessibilite-numerique/seance-1) Last updated 5 years ago Was this helpful? --- # Introduction | BUT INFO / C# / Embarqué [hashtag](https://cours.davidannebicque.fr/but-info/#qui-suis-je) Qui suis-je ? ------------------------------------------------------------------------------------ * Maître de Conférences en Automatique et Informatique Industriel. * Activité de recherche au CReSTIC (commande sûre, e-santé) * Ex Chef du département MMI (Métiers du Multimédia et de l'Internet) de l'IUT de Troyes * Directeur Adjoint de l'IUT de Troyes * Développeur passionné depuis plus de 25 ans ... * Technologies .Net, Développement Web * Adepte du C#, de Symfony (PHP), VueJS (HTML/JS) * Membre de l'Afup | Traducteur de la documentation officielle PHP circle-info Me contacter : @DavidAnnebicque | davidannebicque.fr | david.annebicque\[at\]univ-reims.fr [hashtag](https://cours.davidannebicque.fr/but-info/#objectifs) Objectifs ------------------------------------------------------------------------------ Piloter et superviser une maison domotisée à l'aide de C#, en simulant le comportement d'un Automate Programmable Industriel (API) [hashtag](https://cours.davidannebicque.fr/but-info/#organisation) Organisation ------------------------------------------------------------------------------------ * 5 séances de 2 heures * Un projet noté en fin de dernière séance. [hashtag](https://cours.davidannebicque.fr/but-info/#progression-envisagee) Progression envisagée ------------------------------------------------------------------------------------------------------ * Découverte de la dll et pilotage de HomeIO depuis C# * Premier exemple de pilotage de HomeIO (piloter une lumière) * Mise en place de commandes pour les scénarios (pilotage de la porte de garage et du portail) * Finalisation des scénarios * Supervision de la maison * Finalisation du projet et évaluation [NextDLL HomeIOchevron-right](https://cours.davidannebicque.fr/but-info/untitled) Last updated 11 months ago Was this helpful? --- # Introduction | SAE 303 - Dataviz Les données sont de plus en plus présentes dans le monde de l’entreprise ou des services. Elles permettent d’enrichir une information, mais servent aussi d’outil de communication. A partir de jeux de données, cette SAE mobilise les ressources liées à l’analyse de données, à la production graphique, à l’intégration et au développement front et amène les étudiants à : * Analyser des données pour en extraire des indicateurs ou les informations pertinentes ; * Proposer un site web permettant la visualisation de ces données * Compléter ce site web par la production d'une application interactive permettant une navigation au sein des données. Les étudiants réalisent les contenus et les présentent au commanditaire en répondant à la question : comment concevoir des visualisations de données apportant une information pertinente et appuyant une communication ? [SuivantChoix du sujetchevron-right](https://cours.davidannebicque.fr/sae-303-dataviz/choix-du-sujet) Mis à jour il y a 2 ans --- # Présentation | Vue.js LP [hashtag](https://cours.davidannebicque.fr/vue.js/#quels-sont-les-problemes-du-developpement-front-classique) Quels sont les problèmes du développement front "classique" ? -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * Chaque page web HTML est codée intégralement, et peu réutilisable pour d'autres pages (hors include en php). * Une page web est relativement figée (sans javascript), et ne permet pas une interaction "temps réel" (un champ complété alimente une zone directement). * Le manque de découpage de la page ne permet pas de réutiliser tout ou partie de la page sur une autre page [hashtag](https://cours.davidannebicque.fr/vue.js/#quest-ce-que-vue.js) Qu'est ce que Vue.js ? --------------------------------------------------------------------------------------------------- > Vue.js (aussi appelé plus simplement Vue), est un [framework JavaScriptarrow-up-right](https://fr.wikipedia.org/wiki/Framework_JavaScript) > [open-sourcearrow-up-right](https://fr.wikipedia.org/wiki/Open_source) > utilisé pour construire des interfaces utilisateur et des [applications web monopagesarrow-up-right](https://fr.wikipedia.org/wiki/Application_web_monopage) > . Vue a été créé par Evan You et est maintenu par lui et le reste des membres actifs de l'équipe principale travaillant sur le projet et son écosystème. [![Logo](https://cours.davidannebicque.fr/vue.js/~gitbook/image?url=https%3A%2F%2Fvuejs.org%2Flogo.svg&width=20&dpr=3&quality=100&sign=66d1088&sv=2)Vue.jsvuejschevron-right](https://vuejs.org/) La documentation officielle Vue.js apporte la notion de composant (qui n'est pas nouvelle en soit, HTML intégre déjà la notion de composant), et permet un "binding" complet entre les éléments (mise à jour réciproque des éléments). Vue.js apporte une structuration forte du développement front, une réutilisabilité importante avec la notion de composant et améliore l'interactivité de l'application et l'expérience des utilisateurs. Vue.js nécessite un environnement NodeJs pour fonctionner. Le code écrit n'est pas directement exploitable par les navigateurs et implique un mécanisme de "traduction". Un automatisateur de tâche est indispensable, tel que webpack ou, ViteJs qui est recommandé avec la version 3 de Vue.js. Vue.js implique également une bonne connaissance de la syntaxe JavaScript et en particulier les versions ECMAScript 6 (ES6) et suivantes. [hashtag](https://cours.davidannebicque.fr/vue.js/#quelles-sont-les-alternatives-a-vue.js) Quelles sont les alternatives à Vue.js -------------------------------------------------------------------------------------------------------------------------------------- Les "concurrents" directs de Vue.js sont : * AngularJs (dont le développeur de Vue.js est issu), précurseur sur l'approche par composant, fondé par Google. * ReactJs, développé par Facebook Lire par exemple : [![Logo](https://cours.davidannebicque.fr/vue.js/~gitbook/image?url=https%3A%2F%2Fkinsta.com%2Ffr%2Fwp-content%2Fuploads%2Fsites%2F4%2F2023%2F12%2Fcropped-kinsta-favicon-192x192.png&width=20&dpr=3&quality=100&sign=111105a2&sv=2)Vue vs React : Lequel devriez-vous utiliser ?Kinsta®chevron-right](https://kinsta.com/fr/blog/vue-vs-react/) [![Logo](https://cours.davidannebicque.fr/vue.js/~gitbook/image?url=https%3A%2F%2Fpagepro.co%2Fblog%2Fwp-content%2Fuploads%2F2018%2F09%2Fcropped-favicon-fe740bed81-1-192x192.png&width=20&dpr=3&quality=100&sign=b164ef45&sv=2)React vs Vue: Which Frontend Framework to Choose in 2026?Pageprochevron-right](https://pagepro.co/blog/react-vs-vue-comparison/) [SuivantSéance 1 : Concepts et installationchevron-right](https://cours.davidannebicque.fr/vue.js/seance-1-concepts-et-installation) Mis à jour il y a 3 ans --- # Séance 1 | Développement Front (S3) | MMI Nouméa [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/#tunnel-de-commande-interactif) Tunnel de commande "interactif" ------------------------------------------------------------------------------------------------------------------------------------------------- Dans ces 8 séances, nous allons reflechir et concevoir un tunnel de commande, de la page des produits jusqu'à la page de paiement. Nous allons utiliser les technologies suivantes: * HTML * CSS (avec bootstrap) * Javascript (sans jQuery) ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/#organisation-des-seances) Organisation des séances * Séance 1 : Présentation du projet et reflexion sur les éléments nécessaires dans les différentes pages (catalogue, panier, paiement). Croquis, et début de l'intégration * Séance 2 : Mise en place de la page panier avec des données provenant d'un tableau javascript * Séance 3 : Mise en place des boutons permettant de gérer le panier (+, -, supprimer, ...) * Séance 4 : Mise en place du catalogue de produits avec ajouter au panier, indication du nombre de produits dans le panier, ... * Séance 5 : Finalisation de la page panier et articles/catalogue. Ergonomie, accessibilité, bootstrap, ... * Séance 6 : Mise en place de la page de paiement et des données utilisateurs avec validation des données en javascript * Séance 7 : Mise en place de la page de confirmation de commande et soumission des données au serveur * Séance 8 : Finalisation [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/#rendu) Rendu ----------------------------------------------------------------------------------------------- Le résultat de ce projet sera à rendre à l'issue des séances, et fera l'objet d'une note. La notaiton prendra en compte les points suivants : * Fonctionnalités intégrées * Mise en page et ergonomie (UX) de la proposition * Respect des critères d'accessibilités [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/#travail-de-la-seance) Travail de la séance ----------------------------------------------------------------------------------------------------------------------------- En vous basant sur votre expérience en tant que client, sur les articles ci-dessous, proposez des gabarits pour les 3 pages suivantes : * Page catalogue permettant l'ajout d'un produit au panier * Page panier * Page(s) de validation de la commande (données clients, paiement, ...) * Vous pouvez imaginer un processus en une seule page avec des étapes ou en plusieurs pages. Dans tous les cas, il est important d'indiquer où se situe le client dans le processus. Pour chacune des pages identifiez les éléments obligatoires (cf. articles ci-dessous) et les éléments nécessaires pour favoriser l'expérience client. [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/#quelques-ressources) Quelques ressources --------------------------------------------------------------------------------------------------------------------------- [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fcdn.shopify.com%2Fb%2Fshopify-brochure2-assets%2Fb13486e5693b246af63c66ab047a6b6b.png&width=20&dpr=3&quality=100&sign=ea0a5b32&sv=2)Panier d’achat e-commerce : définition, options et comment choisir - Shopify FranceShopifychevron-right](https://www.shopify.com/fr/blog/panier-achat) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.codeur.com%2Fblog%2Fwp-content%2Fuploads%2F2022%2F05%2Fcropped-logo-codeur-favicon-270x270.png&width=20&dpr=3&quality=100&sign=dd71909e&sv=2)10 paniers e-commerce dont vous devriez vous inspirerCodeur.comchevron-right](https://www.codeur.com/blog/panier-e-commerce-reussi/) ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/#abandon-de-panier) Abandon de panier... [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fcorp-backend.brevo.com%2Fwp-content%2Fuploads%2F2025%2F07%2FBrevo_logo.svg&width=20&dpr=3&quality=100&sign=a3ac947&sv=2)7 conseils pour réduire l’abandon de panierfr.sendinblue.comchevron-right](https://fr.sendinblue.com/blog/7-conseils-pour-reduire-labandon-de-panier/) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Ff.hellowork.com%2Fblogdumoderateur%2F2022%2F01%2Fcropped-favicon-bdm-1-192x192.png&width=20&dpr=3&quality=100&sign=99b1643d&sv=2)E-commerce : 12 conseils pour réduire les abandons de panierBDMchevron-right](https://www.blogdumoderateur.com/e-commerce-conseils-reduire-abandons-panier/) ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/#la-reglementation-francaise) La réglementation française [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.service-public.gouv.fr%2Fresources%2Fv-f3de1987cb%2Fassets%2Fdsfr-1.14%2Fdist%2Ffavicon%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=50e80eb3&sv=2)Faire du commerce en ligne (e-commerce) : règles à respecterservicepublicfrchevron-right](https://entreprendre.service-public.fr/vosdroits/F23455) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fastatic.ccmbg.com%2Fccmcms_journaldunet%2Fdist%2Fpublic%2Fpublic-assets%2Fimg%2Ficons%2Fapple-touch-icon.png%3F2&width=20&dpr=3&quality=100&sign=c461be59&sv=2)E-commerce & loi Hamon : comment mettre aux normes son tunnel de commandeJDNchevron-right](https://www.journaldunet.com/ebusiness/commerce/1137770-e-commerce-loi-hamon-comment-mettre-aux-normes-son-tunnel-de-commande/) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.assistant-juridique.fr%2Ffavicon.ico&width=20&dpr=3&quality=100&sign=bea87fad&sv=2)Mentions obligatoires d'un site de ecommerce : la liste complète | Assistant-juridique.frwww.assistant-juridique.frchevron-right](https://www.assistant-juridique.fr/mentions_obligatoires_ecommerce.jsp) [NextSéance 2chevron-right](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-2) Last updated 2 years ago --- # Séance 1 : Concepts et installation | Vue.js BUT [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#preambule) Préambule ---------------------------------------------------------------------------------------------------------------------- circle-info Ce cours se base sur la version 3 de Vue.js. Attention vous trouverez beaucoup d'exemple en Vue.js 2 sur les forums et sites d'aide. La documentation officielle se trouve ici sur le lien suivant [![Logo](https://cours.davidannebicque.fr/vue.js-but/~gitbook/image?url=https%3A%2F%2Fvuejs.org%2Flogo.svg&width=20&dpr=3&quality=100&sign=66d1088&sv=2)Vue.jsvuejschevron-right](https://vuejs.org/) Site officiel de Vue.js 3 [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#presentation-des-concepts-de-vue.js) Présentation des concepts de Vue.js -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#installation-et-demarrage-dune-nouveau-projet) Installation et démarrage d'une nouveau projet. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Assurez vous de disposer de nodeJs et de npm fonctionnels, testez avec la commande ci-dessous `npm --version` Pour créer un nouveau projet, tapez la commande suivante : circle-info Lors de la première execution, la commande va vous proposer d'installer create-vue. Confirmez la proposition Répondez aux différentes questions. Par défaut mettez toutes les questions sur non, sauf "**Add Vue Router for single Page Application development**" que vous pouvez mettre sur **yes.** Executez les commandes suivantes : La première commande accède au répertoire, la deuxième installe toute les dépendances (comme `composer install` avec PHP/Syfmony), la dernière lance le serveur qui va s'occuper de compiler les fichiers et rendre l'application "Vue.js" utilisable dans tous les navigateurs. Vous devriez voir un message vous proposant l'url de votre projet "compilé". Ouvrez-là et vous devriez avoir une page similaire à celle ci-dessous : ![](https://cours.davidannebicque.fr/vue.js-but/~gitbook/image?url=https%3A%2F%2F2116147527-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FJUrC3uO2h6i1ZjXvVxeD%252Fuploads%252Fgit-blob-66fee09586860caf7098a582fbc8a61102ef3991%252FCapture%2520d%25E2%2580%2599%25C3%25A9cran%25202023-02-05%2520%25C3%25A0%252018.35.51.png%3Falt%3Dmedia&width=768&dpr=3&quality=100&sign=2ac70036&sv=2) Page d'accueil suite à la première installation d'un projet Vue.js [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#premier-exemple) Premier exemple ---------------------------------------------------------------------------------------------------------------------------------- [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#premieres-manipulations) Premières manipulations. --------------------------------------------------------------------------------------------------------------------------------------------------- Dans le composant App.vue qui est créé par défaut, et qui est le point d'entrée de votre application, nous allons faire les premiers tests. Nous allons définir une liste de 3 éléments, par exemple : Si on souhaite rendre cette liste "dynamique", on peut définir des variables pour les notes. La syntaxe est identique à Twig pour les variables... Si vous testez de nouveau ce code, vous aurez une erreur car les variables n'existent pas. Nous devons les définir. Pour cela, dans la partie javascript de notre fichier App.vue, nous allons définir une "entrée" data, qui va contenir nos valeurs. La déclaration pourrait être (en vue2 ou vue3 "classique": circle-exclamation Nous utiliserons la notation qui est préconisée avec la version 3 de Vue.js le "mode Composition API" ([https://vuejs.org/guide/extras/composition-api-faq.htmlarrow-up-right](https://vuejs.org/guide/extras/composition-api-faq.html) ) Notre code dans la partie script se résume donc à : [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#reprenons-depuis-le-debut) Reprenons depuis le début ------------------------------------------------------------------------------------------------------------------------------------------------------ ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#analysons-notre-repertoire-de-projet) Analysons notre répertoire de projet * **node\_module** : contient toutes les dépendances de notre projet. Il est créé par la commande `npm install`. Il ne faut rien modifier dans ce dossier, et ne jamais le gérer avec git. Son équivalent dans Symfony est vendor. * **public** : c'est le repertoire "public", qui contient les éléments type images, favicon, les fichiers uploadés par vos utilisateurs, ... Il a le même rôle que "public" dans symfony. * **src** : c'est notre répertoire de travail, la très grande majorité de notre code se trouvera dans ce dossier. * **index.html** : c'est le fichier html de base qui est affiché dans le navigateur et qui va intégrer nos composants Vue.js. Sa syntaxe est décrite par la suite. * **package.json** (et son package-lock.json), sont la liste des dépendants installées, c'est l'équivalent du composer.json pour le back. * **vite.config.js** : c'est l'automatisateur de tâches (comme gulp ou webpack, Vue.js 3 recommande l'usage de [Vitearrow-up-right](https://vitejs.dev/) qui est plus rapide et performant). Nous reviendrons sur ce fichier en BUT3. Il récupère tous les éléments du dossier src/, va les traduires en du JavaScript compréhensible par les navigateurs et en faire un seul et unique point d'entrée. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#detail-du-fichier-index.html) Détail du fichier index.html * ligne 10 : ce élément, avec un id "app" est l'élément qui va pouvoir recevoir notre code, nous le verrons avec le fichier main.js. Vous pourriez avoir plusieurs balises recevant plusieurs parties Vue.js. Vous pourriez aussi avoir un habillage HTML défini dans cette page et un "morceau" géré par Vue.js. * ligne 11 : C'est l'intégration du fichier main.js qui va contenir tout notre code JavaScript et les composants Vue.js. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#details-du-repertoire-src) Détails du repertoire src/ * **assets** : votre CSS/SCSS ... global à votre projet. Les logos et images du site. * **components** : nos composants Vue.js, des parties d'une page, qui seront assemblés pour faire votre page globale. * **router** : contiendra nos routes de notre site, le lien entre l'URL, les pages Vue.js. * **views** : les pages "Vue.js", qui assemblent les composants. * **App.vue** : notre composant principal, décrit par la suite * **main.js** : le fichier utilisé par ViteJs pour faire le lien entre les fichiers Vue.js, et la page index.html. Cette structure est la base, vous pouvez l'organiser autrement, et ajouter toute la décomposition nécessaire. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#detail-du-fichier-app.vue) Détail du fichier App.vue Ce fichier est construit selon la structure "classique" de Vue.js, décrite dans la partie suivante. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#structure-dun-fichier-vue.js-.vue) Structure d'un fichier Vue.js (.vue) Si on utilise vue en mode "composant" ([https://fr.vuejs.org/guide/scaling-up/sfc.html#introductionarrow-up-right](https://fr.vuejs.org/guide/scaling-up/sfc.html#introduction) ) (c'est à dire avec des fichiers .vue ou SFC (_single file component_)) et en mode Composition API, un fichier .vue à les éléments suivants : * template : qui contient le code HTML de votre composant (une partie de votre page). Ce code peut exploiter lui même d'autres composants Vue.js. La balise template doit contenir un seul enfant dans le dom. * script : qui va contenir votre code JavaScript : les variables, les méthodes, les différents imports... * style : optionnel, pour contenir le CSS propre au composant. circle-info **Pourquoi les composants monofichiers (SFC)**[**#**arrow-up-right](https://fr.vuejs.org/guide/scaling-up/sfc.html#why-sfc) Si les SFC nécessitent une étape de compilation, les avantages sont nombreux en contrepartie : * Créer des composants modulaires en utilisant une syntaxe HTML, CSS et JavaScript familière. * [Collocation de responsabilités coupléesarrow-up-right](https://fr.vuejs.org/guide/scaling-up/sfc.html#qu-en-est-il-de-la-separation-des-responsabilites) * Templates précompilés sans coût de compilation au runtime * [CSS à portée limitée au composantarrow-up-right](https://fr.vuejs.org/api/sfc-css-features.html) * [Syntaxe plus confortable avec l'API de Compositionarrow-up-right](https://fr.vuejs.org/api/sfc-script-setup.html) * Meilleures optimisations à la compilation grâce à l'analyse croisée du template et des scripts. * [Support des environnements de développementarrow-up-right](https://fr.vuejs.org/guide/scaling-up/tooling.html#ide-support) avec autocomplétion et vérification des types pour les expressions dans le template. * Prise en charge nativement du remplacement de modules à chaud (HMR). SFC est une caractéristique déterminante de Vue en tant que framework, et c'est l'approche recommandée pour utiliser Vue dans les scénarios suivants : * Applications à page unique (SPA) * Génération de sites statiques (SSG) * Tout front-end non trivial pour lequel une étape de construction peut être justifiée pour une meilleure expérience de développement (DX). #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#detail-du-fichier-main.js) Détail du fichier main.js C'est le fichier clé de votre application, l'équivalent du index.php de Symfony, car c'est lui qui contrôle tout ce qui va se passer, c'est le point d'entrée. c'est dans ce fichier que l'on peut instancier des dépendances globalements (comme router ici) * **Ligne 1** : Import de Vue.js, et du composant createApp pour construire l'application (utilisé ligne 7) * **Ligne 2** : On importe notre composant Vue.js App.Vue pour pouvoir l'exploiter dans notre fichier, et ici l'injecter dans la page ligne 7 * **Ligne 3** : le router pour gérer nos routes. On l'associe à notre application (ligne 9) * **Ligne 5** : on importe notre CSS (ou autre), pour l'appliquer globalement au projet. Si c'est du Scss/Sass, ViteJs se chargera de le compiler en CSS. * **Ligne 7** : on instancie notre application Vue.js avec le composant App (importé ligne 2) * **Ligne 9** : on associe à notre application "app", le router, ce qui nous permettra de l'utiliser partout. * **Ligne 11** : Cette ligne vient "injecter" notre application vue, dans la page html (index.html), et très exaxctement dans la balise avec l'id "app" ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#templates) Templates #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#dans-du-code-html) Dans du code HTML Vue utilise une syntaxe de template basée sur HTML pour permettre de lier de manière déclarative le DOM rendu aux données de l'instance du composant sous-jacent. Tous les templates Vue sont du HTML syntaxiquement valide qui peut être analysé par des navigateurs et des analyseurs HTML conformes aux spécifications. A titre de comparaison ReactJs utilise du JSX pour décrire la partie HTML. La forme la plus élémentaire de liaison de données est l'interpolation de texte à l'aide de la syntaxe "Moustache" (doubles accolades) : Dans cet exemple `msg` est une variable dont le contenu doit être défini dans votre code Vue.js. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#dans-des-attributs-ou-des-balises) Dans des attributs ou des balises Si vous souhaitez passer une variable dans une balise HTML (ou un composant Vue.js), ou dans un attribut, vous ne pouvez pas utiliser la syntaxe "moustache" avec les accolades. Vous devez passer par l'instruction `v-bind`, exemple : Dans cet exemple `idDynamique` est donc la variable qui alimentera l'attribut **id** de la balise `div.` Il existe une syntaxe "courte" qui peut s'écrire sans le `v-bind` comme ci-dessous : #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#passer-plusieurs-attributs) Passer plusieurs attributs Si vous avez un objet JavaScript représentant plusieurs attributs qui ressemble à ceci : Vous pouvez les lier à un seul élément en utilisant `v-bind` sans argument : Cette syntaxe va faire apparaître les deux attributs id et class dans votre objet. Le `v-bind` est ici obligatoire, il n'y a pas de syntaxe courte. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#manipulation-des-variables) Manipulation des variables Les variables entre accolades peuvent être manipulées comme toutes les variables, comme dans les exemples ci-dessous. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#concatener-des-variables-et-du-texte) Concaténer des variables et du texte Si vous souhaitez construire un mot contenant du texte et une variable, vous pouvez utiliser la syntaxe ci-dessous : `${id}` est la variable `id` dans la notation particulière dans le contexte d'une concaténation avec du texte et avec l'usage des \`\` ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#manipuler-les-variables-du-cote-javascript) Manipuler les variables du côté javascript Coté JavaScript, la déclaration des variables se fait de manière conventionnelle avec des constants, ou des variables (let), des variables simples (textes, nombres, float, ...) ou des tableaux, des objets json. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#exercices) Exercices ---------------------------------------------------------------------------------------------------------------------- * Installation de Vue.js * Modifiez le composant App.vue pour ajouter des variables : un titre et un paragraphe de texte * Créer un deuxième composant. Comment l'ajouteriez vous dans le composant App.vue ? * Ajoutez 3 variables (note1, note2 et note3) et affichez ces 3 notes et la moyenne. * Ajoutez une variable de type tableau contenant une liste de mot. Affichez cette liste. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#proprietes-calculees-computed) Propriétés calculées (computed) ---------------------------------------------------------------------------------------------------------------------------------------------------------------- Le calcul de la moyenne de l'exercice précédent est pratique, mais si on souhaite l'utiliser à plusieurs endroits il faudra refaire le calcul. Par ailleurs, on pourrait exploiter une boucle en JavaScript, ou manipuler des variables qui se composent elles mêmes de plusieurs autres variables. Tout cela est possible avec Vue.js, en utilisant des **propriétés calculées**, dites `computed`. La syntaxe d'une propriété calculée est la suivante (dans la partie script) : Une propriété calculée est une constante, avec un nom, l'instruction `computed`, puis une fonction anonyme en JavaScript. Pour fonctionner ce code nécessite d'importer l'instruction computed qui est native dans Vue.js avec la ligne ci-dessous : Le code complet serait donc : L'utilisation dans la partie template se fait en considérant moyenne comme une variable classique. On peut donc l'utiliser pour un affichage avec `{{ moyenne }}` ou dans des tests ou boucles, ou d'autres opérations. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#reactivite) Réactivité ------------------------------------------------------------------------------------------------------------------------ circle-info Cela ne concerne que l'approche par "composition" de Vue.js 3. La source de cette partie est la traduction de la documentation ici : [https://vuejs.org/guide/essentials/reactivity-fundamentals.htmlarrow-up-right](https://vuejs.org/guide/essentials/reactivity-fundamentals.html) La réactivité est l'une des fonctionnalités les plus puissantes de Vue.js. Elle permet de déclarer des dépendances entre les données de l'application et les éléments du DOM, et de mettre à jour automatiquement le DOM lorsque les données changent. Exemple, nous souhaitons avoir une partie de notre page qui s'affiche ou se masque en fonction d'une variable. Nous pourrions écrire le code suivant : Dans cet exemple, nous utilisons la directive `v-if` pour afficher ou masquer un élément en fonction de la valeur de `isVisible`. Lorsque le bouton est cliqué, la valeur de `isVisible` est inversée, ce qui entraîne la mise à jour de l'élément du DOM. [PreviousPrésentationchevron-left](https://cours.davidannebicque.fr/vue.js-but) [NextSéance 2 : Boucles et testschevron-right](https://cours.davidannebicque.fr/vue.js-but/but2/seance-2-boucles-et-tests) Last updated 1 year ago * [Préambule](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#preambule) * [Présentation des concepts de Vue.js](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#presentation-des-concepts-de-vue.js) * [Installation et démarrage d'une nouveau projet.](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#installation-et-demarrage-dune-nouveau-projet) * [Premier exemple](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#premier-exemple) * [Premières manipulations.](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#premieres-manipulations) * [Reprenons depuis le début](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#reprenons-depuis-le-debut) * [Analysons notre répertoire de projet](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#analysons-notre-repertoire-de-projet) * [Templates](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#templates) * [Manipuler les variables du côté javascript](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#manipuler-les-variables-du-cote-javascript) * [Exercices](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#exercices) * [Propriétés calculées (computed)](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#proprietes-calculees-computed) * [Réactivité](https://cours.davidannebicque.fr/vue.js-but/but2/seance-1-concepts-et-installation#reactivite) Copy npm init vue@latest Copy cd vue-lp npm install npm run dev Copy Copy Copy Copy index.html Copy Vite App
Copy Copy import { createApp } from 'vue' import App from './App.vue' import router from './router' import './assets/main.css' const app = createApp(App) app.use(router) app.mount('#app') Copy Message : {{ msg }} Copy
Copy
Copy const objectOfAttrs = { id: 'conteneur', class: 'wrapper' } Copy
Copy {{ nombre + 1 }} {{ ok ? 'OUI' : 'NON' }} {{ message.split('').reverse().join('') }} Copy
Copy Copy const somme = computed(() => { return note1 + note2 + note3 }) Copy import { computed } from 'vue' Copy Copy --- # Séance 6 : Routes et API | Vue.js BUT Sur cette séance nous allons réexploiter les éléments vus précédement pour mettre en place un lien sur chaque pays pour arriver sur une fiche détaillée. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-6-routes-et-api#objectifs) Objectifs ----------------------------------------------------------------------------------------------------------- * Créer une route qui prend en paramètre un pays * Ajouter un lien sur chaque pays * Modifier la vue FIchePays.vue pour afficher les informations du pays en fonction du paramètre passé dans l'URL * Mettre un minimum en forme les données du pays (image du drapeau), nom du pays, langues parlées, monnaie, capitale, superficie, etc. Résultat attendu [PreviousSéance 4-5 : Composants et APIchevron-left](https://cours.davidannebicque.fr/vue.js-but/but2/seance-4-5-composants-et-api) [NextSéance 7 : Evénements et Formulaireschevron-right](https://cours.davidannebicque.fr/vue.js-but/but2/seance-7-evenements-et-formulaires) Last updated 1 year ago --- # FAQ | Programmation Orientée Objet en PHP (B.U.T.) circle-info Cette partie évoluera en fonction de vos questions récurrentes, et des problèmes rencontrés [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/faq#utiliser-limage-docker-mmi) Utiliser l'image Docker MMI ----------------------------------------------------------------------------------------------------------------------------------------------- Patrice Gommery a créé une image Docker avec Apache2, Mariadb, PHP8.1 pour les MMI. Il faut installer docker sur votre système et démarré Docker. Ensuite : 1. Créer un dossier www pour la persistance des données (c'est à dire qu'elles ne soient pas effacées dès que vous arrêté docker). Vous pouvez créer le dossier ou vous voulez (mais évitez le bureau !) 2. Dans ce dossier www, créez un sous-dossier html et dans celui-ci une page index.php avec le contenu (au final on doit avoir : `???/www/html/index.php`) **Ces deux étapes ne sont à faire que la première fois que l'on crée le container.** Le dossier /var/www/html contiendra ensuite toutes les pages et l'arborescence que vous voulez exploiter en cours. Les fichiers ne seront pas effacés lors de l'arrêt du container. 1. On crée le container : (Exemple sous Windows, seul le chemin du dossier sera différent sur un mac ou sous linux) `docker run -dti --name lampbut1 -v C:\Users\VotreUser\BUT1\www:/var/www -v datalampbut1:/var/lib/mysql -p 8080:80 mmi3docker/lampbut1` Quelques explications : * Docker run crée le container (et le démarre) * \-dti (pour que le container soit exécuter en arrière-plan et accessible par un terminal interactif, et aussi pour qu'il ne s'arrête pas tout seul) * \--name lampbut1 (lampbut1 sera le nom du container, vous pouvez l'appeler comme vous voulez) * \-v C:\\Users\\VotreUser\\BUT1\\www :/var/www ( Création d'un volume pour la persistance des données après l'arrêt du container . * C:\\Users\\VotreUser\\BUT1\\www est votre dossier local, donc à adapter selon votre configuration * /var/www est le dossier du container dans lequel apache (et d'autres services stockent les données). Pour être plus précis apache stocke par défaut dans /var/www/html, mais j'ai laissé /var/www pour pouvoir créer d'autres dossiers en hébergement, donc ne changer pas, laissez /var/www) * \-v datalampbut1:/var/lib/mysql (Création d'un volume persistant pour les données de mysql. là pas besoin de chemin en local, Docker va créer lui-même le volume en local et le nommera datalampbut1. Vous pouvez le nommer autrement si vous voulez , mais ne changer pas /var/lib/mysql ça c'est le dossier de stockage des bases sur le container) * \-p 8080:80 (Redirection du port 80 du container sur le port 8080 en local, vous pouvez bien sur mettre autre chose que 8080 si vous voulez) * mmi3docker/lampbut1 est le nom du depot Docker sur lequel j'ai stocké l'image (et qui sera donc recopier sur votre poste lors de la première création d container) 1. Comme tous les services sont dans le même container (ce qui n'est pas forcément une bonne pratique, mais pour commencer en S1 c'est très bien et plus facile), il faut lancer les services manuellement sur le container. Rien de compliqué, saisissez simplement la commande : docker exec lampbut1 /root/bootmmi.sh (ou lampbut1 est le nom que vous avez donné au container) Voilà c'est tout. Votre container est créé et lancé. Pour vérifier, ouvrez un navigateur avec l'URL : localhost:8080 (ou le port que vous avez mis au démarrage) Si vous avez fait correctement les étapes 1 et 2, vous devriez afficher la configuration de php 8.1 active sur le serveur web. Si vous voulez créer d'autres pages et les tester, créez-les dans votre dossier www/html c'est aussi simple que ça. Pour voir si la base de données fonctionne : localhost:8080/adminer (le login est adminer, le mot de passe : 123456) Si vous voulez manipulez les bases en lignes de commande : docker exec -ti lampbut1 mysql Si vous voulez accéder au shell: docker exec -ti lampbut1 /bin/bash (Attention si vous créez des dossiers et fichiers ailleurs que dans /var/www, rien ne sera conservé à l'arrêt du container, idem si vous installez de nouveaux paquets) Pour arrêter le container : docker stop lampbut1 Pour le relancer docker start lampbut1 (Si vous avez créé des pages ou une base de données, vous pouvez constater que tout est encore là) [PrécédentOrganisation du courschevron-left](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php) [SuivantSéance A : Introduction à la POOchevron-right](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-1) Mis à jour il y a 3 ans --- # Séance A : Introduction à la POO | Programmation Orientée Objet en PHP (B.U.T.) CM1 [Programmation Orientée Objetpresentations.davidannebicque.frchevron-right](https://presentations.davidannebicque.fr/r313.html) Support de cours [PrécédentFAQchevron-left](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/faq) [SuivantSéance B : Concepts de la POOchevron-right](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-2) Mis à jour il y a 4 mois --- # Séance E : Héritage & Encapsulation | Programmation Orientée Objet en PHP (B.U.T.) [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-5#cours) Cours -------------------------------------------------------------------------------------------------------------------- Nous avons vu dans la séance 3, le principe de l’encapsulation et dans la séance 4 le principe de l’héritage. Voyons maintenant comment combiner les deux. Principe : L’encapsulation consiste à déclarer **PRIVATE** les propriétés de la classe. Cela reste vrai qu’il y ait héritage au non. Mais dans le cas de l’héritage, les propriétés déclarées **PRIVATE** ne sont accessibles que dans la classe déclarant ces propriétés. Une classe Fille ne peut accéder aux propriétés héritées que si elles ont été déclarées en **PROTECTED**. Donc dans le cas de l'héritage on choisira de déclarer les propriétés en **PROTECTED** pour faciliter la manipulation des propriétés par les classes filles. [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-5#pour-resumer-la-visibilite-des-proprietes) Pour résumer la visibilité des propriétés -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Les visibilités suivantes existent en PHP et peuvent s'appliquer aux propriétés et aux méthodes. * **public** pourra être appelé partout, on évitera d'utiliser cette solution sur les propriétés * **private** ne pourra être appelé que dans la classe. * **protected** ne pourra être appelé que dans la classe et les classes qui en hérite. [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-5#exercice) Exercice -------------------------------------------------------------------------------------------------------------------------- La classe **Vehicule** possède les propriétés suivantes : * marque * puissance * kilometrage Les méthodes sont * Le constructeur * La méthode `parcourir($distance)` qui cumule les kilomètres parcourus par le véhicule * La méthode `lire_caracteristiques()` qui retourne les valeurs des propriétés du véhicule. **Nous avons déjà écrit cette classe dans la** [**séance 2**arrow-up-right](https://app.gitbook.com/s/-LjKrFSyq65TEN9dTgPU/seance2/sujet.md) **. Vous pouvez/devez la reprendre et modifier la visibilité des propriétés** La classe Voiture hérite de Vehicule. * Elle possède en plus la propriété privée type qui permet de distinguer les berlines, des SUV, des 4x4 et des breaks (‘berline’,’suv’,’4x4’,’break’). Attention, seules ces valeurs sont possibles. Tout autre valeur est invalide et affichera une erreur. * La méthode `lire_type()` permet de connaître le type de véhicule. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-5#a-faire) A FAIRE * Créez les deux classes dans un fichier nommé vehicule.php * Créez une application td5.php : * Une instance de Vehicule. Exemple de votre choix * Deux instances de Voiture, Exemples à votre convenance. * Testez votre application en utilisant les différentes méthodes des différentes instances. * Que se passe-t-il lorsque l'on appelle la méthode lire\_caractéristique() sur une Voiture ? Modifiez votre code pour que lire\_caractéristique() puisse afficher toutes les informations de la voiture. * Créez une nouvelle classe, Bus, qui héritera de Véhicule et qui contiendra comme propriétés le nombre de place assise et le nombre d'essieux (les axes portant les roues). [PrécédentCorrections séance Dchevron-left](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/corrections-seance-d) [SuivantSéance F : Héritage multiplechevron-right](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6) Mis à jour il y a 1 an * [Cours](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-5#cours) * [Pour résumer la visibilité des propriétés](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-5#pour-resumer-la-visibilite-des-proprietes) * [Exercice](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-5#exercice) * [A FAIRE](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-5#a-faire) --- # Séance B : Concepts de la POO | Programmation Orientée Objet en PHP (B.U.T.) [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-2#objectifs) Objectifs ---------------------------------------------------------------------------------------------------------------------------- * Mettre en œuvre les concepts de propriété et de méthode. * Mettre en œuvre les concepts de classe et d’objet * Construire une application PHP Orienté Objet circle-info Pour les TD et TP de POO nous allons travailler en local pour gagner en efficacité et éviter de devoir uploader le code sur un serveur pour tester. Le plus simple est d'utiliser l'image docker que vous avez créé en WR314 : https://docs.mmi-troyes.fr/books/wr314-2025/page/seance01-container-buts3. Vous pouvez aussi utiliser une version logiciel tel que _WampServer_ ou _Xamp_ pour Windows, ou _MAMP_ pour MacOs, si vous rencontrez des difficultés avec Docker. [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-2#enonce-et-travail-a-faire) Enoncé et travail à faire ------------------------------------------------------------------------------------------------------------------------------------------------------------ ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-2#exercice-1) Exercice 1 #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-2#les-proprietes) **Les propriétés** Un Véhicule est un **OBJET** du monde réel. La classe se caractérise par : * Sa marque (du texte) * Sa puissance en CV (un nombre entier) * Son kilométrage (un nombre décimal) #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-2#les-methodes) **Les méthodes** Utiliser un véhicule a pour effet d’augmenter la valeur du kilométrage. On souhaite pouvoir afficher les caractéristiques du véhicule #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-2#programmation) **Programmation** * Le code de la classe _Vehicule_ (avec une majuscule) doit être enregistré dans le fichier V**ehicule.php** * Le code de l’application doit être enregistré dans le fichier **tp1\_vehicule.php**. * Utilisez la commande _require_ pour appeler la classe _Vehicule_ dans l’application. * Ecrire la classe pour définir les propriétés et les méthodes de l’objet _Vehicule_ * Ecrire une application : * qui instanciera les deux véhicules suivants Nom du véhicule marque puissance kilometrage vehicule1 RENAULT 90 15000 vehicule2 PEUGEOT 110 20000 * qui affiche les caractéristiques des deux véhicules * qui modifie la puissance de la vehicule1 : nouvelle valeur 110 * qui affiche le kilométrage des véhicules après un déplacement : le vehicule1 parcoure 3500 km et la vehicule2 parcoure 1500 km. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-2#exercice-2) Exercice 2 Considérant qu'un chien est caractérisé par sa race, son âge et son poids, définissez une classe permettant de le représenter. Un chien est par ailleurs un animal qui vieillit, et qui peut prendre du poids. On peut afficher toutes les caractéristiques des chiens. 1. Définir la classe Chien 2. Créer le fichier tp1\_chien.php pour tester la classe. 3. Créer les deux chiens suivants : Nom du chien Race Age Poids Chien1 Labrador 4 25 Chien2 Berger Allemand 6 20 Ecrire le code permettant de réaliser les étapes suivantes : * Afficher les données des chien1 et chien2 * Le chien1 prend un an de plus (c'est son anniversaire :)) * Le chien2 mange et grossit de 1,5Kg * Le chien1 perd 2kg * A chaque étape afficher les informations du chien. [PrécédentSéance A : Introduction à la POOchevron-left](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-1) [SuivantSéance C : Encapsulationchevron-right](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-3) Mis à jour il y a 5 mois * [Objectifs](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-2#objectifs) * [Enoncé et travail à faire](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-2#enonce-et-travail-a-faire) * [Exercice 1](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-2#exercice-1) * [Exercice 2](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-2#exercice-2) --- # Séance C : Encapsulation | Programmation Orientée Objet en PHP (B.U.T.) #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-3#rappels-de-cours) Rappels de Cours L’encapsulation consiste à déclarer les propriétés (attributs) en **private** (ou protected) au lieu de public. **Pourquoi ?** Pour l’intégrité des données, c’est-à-dire pour que les propriétés ne prennent pas n’importe quelles valeurs. Le programmeur d’une classe va ainsi construire un code fiable. Le programmeur utilisant de cette classe n’aura pas à se préoccuper de l’intégrité du code qu’il utilise. L’unique façon d’assurer d’y arriver est donc de rendre inaccessible les attributs sauf en créant des méthodes publiques qui permettront de s’assurer que les valeurs prises restes dans celles admises. Ces méthodes filtrent donc l’usage des attributs. On appelle une méthode publique qui permet d'accéder à une propriété un _getter_ (car commence en général par getXxxx) ou un _accesseur_, et on nomme une méthode publique qui permet de définir ou de modifier une propriété un _setter_ (car commence en général par setXxxx) ou un _mutateur_. Remarque : il est possible de déclarer des méthodes privées (qui ne seront utilisée que dans la classe elle même). Cela permet de renforcer la stabilité du code et ces évolutions. #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-3#objectifs-de-la-seance) Objectifs de la séance * Comprendre le concept d’encapsulation. * Mettre en œuvre l’encapsulation #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-3#exercice-n-1) EXERCICE N°1 Voici le code la classe Personne. personne.php Copier nom=$n; $this->prenom=$p; $this->age=$a; } // Définition du comportement sePresente() public function sePresente(): string { return 'Je m\'appelle '.$this->prenom.' '.$this->nom.' et j\'ai '.$this->age.' ans '; } } ?> Les propriétés sont déclarées **private**. Voici le code de l’application seance3\_exo1.php. A FAIRE * Créez les deux fichiers personne.php et seance3\_exo1.php. * Testez seance3\_exo1.php et répondez aux questions * Pourquoi l’exécution du code de seance3\_exo1.php renvoie une erreur ? * Donnez une solution simple pour permettre l’exécution normale de ce code #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-3#exercice-2) EXERCICE 2 Nous allons ici modifier le code de la classe Personne pour répondre à un nouveau cahier des charges. Le nom d’une personne sera obligatoirement en majuscules. Le programmeur qui utilisera cette classe pourra créer une instance sans se soucier de cette contrainte. C’est donc à la classe de gérer conversion du nom en majuscules. Voici comment. Code de la classe Personne2 Voici le code de l’application seance3\_exo2.php A FAIRE * Créez une nouvelle version du code de la classe (Personne2) et de l’application (seance3\_exo2) * Testez seance3\_exo2.php #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-3#exercice-n-3) Exercice N°3 Nous allons écrire la classe connexion\_sql qui permet de gérer la connexion à des bases de données MYSQL. Chaque fois que nous aurons besoin de gérer une connexion à une base de données, il suffira de créer une instance de cette classe. L’exercice proposé se limitera à quelques propriétés et quelques méthodes. La classe ne sera donc pas opérationnelle. Mais sa programmation devra nous permettre d’assimiler le concept d’encapsulation. **Ecrire la classe ConnexionSQL :** Les propriétés * adresseip : adresse IP du serveur * nombase : nom de la base de données * utilisateur : nom de l’utilisateur * mdp : mot de passe Les méthodes * constructeur * lire\_connexion qui retourne adresseip, nombase et utilisateur. **Ecrire l’application seance3\_exo3.php** * Testez le code **Questions complémentaires** * modifier la classe Connexion\_SQL pour vous assurer que l'IP donnée par l'utilisateur est dans un format valide. Sinon, afficher un message d'erreur. [PrécédentSéance B : Concepts de la POOchevron-left](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-2) [SuivantSéance D : Héritagechevron-right](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-4) Mis à jour il y a 3 ans seance3\_exo1.php Copier sePresente().'
'; //Je m'appelle Paul Martin et j'ai 19 ans // Modification de l'attribut Nom $etudiant->nom='Durand'; echo $etudiant->sePresente().'
'; // Je m'appelle Paul Durand et j'ai 19 ans ?> personne2.php Copier setNom($n); $this->prenom=$p; $this->age=$a; } // Définition du comportement sePresente() public function sePresente(): string { return 'Je m\'appelle '.$this->prenom.' '.$this->nom.' et j\'ai '.$this->age.' ans '; } // initialisation du nom en majsucules public function setNom(string $n): void { $this->nom=strtoupper($n); } } ?> seance3\_exo2.php Copier sePresente().'
'; //Je m'appelle Paul MARTIN et j'ai 19 ans (nom en majuscules) // Modification de l'attribut Nom $etudiant->setNom('Durand'); // nom en minuscules echo $etudiant->sePresente().'
'; // Je m'appelle Paul DURAND et j'ai 19 ans (nom en majuscules) ?> seance3\_exo3.php Copier lire_connexion(); // Création d'une deuxième instance $connexion2=new Connexion_SQL('serveur','test','root','');// serveur n'est pas une @ip valide echo $connexion2->lire_connexion(); ?> --- # CM2 : Point d'étape | Programmation Orientée Objet en PHP (B.U.T.) Le support de cours [Programmation Orientée Objetpresentations.davidannebicque.frchevron-right](https://presentations.davidannebicque.fr/r313-2.html) [PrécédentInterfaceschevron-left](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/interfaces) [SuivantSéance G : Synthèse des conceptschevron-right](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7) Mis à jour il y a 4 mois --- # Séance 19 : Evaluation écrite | Vue.js BUT ABCD : 26 mars, 11h00 EF : 28 avril, 14h00 [PreviousSéance 18 : TP Notéchevron-left](https://cours.davidannebicque.fr/vue.js-but/but2/seance-18-tp-note) [NextMini projet : Site e-commercechevron-right](https://cours.davidannebicque.fr/vue.js-but/but2/mini-projet-site-e-commerce) Last updated 11 months ago --- # Séance 7 : Evénements et Formulaires | Vue.js BUT circle-info Cette partie est une traduction/adaptation de la documentation officielle située : [https://fr.vuejs.org/guide/essentials/forms.htmlarrow-up-right](https://fr.vuejs.org/guide/essentials/forms.html) [hashtag](https://cours.davidannebicque.fr/vue.js-but/but2/seance-7-evenements-et-formulaires#directive-v-model) Directive `v-model` ----------------------------------------------------------------------------------------------------------------------------------------- La directive `v-model` permet de lier un élément du DOM à une variable du composant. Cette variable doit être déclarée dans la partie script du composant et réactive (`ref()`). Exemple : Copy

Message is: {{ message }}

Copy const message = ref('Hello Vue!') `v-model` peut être utilisé sur des `` de différents types, des éléments ` Copy Copy
Copy
Personalia:







--- # Séance 1 | LP MIOT file-download 5MB [cours.pptx](https://3554184702-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTtJnVXa0NgEzStTXndrZ%2Fuploads%2FRDFAvttJ2rf4ahAnP5AE%2Fcours.pptx?alt=media&token=f65ed8e0-c6b4-426a-abf4-51f01f152cce) downloadDownload[arrow-up-right-from-squareOpen](https://3554184702-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTtJnVXa0NgEzStTXndrZ%2Fuploads%2FRDFAvttJ2rf4ahAnP5AE%2Fcours.pptx?alt=media&token=f65ed8e0-c6b4-426a-abf4-51f01f152cce) Support de cours ### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-1#structure-minimale-dune-page) Structure minimale d'une page Copy Document ### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-1#editeur-de-code) Editeur de code Un éditeur de code : [https://code.visualstudio.comcode.visualstudio.comchevron-right](https://code.visualstudio.com/) Visual Studio code Mettre VSCode en français : [https://youtu.be/wkVI2p6yn7warrow-up-right](https://youtu.be/wkVI2p6yn7w) ### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-1#quelques-balises-html) Quelques balises HTML * `

Texte

` : Titre de niveau 1. Il existe 6 niveaux : h1 -> h6 * `

Un texte ici

` : Un paragraphe * `
un bloc
` : Un bloc pouvant contenir d'autres balises, définir une zone de la page, ... * `Un lien` : Un lien vers une autre page. * `Ceci est une image` : Insérer une image. src est le lien vers l'image (soit une adresse web, soit un fichier). ### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-1#quelques-parametres-css) Quelques paramètres CSS * `color` : Couleur du texte * `background-color` : Couleur du fond * `border: 1px solid #123456` : Couleur de la bordure, 1px d'épaisseur, de couleur #123456 [PreviousPlanningchevron-left](https://cours.davidannebicque.fr/lp-miot) [NextSéance 2chevron-right](https://cours.davidannebicque.fr/lp-miot/seance-2) Last updated 3 years ago * [Structure minimale d'une page](https://cours.davidannebicque.fr/lp-miot/seance-1#structure-minimale-dune-page) * [Editeur de code](https://cours.davidannebicque.fr/lp-miot/seance-1#editeur-de-code) * [Quelques balises HTML](https://cours.davidannebicque.fr/lp-miot/seance-1#quelques-balises-html) * [Quelques paramètres CSS](https://cours.davidannebicque.fr/lp-miot/seance-1#quelques-parametres-css) --- # Séance 6-b : Introduction à Nuxt 3 | Vue.js BUT [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#objectifs) 🎯 Objectifs ------------------------------------------------------------------------------------------------------------------------ * Découvrir Nuxt et ses apports (SSR, SSG, SEO). * Migrer une app Vue vers Nuxt. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#quest-ce-que-nuxt.js) Qu'est-ce que Nuxt.Js ? ---------------------------------------------------------------------------------------------------------------------------------------------- Nuxt (https://nuxt.com/), vesion 4 aujourd'hui, est un framework construit au‑dessus de Vue 3 qui facilite la création d'applications universelles (fullstack) : sites statiques, applications server‑rendered (SSR) ou applications hybridées. Nuxt vise à fournir une structure et des conventions pour accélérer le développement (routing automatique, layouts, plugins, modules, import automatisés, ...). Sa runtime moderne repose sur Nitro (moteur serveur agnostique) et offre un excellent support pour le rendu côté serveur, le prerendering, le déploiement serverless et l'optimisation des performances. Points clés de Nuxt 3 / 4 : * Routing automatique via `pages/`. * Layouts et slots globaux via `layouts/`. * API server intégrée via `server/` (endpoints API côté serveur). * Nitro : abstraction du serveur. * Modules & plugins pour étendre les fonctionnalités (auth, i18n, analytics). * Support SSR, SSG et ISR (hybride) natif. * Intégration simple avec Vite, TypeScript et Pinia. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#comparatif-nuxt-vs-vue-grand-lignes) Comparatif Nuxt vs Vue (grand lignes) * Vue : * Framework UI (lib) pour construire des interfaces réactives côté client. * Idéal pour des applications SPA où l'on contrôle la configuration et l'outillage. * Nécessite d'ajouter manuellement routing, SSR/SSG, structure de dossiers si besoin. * Nuxt : * Framework construit sur Vue, fournit conventions et scaffolding. * Ajoute des fonctionnalités prêtes à l'emploi : SSR/SSG, routage automatique, API server. * Réduit la configuration initiale, facilite le SEO et le déploiement sur des plateformes serverless. **Quand choisir Nuxt ?** * Projet nécessitant SEO, SSR ou génération statique. * Besoin d'une structure rapide, modules prêts à l'emploi et déploiement serverless. **Quand choisir Vue seul ?** * Projet front uniquement où SSR/SSG n'est pas nécessaire. * Besoin d'une configuration fine et légère, ou intégration dans une architecture existante. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#modes-de-rendu-tableau-synthetique) Modes de rendu — tableau synthétique Mode Description courte Avantages Inconvénients Cas d'usage CSR (Client‑Side Rendering) Le rendu HTML est généré côté client par le navigateur après téléchargement des JS Interactions rapides après initial load ; développement simple Mauvais SEO, temps au premier rendu plus long SPA internes, dashboards authentifiés SSR (Server‑Side Rendering) Le serveur renvoie du HTML pré‑rendu pour chaque requête Meilleur SEO, premier rendu rapide, partage social (meta) Charge serveur plus importante, complexité (hydration) Sites publics, e‑commerce, blogs dynamiques SSG (Static Site Generation) Pages générées à la build en HTML statique (prérendu) Très performant, sécurisé, scale gratuit (CDN) Moins adapté au contenu très dynamique sans revalidation Documentation, blogs, landing pages ISR (Incremental Static Regeneration) / Revalidation SSG + possibilité de régénérer des pages après build (à la demande ou périodiquement) Meilleure cohérence entre perf et dynamique Complexité additionnelle, dépend du provider Sites commerce avec catalogue mis à jour souvent Edge Rendering / SSR@Edge Rendu SSR exécuté côté edge (CDN) proche de l'utilisateur Très faible latence, meilleure SEO globalement Support dépendant du provider et du runtime Sites internationaux, latence critique * * * ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#structure-nuxt) Structure Nuxt Pour que Nuxt fonctionne de manière optimale, il faut respecter une certaine structure de dossiers. Voici les principaux répertoires et fichiers : * `pages/` : routage automatique (chaque fichier = route) * `layouts/` : templates globaux (ex : default, auth) * `components/` : composants réutilisables * `composables/` : composables auto‑importés * `plugins/` : registres et initialisations (ex : axios, i18n) * `server/` : endpoints server (API) et middleware * `app.vue` / `nuxt.config.ts` : configuration globale La documentation ici est très explicite : https://nuxt.com/docs/4.x/guide/directory-structure/app/app **/!\\ Depuis la version 4, la structure est déportée dans un dossier** `**app/**` **pour plus de flexibilité.** ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#modules-nuxt) Modules Nuxt Nuxt dispose d'un écosystème riche de modules (https://nuxt.com/modules) pour ajouter des fonctionnalités courantes facilement, par exemple : * Authentification (ex : `@nuxtjs/auth-next`) * Internationalisation (i18n) (ex : \`@nuxtjs/i18n * Analytics (ex : `@nuxtjs/google-analytics`) * CMS (ex : `@nuxtjs/content`) * ... [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#routage-avec-nuxt) Routage avec Nuxt ------------------------------------------------------------------------------------------------------------------------------------- Le routage dans Nuxt (https://nuxt.com/docs/4.x/getting-started/routing) est automatique via le dossier `pages/`. Chaque fichier `.vue` dans ce dossier devient une route accessible. Il est possible de créer des routes dynamiques, imbriquées, et de configurer des meta‑tags via la propriété `definePageMeta`. Voici quelques exemples : * `pages/index.vue` → `/` * `pages/about.vue` → `/about` * `pages/blog/index.vue` → `/blog` * `pages/blog/[id].vue` → `/blog/:id` (route dynamique) * `pages/dashboard/settings.vue` → `/dashboard/settings` (route imbriquée) * `pages/user/[...slug].vue` → `/user/*` (catch-all) `definePageMeta` pour configurer les meta‑tags SEO (https://nuxt.com/docs/4.x/getting-started/seo-meta#usehead) /!\\ definePageMeta dans la version 3 de Nuxt. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#exercice) Exercice ------------------------------------------------------------------------------------------------------------------- Migrer une application Vue 3 existante vers Nuxt 4 : 1. Créer un nouveau projet Nuxt 4 (`npm create nuxt@latest`). 2. Déplacer et adapter vos fichiers 3. Les composables, services et stores Pinia doivent être placés dans `composables/`, `services/` et `stores/` respectivement. 4. Les views (pages) doivent être placées dans `pages/` avec le routage automatique. Vous pourrez retirer les imports et configurations de Vue Router. La sécurité, avec Nuxt, (authentification, autorisation) sera vue dans la séance suivante. [PreviousSéance 6-a : TypeScriptchevron-left](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-a-typescript) [NextSéance 7 : Nuxt & APIchevron-right](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api) Last updated 3 months ago * [🎯 Objectifs](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#objectifs) * [Qu'est-ce que Nuxt.Js ?](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#quest-ce-que-nuxt.js) * [Comparatif Nuxt vs Vue (grand lignes)](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#comparatif-nuxt-vs-vue-grand-lignes) * [Modes de rendu — tableau synthétique](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#modes-de-rendu-tableau-synthetique) * [Structure Nuxt](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#structure-nuxt) * [Modules Nuxt](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#modules-nuxt) * [Routage avec Nuxt](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#routage-avec-nuxt) * [Exercice](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3#exercice) Copy --- # Séance 7 : Nuxt & API | Vue.js BUT [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#objectifs) 🎯 Objectifs --------------------------------------------------------------------------------------------------------- * Consommer des données dans Nuxt. * Gérer l’authentification avec middleware. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#partie-theorique) 📖 Partie théorique ----------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#data-fetching) Data fetching Source : https://nuxt.com/docs/4.x/getting-started/data-fetching Nuxt propose plusieurs helpers pour récupérer des données de façon déclarative et compatible SSR/SSG : `useFetch` et `useAsyncData` sont les plus courants. Ils sont auto‑importés et s'intègrent au cycle de rendu (server ou client) de Nuxt. Principes clés : * Les appels faits pendant la phase serveur sont exécutés avant l'envoi du HTML (meilleur SEO et fast first paint). * Les helpers gèrent automatiquement l'état `pending` / `error` et la réhydratation côté client. * Les résultats peuvent être mis en cache et revalidés (revalidation) selon la configuration. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#usefetch) useFetch https://nuxt.com/docs/4.x/getting-started/data-fetching#usefetch Exemple : #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#useasyncdata) useAsyncData https://nuxt.com/docs/4.x/getting-started/data-fetching#useasyncdata Exemple : #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#quand-utiliser-lun-ou-lautre) Quand utiliser l'un ou l'autre * `useFetch` : très pratique pour des appels simples dans le setup d'un composant/page. * `useAsyncData` : préférable si vous voulez contrôler la clé de cache, le transform ou la revalidation. Autres utilitaires liés : * `useState()` : stocke un état réactif côté serveur/client (idéal pour partager une valeur entre pages sans Pinia). Exemple : * `useNuxtApp().$fetch` ou `$fetch` : utilitaires pour faire des requêtes internes ou externes. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#server-api-endpoints) Server API (endpoints) Nuxt offre un dossier `server/api/` pour créer des endpoints server‑side. Exemple : Puis côté client : Bonnes pratiques et pièges courants : * Préférer `$fetch`/`useFetch` pour les appels internes aux endpoints Nuxt (optimisations internes). * Faire attention aux appels indésirables côté client (watch, effets) — utiliser `lazy: true` si nécessaire. * Gérer les erreurs et l'état de chargement pour afficher des loaders ou des messages clairs. * Pour des pages statiques (SSG), vérifier si le contenu doit être revalidé (ISR-like) et configurer la revalidation via `useAsyncData` ou des hooks de build. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#middleware-de-route) Middleware de route source : https://nuxt.com/docs/4.x/getting-started/routing#route-middleware * Nuxt permet de définir des middlewares pour protéger des routes (authentification, autorisation). Ecrire le middleware dans `middleware/auth.js` (par exemple) : * Appliquer le middleware globalement dans `nuxt.config.ts` ou localement dans une page avec `definePageMeta`. Il est aussi possible d'utiliser des modules (https://nuxt.com/modules?category=Security&sortBy=stars) pour gérer l'authentification plus facilement ou de manière plus complète, en intégrant des providers OAuth, JWT, etc. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#appel-api-avec-un-token-jwt) Appel API avec un token JWT ------------------------------------------------------------------------------------------------------------------------------------------ ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#en-vuejs-avec-fetch) en VueJs avec fetch ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#en-nuxtjs-avec-usefetch) en NuxtJs avec useFetch [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#travaux-pratiques) 📝 Travaux pratiques ------------------------------------------------------------------------------------------------------------------------- * Reconnectér les appels API de l’application Vue 3 précédente en Nuxt. * Créer page `/login`. * Stocker token JWT dans Pinia/localStorage. * Protéger l'ajout d'une tâche avec middleware. [PreviousSéance 6-b : Introduction à Nuxt 3chevron-left](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-b-introduction-a-nuxt-3) [NextSéance 8 : Nuxt avancé & SEOchevron-right](https://cours.davidannebicque.fr/vue.js-but/but3/seance-8-nuxt-avance-seo) Last updated 3 months ago * [🎯 Objectifs](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#objectifs) * [📖 Partie théorique](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#partie-theorique) * [Data fetching](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#data-fetching) * [Middleware de route](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#middleware-de-route) * [Appel API avec un token JWT](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#appel-api-avec-un-token-jwt) * [en VueJs avec fetch](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#en-vuejs-avec-fetch) * [en NuxtJs avec useFetch](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#en-nuxtjs-avec-usefetch) * [📝 Travaux pratiques](https://cours.davidannebicque.fr/vue.js-but/but3/seance-7-nuxt-api#travaux-pratiques) Copy // 1) useFetch : wrapper autour de fetch/$fetch, simple et pratique const { data, pending, error } = await useFetch('/api/tasks') // data.value contient le JSON ; pending.value indique le chargement Copy // 2) useAsyncData : utile pour nommer/mettre en cache explicitement const { data: tasks } = await useAsyncData('tasks', () => $fetch('/api/tasks')) // useAsyncData permet de définir une clé, un transform, et des options de server/lazy Copy const count = useState('count', () => 0) // persisté dans l'instance Nuxt (par requête/utilisateur) Copy // server/api/tasks.get.js export default defineEventHandler(async (event) => { // logique serveur (lecture DB, appel externe, auth) return [{ id: 1, title: 'Tâche' }] }) Copy const { data } = await useFetch('/api/tasks') Copy export default defineNuxtRouteMiddleware((to, from) => { const isAuthenticated = useAuthStore().isAuthenticated if (!isAuthenticated && to.path !== '/login') { return navigateTo('/login') } }) Copy export default definePageMeta({ middleware: 'auth' }) Copy const token = 'votre_token_jwt_ici'; fetch('https://wra506d.davidannebicque.ovh/api/ws-xx/channels', { headers: { 'Authorization': `Bearer ${token}` } }) .then(response => response.json()) .then(data => console.log(data)); Copy const token = 'votre_token_jwt_ici'; const { data, error } = await useFetch('https://wra506d.davidannebicque.ovh/api/ws-xx/channels', { headers: { 'Authorization': `Bearer ${token}` } }); --- # Séance 11 : Projet – Développement | Vue.js BUT [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#objectifs) 🎯 Objectifs ---------------------------------------------------------------------------------------------------------------------- * Construire page channel avec messages. * Gérer création et rafraîchissement des messages. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#partie-theorique) 📖 Partie théorique ------------------------------------------------------------------------------------------------------------------------------------ ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#relations-entre-entites) Relations entre entités * Channel → Messages → User * Organisation des données et affichage par channel ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#polling-simple) Polling simple * Rafraîchissement régulier des messages pour simuler le temps réel. * Utilisation de setInterval ou d’une fonction dédiée. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#ux) UX * Loaders pour indiquer le chargement * Toasts pour les notifications * Gestion des erreurs pour améliorer l’expérience utilisateur [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#exemples) 💻 Exemples -------------------------------------------------------------------------------------------------------------------- [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#travaux-pratiques) 📝 Travaux pratiques -------------------------------------------------------------------------------------------------------------------------------------- * Créer page `/channel/:id`. * Afficher messages d’un channel. * Formulaire pour poster message. * Rafraîchir via polling. [PreviousSéance 10 : Projet – Kick-off réseau socialchevron-left](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social) [NextSéance 12 : Projet – Finalisationchevron-right](https://cours.davidannebicque.fr/vue.js-but/but3/seance-12-projet-finalisation) Last updated 4 months ago * [🎯 Objectifs](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#objectifs) * [📖 Partie théorique](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#partie-theorique) * [Relations entre entités](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#relations-entre-entites) * [Polling simple](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#polling-simple) * [UX](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#ux) * [💻 Exemples](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#exemples) * [📝 Travaux pratiques](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement#travaux-pratiques) Copy --- # Séance 3 | Accessibilité (S1) | MMI Nouméa [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#les-autres-balises) Les autres balises --------------------------------------------------------------------------------------------------------------------------- L'objectif de cette séance est d'apprendre à utiliser les bonnes balises HTML, pour produire un code de meilleure qualité, et plus accessible. Nous verrons notamment les bons usages pour les images, les tableaux et les formulaires. Ainsi que le choix d'une structure de page adaptée au contenu. circle-info L'objectif de cette séance n'est pas de se focaliser sur le CSS, mais uniquement sur le code HTML. [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#images) Images --------------------------------------------------------------------------------------------------- ![](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2F1283878026-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F66pWwTmIg5XgNOy9cbWG%252Fuploads%252FupGihasxh0mGrMd0gBT0%252Fpics.png%3Falt%3Dmedia%26token%3D82b56152-7273-4186-bdc4-a24a6be975f8&width=768&dpr=3&quality=100&sign=6644e07c&sv=2) Image à reproduire Reproduire cette mise en page (avec l'image de votre choix) en écrivant un code HTML juste et de qualité [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.w3schools.com%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=2252839c&sv=2)W3Schools.comwww.w3schools.comchevron-right](https://www.w3schools.com/tags/tag_figcaption.asp) Extrait de la documentation sur W3Schools.com [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#listes) Listes --------------------------------------------------------------------------------------------------- ![](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2F1283878026-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F66pWwTmIg5XgNOy9cbWG%252Fuploads%252FmbmWPjJDqGFemVPEcGHs%252Fpics2.png%3Falt%3Dmedia%26token%3Dce70361e-d27e-4e56-a24d-a172ee6d0f4a&width=768&dpr=3&quality=100&sign=f23dc837&sv=2) Image à reproduire Reproduire cette mise en page (avec les données de votre choix) en écrivant un code HTML juste et de qualité. [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.w3schools.com%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=2252839c&sv=2)W3Schools.comwww.w3schools.comchevron-right](https://www.w3schools.com/tags/tag_dl.asp) Extrait de la documentation pour les listes "dl" ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#quelques-ressources) Quelques ressources [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.smashingmagazine.com%2Fimages%2Ffavicon%2Ffavicon.ico&width=20&dpr=3&quality=100&sign=3516e915&sv=2)HTML5 Input Types: Where Are They Now? — Smashing MagazineSmashing Magazinechevron-right](https://www.smashingmagazine.com/2019/01/html5-input-types#a5) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.smashingmagazine.com%2Fimages%2Ffavicon%2Ffavicon.ico&width=20&dpr=3&quality=100&sign=3516e915&sv=2)UX And HTML5: Let’s Help Users Fill In Your Mobile Form (Part 1) — Smashing MagazineSmashing Magazinechevron-right](https://www.smashingmagazine.com/2018/08/ux-html5-mobile-form-part-1) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.smashingmagazine.com%2Fimages%2Ffavicon%2Ffavicon.ico&width=20&dpr=3&quality=100&sign=3516e915&sv=2)UX And HTML5: Let’s Help Users Fill In Your Mobile Form (Part 2) — Smashing MagazineSmashing Magazinechevron-right](https://www.smashingmagazine.com/2018/08/ux-html5-mobile-form-part-2) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fuicookies.com%2Fwp-content%2Fuploads%2F2017%2F08%2Fcropped-favicon-192x192.png&width=20&dpr=3&quality=100&sign=e5571b53&sv=2)36 Most Beautiful CSS Forms Designed By Top Designers 2026uiCookieschevron-right](https://uicookies.com/beautiful-css-forms) [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#page-complete) Page complète ----------------------------------------------------------------------------------------------------------------- ![](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2F1283878026-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F66pWwTmIg5XgNOy9cbWG%252Fuploads%252FipIRxpha7LDdgfOjz1px%252Fpics3.png%3Falt%3Dmedia%26token%3D815b02c4-cce9-4c6e-b1cb-f1d764c368eb&width=768&dpr=3&quality=100&sign=4bd2cc41&sv=2) Image 1 ![](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2F1283878026-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F66pWwTmIg5XgNOy9cbWG%252Fuploads%252FNObyGn6l4ytXWeEKOHqJ%252Fpics4.png%3Falt%3Dmedia%26token%3D63d3fc1d-6436-47f9-aebe-fc9b4ad54559&width=768&dpr=3&quality=100&sign=7858a890&sv=2) Image 2 Pour les pages ci-dessus, quelles balises utiliseriez vous pour définir la structure globale ? [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#le-panier) Le panier --------------------------------------------------------------------------------------------------------- [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#quelques-ressources-1) Quelques ressources ------------------------------------------------------------------------------------------------------------------------------- [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fcdn.shopify.com%2Fb%2Fshopify-brochure2-assets%2Fb13486e5693b246af63c66ab047a6b6b.png&width=20&dpr=3&quality=100&sign=ea0a5b32&sv=2)Panier d’achat e-commerce : définition, options et comment choisir - Shopify FranceShopifychevron-right](https://www.shopify.com/fr/blog/panier-achat) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.codeur.com%2Fblog%2Fwp-content%2Fuploads%2F2022%2F05%2Fcropped-logo-codeur-favicon-270x270.png&width=20&dpr=3&quality=100&sign=dd71909e&sv=2)10 paniers e-commerce dont vous devriez vous inspirerCodeur.comchevron-right](https://www.codeur.com/blog/panier-e-commerce-reussi/) ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#abandon-de-panier) Abandon de panier... [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fcorp-backend.brevo.com%2Fwp-content%2Fuploads%2F2025%2F07%2FBrevo_logo.svg&width=20&dpr=3&quality=100&sign=a3ac947&sv=2)7 conseils pour réduire l’abandon de panierfr.sendinblue.comchevron-right](https://fr.sendinblue.com/blog/7-conseils-pour-reduire-labandon-de-panier/) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Ff.hellowork.com%2Fblogdumoderateur%2F2022%2F01%2Fcropped-favicon-bdm-1-192x192.png&width=20&dpr=3&quality=100&sign=99b1643d&sv=2)E-commerce : 12 conseils pour réduire les abandons de panierBDMchevron-right](https://www.blogdumoderateur.com/e-commerce-conseils-reduire-abandons-panier/) ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#la-reglementation-francaise) La réglementation française [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.service-public.gouv.fr%2Fresources%2Fv-f3de1987cb%2Fassets%2Fdsfr-1.14%2Fdist%2Ffavicon%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=50e80eb3&sv=2)Faire du commerce en ligne (e-commerce) : règles à respecterservicepublicfrchevron-right](https://entreprendre.service-public.fr/vosdroits/F23455) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fastatic.ccmbg.com%2Fccmcms_journaldunet%2Fdist%2Fpublic%2Fpublic-assets%2Fimg%2Ficons%2Fapple-touch-icon.png%3F2&width=20&dpr=3&quality=100&sign=c461be59&sv=2)E-commerce & loi Hamon : comment mettre aux normes son tunnel de commandeJDNchevron-right](https://www.journaldunet.com/ebusiness/commerce/1137770-e-commerce-loi-hamon-comment-mettre-aux-normes-son-tunnel-de-commande/) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.assistant-juridique.fr%2Ffavicon.ico&width=20&dpr=3&quality=100&sign=bea87fad&sv=2)Mentions obligatoires d'un site de ecommerce : la liste complète | Assistant-juridique.frwww.assistant-juridique.frchevron-right](https://www.assistant-juridique.fr/mentions_obligatoires_ecommerce.jsp) [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#exercice-tableau-et-formulaire) Exercice : tableau et formulaire ----------------------------------------------------------------------------------------------------------------------------------------------------- En mélangeant les deux concepts vus précédemment et en vous inspirant de votre expérience, concevoir un panier d'achat, contenant au moins 4 produits, les mentions obligatoires (total TTC, total HT, TVA, frais, frais de livraisons, la quantité de chaque produit, son prix unitaire et son prix total). Vous permettrez à l'utilisateur de modifier les quantités des produits (y compris en supprimer). L'objectif n'est pas ici de faire fonctionner le panier, mais simple d'en concevoir la mise en page. Vous pouvez pour cet exercice utiliser des librairies CSS si vous le souhaitez. [PreviousSéance 2chevron-left](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-2) Last updated 2 years ago * [Les autres balises](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#les-autres-balises) * [Images](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#images) * [Listes](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#listes) * [Quelques ressources](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#quelques-ressources) * [Page complète](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#page-complete) * [Le panier](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#le-panier) * [Quelques ressources](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#quelques-ressources-1) * [Abandon de panier...](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#abandon-de-panier) * [La réglementation française](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#la-reglementation-francaise) * [Exercice : tableau et formulaire](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-3#exercice-tableau-et-formulaire) Copy
Description de l'image
Fig.1 Légende de l'image
Copy
Processeur
Intel i7
Mémoire Ram
16Go
Carte Graphique
Radeon xxxx
--- # Séance 2 | LP MIOT [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-2#cours-sur-le-css) Cours sur le CSS --------------------------------------------------------------------------------------------------- file-pdf 2MB [intro-cssv2.pdf](https://3554184702-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTtJnVXa0NgEzStTXndrZ%2Fuploads%2FIjyTJ1r4unPTRngA6c85%2Fintro-cssv2.pdf?alt=media&token=e0b159b6-4064-4ce5-8856-0b43c179e576) PDF downloadDownload[arrow-up-right-from-squareOpen](https://3554184702-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTtJnVXa0NgEzStTXndrZ%2Fuploads%2FIjyTJ1r4unPTRngA6c85%2Fintro-cssv2.pdf?alt=media&token=e0b159b6-4064-4ce5-8856-0b43c179e576) ### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-2#exercices) Exercices Copy Page avec du CSS

Hello, world!

Mon article

Première section

Premier paragraphe

Deuxième section

Deuxième paragraphe

Troisième paragraphe

file-pdf 2MB [td2\_M1206.pdf](https://3554184702-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTtJnVXa0NgEzStTXndrZ%2Fuploads%2FJKYyT8w4a5y8UxmlNyDL%2Ftd2_M1206.pdf?alt=media&token=6e25f460-d511-480b-bc07-0fa7a0dff1c2) PDF downloadDownload[arrow-up-right-from-squareOpen](https://3554184702-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTtJnVXa0NgEzStTXndrZ%2Fuploads%2FJKYyT8w4a5y8UxmlNyDL%2Ftd2_M1206.pdf?alt=media&token=6e25f460-d511-480b-bc07-0fa7a0dff1c2) [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-2#bootstrap) Bootstrap ------------------------------------------------------------------------------------- Lien vers Bootstrap [![Logo](https://cours.davidannebicque.fr/lp-miot/~gitbook/image?url=https%3A%2F%2Fgetbootstrap.com%2Fdocs%2F5.3%2Fassets%2Fimg%2Ffavicons%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=7622580d&sv=2)Bootstrapgetbootstrapchevron-right](https://getbootstrap.com/) file-download 5MB [m2206\_cm\_bootstrap.pptx](https://3554184702-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTtJnVXa0NgEzStTXndrZ%2Fuploads%2FL9Xkoze4laaWMOXdWhi3%2Fm2206_cm_bootstrap.pptx?alt=media&token=2c3f47ca-7aef-48aa-800b-8702f147811b) downloadDownload[arrow-up-right-from-squareOpen](https://3554184702-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTtJnVXa0NgEzStTXndrZ%2Fuploads%2FL9Xkoze4laaWMOXdWhi3%2Fm2206_cm_bootstrap.pptx?alt=media&token=2c3f47ca-7aef-48aa-800b-8702f147811b) ### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-2#exercices-1) Exercices file-pdf 2MB [m2206\_tp\_bootstrap.pdf](https://3554184702-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTtJnVXa0NgEzStTXndrZ%2Fuploads%2F5av2qqk2yDNUTJYWoE5P%2Fm2206_tp_bootstrap.pdf?alt=media&token=56f7ad5e-ef08-4ff8-accb-d44f82b5346a) PDF downloadDownload[arrow-up-right-from-squareOpen](https://3554184702-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTtJnVXa0NgEzStTXndrZ%2Fuploads%2F5av2qqk2yDNUTJYWoE5P%2Fm2206_tp_bootstrap.pdf?alt=media&token=56f7ad5e-ef08-4ff8-accb-d44f82b5346a) ### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-2#structure-de-base-avec-boostrap) Structure de base avec boostrap [PreviousSéance 1chevron-left](https://cours.davidannebicque.fr/lp-miot/seance-1) [NextCorrigé partiel séance 2chevron-right](https://cours.davidannebicque.fr/lp-miot/corrige-partiel-seance-2) Last updated 3 years ago * [Cours sur le CSS](https://cours.davidannebicque.fr/lp-miot/seance-2#cours-sur-le-css) * [Exercices](https://cours.davidannebicque.fr/lp-miot/seance-2#exercices) * [Bootstrap](https://cours.davidannebicque.fr/lp-miot/seance-2#bootstrap) * [Exercices](https://cours.davidannebicque.fr/lp-miot/seance-2#exercices-1) * [Structure de base avec boostrap](https://cours.davidannebicque.fr/lp-miot/seance-2#structure-de-base-avec-boostrap) Copy Hello, world!

Hello, world!

--- # Séance 1 | Accessibilité (S1) | MMI Nouméa [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#les-tableaux) Les tableaux --------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#les-balises) Les balises * `table` * Définition du tableau en lui même, contiendra l'ensemble des balises suivantes * [https://www.w3schools.com/html/html\_tables.asparrow-up-right](https://www.w3schools.com/html/html_tables.asp) * `tr` (table row) * Déclaration d'une nouvelle ligne * `td` (table data) * Déclaration d'une cellule de contenu, toujours dans un tr * `th` (table heading) * Déclaration d'une cellule d'en-tête (de ligne ou de colonne), toujours dans un tr) * `thead` * Bloc contenant une en-tête d'un tableau, contient ensuite des lignes et des cellules * `tbody` * Bloc contenant le corps d'un tableau, contient ensuite des lignes et des cellules * `tfoot` * Bloc contenant le pied de page d'un tableau, contient ensuite des lignes et des cellules * `caption` * La légende du tableau pour décrire son contenu * [https://www.w3schools.com/tags/tag\_caption.asparrow-up-right](https://www.w3schools.com/tags/tag_caption.asp) Les détails dans la documentation : [https://developer.mozilla.org/en-US/docs/Learn/HTML/Tables/Advancedarrow-up-right](https://developer.mozilla.org/en-US/docs/Learn/HTML/Tables/Advanced) ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#fusionner-des-cellules-ou-des-lignes) Fusionner des cellules ou des lignes #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#colspan) Colspan permet de fusionner des cellules sur plusieurs colonnes * `contenu` fusionnera 3 cellules en une seule colonne. * Exemple ![](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2F1283878026-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F66pWwTmIg5XgNOy9cbWG%252Fuploads%252FnCc3d7i82Ipa0gTpR0Dw%252Fcap1.png%3Falt%3Dmedia%26token%3D22c2b73f-cde0-4f08-8a68-b598f91e21d4&width=768&dpr=3&quality=100&sign=ac015cde&sv=2) Colspan #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#rowspan) Rowspan permet de fusionner des cellules sur plusieurs lignes * `contenu` fusionnera 4 cellules en une seule cellule occupant 4 lignes. * Exemple ![](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2F1283878026-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F66pWwTmIg5XgNOy9cbWG%252Fuploads%252FkmssfD4onnQxo2qq8ycF%252Fcap2.png%3Falt%3Dmedia%26token%3D36bd0c94-714b-4c8e-a5c9-4cdf69699d54&width=768&dpr=3&quality=100&sign=aa9e43a9&sv=2) rowspan ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#exemple) Exemple Le code HTML ci-dessous va produire sans CSS le résultat ci-dessous ![](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2F1283878026-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F66pWwTmIg5XgNOy9cbWG%252Fuploads%252FAlfhOiMKa1HlnPlyn0It%252Fcap3.png%3Falt%3Dmedia%26token%3D4d767706-1b01-452f-ada3-f63e2dc23f2c&width=768&dpr=3&quality=100&sign=83befd9c&sv=2) ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#linteret) L'intérêt Ce que dit l'accessibilité : [https://www.w3.org/WAI/tutorials/tables/arrow-up-right](https://www.w3.org/WAI/tutorials/tables/) ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#le-css) Le CSS Un tableau bien construit peut plus facilement être mis en forme, sans devoir ajouter des classes CSS partout. On peut directement mettre en forme les tr, td et th, mais aussi plus spécifiquement les tr, td et th qui sont dans le thead, le tfoot ou encore le tbody. On peut éventuellement coupler cela à une classe ou un id sur la table et différencier, facilement plusieurs tableaux ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#qualite-du-web) Qualité du Web [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fres.cloudinary.com%2Fopquast%2Fimage%2Fupload%2Fv1542709628%2Ffavicon.png&width=20&dpr=3&quality=100&sign=5b24347d&sv=2)Les cellules des tableaux de données sont reliées à leurs en-têtes.checklists.opquast.comchevron-right](https://checklists.opquast.com/fr/assurance-qualite-web/les-cellules-des-tableaux-de-donnees-sont-reliees-a-leurs-en-tetes) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fres.cloudinary.com%2Fopquast%2Fimage%2Fupload%2Fv1542709628%2Ffavicon.png&width=20&dpr=3&quality=100&sign=5b24347d&sv=2)Les titres des tableaux de données sont renseignés.checklists.opquast.comchevron-right](https://checklists.opquast.com/fr/assurance-qualite-web/les-titres-des-tableaux-de-donnees-sont-renseignes) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fres.cloudinary.com%2Fopquast%2Fimage%2Fupload%2Fv1542709628%2Ffavicon.png&width=20&dpr=3&quality=100&sign=5b24347d&sv=2)La linéarisation des tableaux utilisés pour la mise en page ne nuit pas à la compréhension des contenus.checklists.opquast.comchevron-right](https://checklists.opquast.com/fr/assurance-qualite-web/la-linearisation-des-tableaux-utilises-pour-la-mise-en-page-ne-nuit-pas-a-la-comprehension-des-contenus) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fres.cloudinary.com%2Fopquast%2Fimage%2Fupload%2Fv1542709628%2Ffavicon.png&width=20&dpr=3&quality=100&sign=5b24347d&sv=2)Les tableaux de données ne sont pas simulés à l'aide de texte mis en forme.checklists.opquast.comchevron-right](https://checklists.opquast.com/fr/assurance-qualite-web/les-tableaux-de-donnees-ne-sont-pas-simules-a-laide-de-texte-mis-en-forme) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fres.cloudinary.com%2Fopquast%2Fimage%2Fupload%2Fv1542709628%2Ffavicon.png&width=20&dpr=3&quality=100&sign=5b24347d&sv=2)Les tableaux de données ne sont pas remplacés par des images.checklists.opquast.comchevron-right](https://checklists.opquast.com/fr/assurance-qualite-web/les-tableaux-de-donnees-ne-sont-pas-remplaces-par-des-images) ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#exercices) Exercices Reproduire le tableau ci-dessous en utilisant les bonnes balises et en ajoutant le CSS nécessaire sans utiliser de class ou d'ID. ![](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2F1283878026-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F66pWwTmIg5XgNOy9cbWG%252Fuploads%252FIpO66Rn1DVaLIka1Zev4%252Fcap4.png%3Falt%3Dmedia%26token%3Dc6931449-9efa-4f6d-82d7-07d7418220cf&width=768&dpr=3&quality=100&sign=36cd214e&sv=2) Exemple à reproduire Rappel : L'ajout d'une feuille de style se fait avec la balise link dans le head de votre page html [PreviousIntroductionchevron-left](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction) [NextSéance 2chevron-right](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-2) Last updated 2 years ago * [Les tableaux](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#les-tableaux) * [Les balises](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#les-balises) * [Fusionner des cellules ou des lignes](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#fusionner-des-cellules-ou-des-lignes) * [Exemple](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#exemple) * [L'intérêt](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#linteret) * [Le CSS](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#le-css) * [Qualité du Web](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#qualite-du-web) * [Exercices](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1#exercices) Copy
A
B C
Copy
A B
C
Copy Document
Tableau des produits commandés
Code produit Prix Unitaire Quantité Prix Total
ABC123 12.23 € 1 12.23 €
CDE456 14.00 € 2 28.00 €
CDE786 10.00 € 4 40.00 €
CFG456 21.00 € 2 42.00 €
Total 122.23 €
Copy ... ... --- # Semestre 6 - Parcours en Alternance | Portfolio [hashtag](https://cours.davidannebicque.fr/portfolio/semestre-6-parcours-en-alternance#programme-national) Programme national ---------------------------------------------------------------------------------------------------------------------------------- Au semestre 6, la démarche portfolio permettra d'évaluer l'étudiant dans son processus d'acquisition des niveaux de compétences de la troisième année du B.U.T., et dans sa capacité à en faire la démonstration par la mobilisation d'éléments de preuve argumentés et sélectionnés. L'étudiant devra donc engager une posture réflexive et de distanciation critique en cohérence avec le parcours suivi et le degré de complexité des niveaux de compétences ciblés, tout en s'appuyant sur l'ensemble des mises en situation proposées dans le cadre des SAÉ de troisième année. [hashtag](https://cours.davidannebicque.fr/portfolio/semestre-6-parcours-en-alternance#projet-propose) Projet proposé -------------------------------------------------------------------------------------------------------------------------- En plus de compléter le portfolio avec les éléments de cette dernière année sur les deux compétences restantes (développer et entreprendre) vous transposerez ces éléments dans votre "book" (ou portfolio professionnel). ### [hashtag](https://cours.davidannebicque.fr/portfolio/semestre-6-parcours-en-alternance#consignes) Consignes Votre portfolio de compétences gardera une forme libre dans la continuité de ces deux premières années. La forme n'est pas évaluée et doit couvrir toutes les compétences. Votre portfolio professionnel ou book devra être ce que vous savez faire de mieux en développement web. Votre book devra être une démonstration technique présentant les éléments suivants : * Qui vous êtes * Vos compétences techniques, personnelles... * Vos réalisations avec un descriptif, une mise en avant des techniques, ... Le tout devra être proposé dans un site présentant une qualité technique d'un haut niveau (bac +3), respectant l'ensemble des aspects vus en BUT MMI (accessibilité, eco-conception, référencement, l'UX, ...). Vous pourrez trouver des exemples inspirants ici : [https://portfoliommi.fr/arrow-up-right](https://portfoliommi.fr/) ou encore ici [https://www.awwwards.com/websites/arrow-up-right](https://www.awwwards.com/websites/) circle-check Ce "book" pourra bien sûr être une partie de votre portfolio de compétences. ### [hashtag](https://cours.davidannebicque.fr/portfolio/semestre-6-parcours-en-alternance#planning) Planning 5 points d'étapes : * 15/04/2024 * 21/05/2024 * 27/05/2024 (point individuel) * 10/06/2024 * ~24/06/2024~ **Rendu 26/08/2024, par mail avec l'URL du portfolio (professionnel) et les éléments du (portfolio de compétences) sur Moodle et à votre tuteur d'alternance.** ### [hashtag](https://cours.davidannebicque.fr/portfolio/semestre-6-parcours-en-alternance#notation) Notation Le coefficient est égal à celui de l'alternance ! [PrécédentSemestre 4chevron-left](https://cours.davidannebicque.fr/portfolio/semestre-4) [SuivantRéférentiel de compétenceschevron-right](https://cours.davidannebicque.fr/portfolio/referentiel-de-competences) Mis à jour il y a 1 an * [Programme national](https://cours.davidannebicque.fr/portfolio/semestre-6-parcours-en-alternance#programme-national) * [Projet proposé](https://cours.davidannebicque.fr/portfolio/semestre-6-parcours-en-alternance#projet-propose) * [Consignes](https://cours.davidannebicque.fr/portfolio/semestre-6-parcours-en-alternance#consignes) * [Planning](https://cours.davidannebicque.fr/portfolio/semestre-6-parcours-en-alternance#planning) * [Notation](https://cours.davidannebicque.fr/portfolio/semestre-6-parcours-en-alternance#notation) --- # Séance 8 : Exercice complet | Vue.js LP Exo simple [PrécédentSéance 7 : Routeschevron-left](https://cours.davidannebicque.fr/vue.js/seance-9-composants-et-api) [SuivantSéance 9 : Exercice completchevron-right](https://cours.davidannebicque.fr/vue.js/seance-7-api-axios-fetch) Mis à jour il y a 2 ans --- # Séance 4 | Initiation à l'informatique [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#introduction) Introduction -------------------------------------------------------------------------------------------------------------- Python dispose de nombreuses librairies permettant de faire un peu plus qu'un simple script dans une console. Par exemple des interfaces graphiques (tkinter), des jeux (pygames), des graphiques (matplotlib), des calculs scientifiques (numpy), etc. Nous allons ici découvrir la librairie tkinter, qui permet de créer des interfaces graphiques et des animations. [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#environnement-de-tests) Environnement de tests ---------------------------------------------------------------------------------------------------------------------------------- Pour éviter de devoir installer tous les éléments sur les machines de l'unviersité, nous allons utiliser un environnement en ligne. Nous pouvons utiliser le site [repl.itarrow-up-right](https://replit.com/) , qui permet de créer des projets en ligne. [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#utilisation-de-tkinter) Utilisation de tkinter ---------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#initialisation) Initialisation Pour utiliser tkinter, il faut importer la librairie, et créer une fenêtre principale. Copier from tkinter import * Le documentation officielle se trouve ici : [https://tkdocs.com/tutorial/index.htmlarrow-up-right](https://tkdocs.com/tutorial/index.html) ### [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#fenetre) Fenetre Il faut ensuite créer une fenetre : Il est possible de personnaliser la fenêtre, par exemple en lui donnant un titre : L'affichage de la fenêtre se fait avec la fonction `mainloop` : Le code minimale pour afficher une fenetre sera donc : ### [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#zone-de-dessin) Zone de dessin Une fenetre est ensuite une zone qui peut contenir des boutons, des textes, ... Il faut le préciser et les positionner. Nous allons créer une zone "Canvas" (qui permet de dessiner) : La fonction Canvas contient les paramètres suivants : * fenetre : la fenêtre dans laquelle le canvas doit être affiché * width : la largeur du canvas * height : la hauteur du canvas * bg : la couleur de fond du canvas La syntaxe avec le `xxx=valeur` permet de préciser le nom des paramètres, ce qui permet de les mettre dans l'ordre que l'on veut. `pack` permet de placer le canvas dans la fenêtre. ### [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#dessiner-des-formes) Dessiner des formes Il est possible de dessiner des formes sur le canvas : La fonction `create_line` permet de dessiner une ligne. Les paramètres sont les coordonnées des points de départ et d'arrivée. Le point de départ se trouve toujours en haut à gauche de la fenêtre. Toutes les options de create\_line sont [iciarrow-up-right](https://tkdocs.com/shipman/create_line.html) . Fair une ligne sur plusieurs lignes : Il est possible de dessiner d'autres formes, comme des rectangles : La fonction `create_rectangle` permet de dessiner un rectangle. Les paramètres sont les coordonnées des points de départ et d'arrivée, et la couleur de remplissage. Il est possible de dessiner des cercles : La fonction `create_oval` permet de dessiner un cercle. Les paramètres sont les coordonnées des points de départ et d'arrivée, la couleur de contour et la largeur du contour. Il est possible de dessiner du texte : La fonction `create_text` permet de dessiner du texte. Les paramètres sont les coordonnées du point de départ et le texte à afficher. ### [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#deplacer-des-formes) Déplacer des formes Il est possible de déplacer des formes : La fonction `move` permet de déplacer un objet. Les paramètres sont l'objet à déplacer, et les coordonnées du déplacement. On peut récupérer les coordonnées d'un objet : La fonction `coords` permet de récupérer les coordonnées d'un objet. Les paramètres sont l'objet à déplacer. Les coordonnées sont retournées sous forme d'une liste. Les éléments de la liste sont les coordonnées des points de départ et d'arrivée. [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercices) Exercices -------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercice-1) Exercice 1 Créez une fenêtre avec un canvas de 500x500, et dessinez un rectangle bleu de 50x50 à 100x100. ### [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercice-2) Exercice 2 Créez une fenêtre avec un canvas de 500x500, et dessinez un cercle rouge de 50x50 à 100x100. [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#notion-de-fonctions) Notion de fonctions ---------------------------------------------------------------------------------------------------------------------------- Pour la suite nous allons avoir besoin de créer des fonctions. Une fonction est une suite d'instructions que l'on peut appeler plusieurs fois. Une fonction se crée avec le mot clé `def` : L'utilisation de cette fonction se fait de la manière suivante : Il est possible de passer des paramètres à une fonction : L'utilisation de ses fonctions se fait de la manière suivante : Il est possible de retourner une valeur : L'utilisation de ses fonctions se fait de la manière suivante : Ce concept est très utilisé en programmation et permet d'éviter de recopier du code et d'avoir une approche modulaire. ### [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercice-1-sur-les-fonctions) Exercice 1 sur les fonctions Ecrire une fonction qui prend en paramètre un nombre, et qui **affiche** le carré de ce nombre. Appeler cette fonction avec 3 nombres. ### [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercice-2-sur-les-fonctions) Exercice 2 sur les fonctions Ecrire une fonction qui prend en paramètre un nombre, et qui **retourne** la somme des nombres de 1 à ce nombre. Appeler cette fonction avec 3 nombres et afficher les résultats. [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#animation) Animation -------------------------------------------------------------------------------------------------------- Une animation consiste à faire bouger des objets sur l'écran. Pour cela, il faut raffraichir l'écran régulièrement avec la fonction `update`. ### [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercice-3) Exercice 3 Faire déplacer un carré ou une boule de la droite vers la gauche au milieu de l'écran. Pour raffraichir l'écran, il faut utiliser la fonction `update` : Pour executer une opération toutes les xx milisecondes : Il faut ensuite créer une fonction qui déplace l'objet, et qui appelle la fonction `after` pour se rappeler elle-même. [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#gestion-des-evenements-claviers) Gestion des événements claviers ---------------------------------------------------------------------------------------------------------------------------------------------------- La librairie tkinter permet de gérer les événements claviers, c'est à dire détecter quand une touche est pressée et laquelle. Pour chaque touche il est ensuite possible de définir une action. Pour récupérer une touche pressée, il faut utiliser la fonction `bind` : La fonction `bind` permet de lier un événement à une fonction. Les paramètres sont l'événement à lier, et la fonction à appeler. `""` est l'événement qui correspond à une touche pressée. Par exemple `""` correspond à la touche flèche gauche. Vous trouverez la liste des événements [iciarrow-up-right](https://tkinterexamples.com/events/keyboard/) . ### [hashtag](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercice-4) Exercice 4 Faire déplacer un carré en utilisant les touches flèches droite et gauche. [PrécédentCorrections S4chevron-left](https://cours.davidannebicque.fr/passerelle/corrections-s4) [SuivantSéance 5chevron-right](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance5) Mis à jour il y a 1 an * [Introduction](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#introduction) * [Environnement de tests](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#environnement-de-tests) * [Utilisation de tkinter](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#utilisation-de-tkinter) * [Initialisation](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#initialisation) * [Fenetre](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#fenetre) * [Zone de dessin](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#zone-de-dessin) * [Dessiner des formes](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#dessiner-des-formes) * [Déplacer des formes](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#deplacer-des-formes) * [Exercices](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercices) * [Exercice 1](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercice-1) * [Exercice 2](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercice-2) * [Notion de fonctions](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#notion-de-fonctions) * [Exercice 1 sur les fonctions](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercice-1-sur-les-fonctions) * [Exercice 2 sur les fonctions](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercice-2-sur-les-fonctions) * [Animation](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#animation) * [Exercice 3](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercice-3) * [Gestion des événements claviers](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#gestion-des-evenements-claviers) * [Exercice 4](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4#exercice-4) Copier fenetre = tk.Tk() Copier fenetre.title("Ma fenêtre") Copier fenetre.mainloop() Copier import tkinter as tk fenetre = tk.Tk() fenetre.title("Ma fenêtre") fenetre.mainloop() Copier largeur = 500 hauteur = 500 canvas = tk.Canvas(fenetre, width=largeur, height=hauteur, bg='white') canvas.pack() Copier canvas.create_line(0, 0, 200, 100) Copier canvas.create_line(0, 0, 200, 100, 300, 200, 400, 300) Copier canvas.create_rectangle(50, 25, 150, 75, fill="blue") Copier canvas.create_oval(10, 10, 100, 100, outline="red", width=2) Copier canvas.create_text(100, 100, text="Bonjour") Copier canvas.move(objet, 5, 0) Copier positions = canvas.coords(objet) Copier def ma_fonction(): print("Bonjour") Copier ma_fonction() Copier def ma_fonction(nom): print("Bonjour", nom) Copier ma_fonction("toto") Copier def ma_fonction(nom): return "Bonjour " + nom Copier message = ma_fonction("toto") print(message) Copier import tkinter as tk fenetre = tk.Tk() fenetre.title("Ma fenêtre") largeur = 500 hauteur = 500 canvas = tk.Canvas(fenetre, width=largeur, height=hauteur, bg='white') canvas.pack() balle = canvas.create_oval(10, 10, 50, 50, outline="red", width=2, fill="yellow") deplacement_y = 1 def deplacer_balle(): global deplacement_y canvas.move(balle, 0, deplacement_y) position = canvas.coords(balle) print(position) if position[3] >= hauteur or position[3] <=0: deplacement_y = -deplacement_y fenetre.after(10, deplacer_balle) deplacer_balle() fenetre.mainloop() Copier canvas.update() Copier fenetre.after(100, fonction) Copier fenetre.bind("", fonction) --- # CM Introductif | SAE 303 - Dataviz file-pdf 3MB [SAE303 - CM1.pdf](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FCmEoHMzidBmPbsggy1Mh%2FSAE303%20-%20CM1.pdf?alt=media&token=2220dccc-dc9b-4918-89a5-929fa4bd3da8) PDF downloadTélécharger[arrow-up-right-from-squareOuvrir](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FCmEoHMzidBmPbsggy1Mh%2FSAE303%20-%20CM1.pdf?alt=media&token=2220dccc-dc9b-4918-89a5-929fa4bd3da8) Introduction [PrécédentChoix du sujetchevron-left](https://cours.davidannebicque.fr/sae-303-dataviz/choix-du-sujet) [SuivantOrganisation et Livrablechevron-right](https://cours.davidannebicque.fr/sae-303-dataviz/organisation-et-livrable) Mis à jour il y a 1 an --- # Séance 1 | Initiation à l'informatique [hashtag](https://cours.davidannebicque.fr/passerelle/seance-1#exercice) Exercice -------------------------------------------------------------------------------------- * Demandez à l'utilisateur de saisir son nom et son prénom et afficher un message de bienvenue avec ces éléments * Demandez à l'utilisateur deux nombres, et afficher le résultat de la multiplication de ces deux nombres * Demandez à l'utilisateur deux nombres, et afficher s'ils sont égaux ou non [hashtag](https://cours.davidannebicque.fr/passerelle/seance-1#les-structures-de-controle) Les structures de contrôle -------------------------------------------------------------------------------------------------------------------------- Les structures de contrôle permettent de réaliser des traitements conditionnels ou répétitifs. [hashtag](https://cours.davidannebicque.fr/passerelle/seance-1#les-tests) Les tests ---------------------------------------------------------------------------------------- Un test est une structure de contrôle qui permet de prendre une décision. On peut comparer deux valeurs, et exécuter un bloc de code si la condition est vraie, et un autre bloc de code si la condition est fausse.​ Un premier exemple d'un test avec python : Copier age = 12 if age < 18: print("Cette personne est mineure") else: print("Cette personne est majeure") Vous noterez que l'instruction print() permet d'afficher quelque chose à l'écran. On peut aussi utiliser la fonction input() pour demander à l'utilisateur de saisir quelque chose. Et modifier le code ci-dessus pour demander l'âge à l'utilisateur. [hashtag](https://cours.davidannebicque.fr/passerelle/seance-1#exercices-avec-les-tests-le-chifoumi) Exercices avec les tests : Le Chifoumi ------------------------------------------------------------------------------------------------------------------------------------------------ Le chifoumi est un jeu de mains qui se joue à deux. Chaque joueur choisit entre pierre, feuille et ciseaux. Le gagnant est celui qui a choisi le plus fort des trois.​ * La pierre bat les ciseaux​ * La feuille bat la pierre​ * Les ciseaux battent la feuille​ * Si les deux joueurs choisissent le même élément, c'est un match nul​ Ecrire un programme qui demande à l'utilisateur de saisir son choix, et qui affiche le résultat du chifoumi. Le deuxième joueur est géré par l'ordinateur​ * On peut utiliser la fonction random.randint() pour générer un nombre aléatoire entre 0 et 2., et considérer que 0 = pierre, 1 = feuille, 2 = ciseaux.​ [hashtag](https://cours.davidannebicque.fr/passerelle/seance-1#la-boucle-pour) La boucle "pour" ---------------------------------------------------------------------------------------------------- Une boucle est une structure de contrôle qui permet de répéter un bloc de code plusieurs fois.​ La boucle "pour" est une boucle particulière. Elle permet de répéter un bloc de code un nombre de fois déterminé.​ * Elle peut se lire « pour i entre 1 et 10 » alors…​ * Tant que la variable i est comprise entre 1 et 10 la boucle exécute le traitement « vrai » et augmente automatiquement la boucle de 1 (ou d’un pas défini). Si i est plus grand que 10, alors la boucle s’arrête.​ [hashtag](https://cours.davidannebicque.fr/passerelle/seance-1#exercices-avec-la-boucle-pour) Exercices avec la boucle pour -------------------------------------------------------------------------------------------------------------------------------- Pour chaque exercice, écrire l'algorigramme, et coder en python 1. Ecrire une boucle qui affiche la table de multiplication par 7 pour les nombres de 1 à 10.​ 1. Ecrire une boucle qui affiche 100 fois « Je comprends l’algorithmie »​ 1. Ecrire un algorithme qui demande un nombre de départ, et qui calcule la somme des entiers jusqu’à ce nombre. Par exemple, si l’on entre 5, le programme doit calculer: 1+2+3+4+5=15​ [hashtag](https://cours.davidannebicque.fr/passerelle/seance-1#exercices) Exercices ---------------------------------------------------------------------------------------- Dans cette série d'exercice, tous les concepts vues peuvent être utilisées (tests, boucles). Pour chaque exercice faire l'algorigramme et écrire le programme en python. ### [hashtag](https://cours.davidannebicque.fr/passerelle/seance-1#exercice-1) Exercice 1 Un magasin de reprographie propose les tarifs suivants :​ * 0,15 cts si moins de 50 copies,​ * 0,10 cts au delà.​ Ecrire un programme qui affiche le prix en fonction du nombre de copie demandées.​ ### [hashtag](https://cours.davidannebicque.fr/passerelle/seance-1#exercice-2) Exercice 2 Ecrire un programme qui lance 100 fois une pièce. Calculer le nombre de fois où la pièce est pile et le nombre de fois ou elle est face​. En python, on pourrait utiliser une fonction qui donne aléatoirement un nombre. Et considérer que s'il est pair alors c'est pile, et sinon c'est face. ### [hashtag](https://cours.davidannebicque.fr/passerelle/seance-1#exercice-3) Exercice 3 Ecrire un programme qui demande deux valeurs (nombre 1 et nombre 2) et qui inverse les valeurs avant de les afficher.​ ### [hashtag](https://cours.davidannebicque.fr/passerelle/seance-1#exercice-4) Exercice 4 Ecrire un programme qui détermine le plus grand des deux nombres saisis.​ [PrécédentPythonchevron-left](https://cours.davidannebicque.fr/passerelle) [SuivantSéance 2chevron-right](https://cours.davidannebicque.fr/passerelle/seance-2) Mis à jour il y a 1 an * [Exercice](https://cours.davidannebicque.fr/passerelle/seance-1#exercice) * [Les structures de contrôle](https://cours.davidannebicque.fr/passerelle/seance-1#les-structures-de-controle) * [Les tests](https://cours.davidannebicque.fr/passerelle/seance-1#les-tests) * [Exercices avec les tests : Le Chifoumi](https://cours.davidannebicque.fr/passerelle/seance-1#exercices-avec-les-tests-le-chifoumi) * [La boucle "pour"](https://cours.davidannebicque.fr/passerelle/seance-1#la-boucle-pour) * [Exercices avec la boucle pour](https://cours.davidannebicque.fr/passerelle/seance-1#exercices-avec-la-boucle-pour) * [Exercices](https://cours.davidannebicque.fr/passerelle/seance-1#exercices) * [Exercice 1](https://cours.davidannebicque.fr/passerelle/seance-1#exercice-1) * [Exercice 2](https://cours.davidannebicque.fr/passerelle/seance-1#exercice-2) * [Exercice 3](https://cours.davidannebicque.fr/passerelle/seance-1#exercice-3) * [Exercice 4](https://cours.davidannebicque.fr/passerelle/seance-1#exercice-4) Copier age = int(input("Quel est votre âge ? ")) if age < 18: print("Cette personne est mineure") else: print("Cette personne est majeure") Copier import random choix = int(input("Choisissez entre pierre (0), feuille (1) ou ciseaux (2) : ")) choixOrdi = random.randint(0, 2) ... A vous de compléter le code Copier for i in range(1, 11): resultat = i * 7 print(str(i) + " x 7 = " + str(resultat)) Copier for i in range(100): print("Je comprends l'algorithmie") Copier total = 0 max = int(input("Saisissez un nombre")) for i in range(0, max + 1): total = total + i print("Le résultat est : "+str(total)) Copier pileouface= random.randint(0, 1) //soit 0, soit 1 Copier import random face = 0 pile = 0 ... Compléter le code --- # Séance D : Utilisation d'une base de données | Programmation Orientée Objet en PHP (B.U.T.) Nous allons exploiter les classes des [Séance 9 : Structure de base](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-a) , [Séance 10 : Génération de formulaire en POO](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-b) et [Séance 11 : Traitement des formulaires pour nos livres et auteurs](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-c) circle-info ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#notation) Notation Cet exercice sera à faire valider en fin de séance **obligatoirement**. * 0, rien n'est fait * 1, début d'exercice, mais non fonctionnel * 2, TP réalisé exactement comme demandé * 3, TP réalisé avec quelques améliorations/optimisations [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#sujet) Sujet ----------------------------------------------------------------------------------------------------------------------------- Rédiger les classes permettant la gestion des Artistes et des Livres dans une base de données. Nous allons passer par des "_manager_" (ce terme est en référence au langage de nombreux framework), qui vont faire l'intermédiaire entre la classe Artiste et la base de données. En d'autres termes, la classe Artiste, ne contiendra que ce qui permet de manipuler un Artiste (getters, setters, méthodes spécifiques), et la classe ArtisteManager permettra les accès à la base de données et retournera un ou plusieurs objet Artiste en fonction des requêtes. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#a-disposition) A disposition * Un fichier seance12.sql à intégrer dans votre base de données. seance12.sql Copier CREATE TABLE `Artiste` ( `id` int(11) NOT NULL, `nom` varchar(50) NOT NULL, `prenom` varchar(50) NOT NULL, `image` varchar(50) NOT NULL, `datenaissance` varchar(20) NOT NULL, `specialite` varchar(50) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; ALTER TABLE `Artiste` ADD PRIMARY KEY (`id`); ALTER TABLE `Artiste` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; * Un fichier seance12.php à tester triangle-exclamation **Vous devez faire valider le bon fonctionnement en fin de séance** ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#a-faire) A faire Nous allons concevoir le Manger pour la classe Artiste uniquement dans ce TP. Le schéma ci-dessous, illustre, sur un autre exemple, le principe que nous souhaitons mettre en place. ![](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/~gitbook/image?url=https%3A%2F%2F441730266-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-LjKrFSyq65TEN9dTgPU%252F-LpWtscZoTw54JhX0RL8%252F-LpWwIYpJRAIowX3IUYk%252Fprincipe.png%3Falt%3Dmedia%26token%3D3ea68917-9d2b-4218-be5c-20d46dd89b52&width=768&dpr=3&quality=100&sign=c0854996&sv=2) Principe de fonctionnement d'un Manager #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#la-classe-artistemanager) La classe ArtisteManager La classe ArtisteManager contiendra les méthodes suivantes : * `addArtiste(Artiste $artiste)` : L’argument de cette méthode est une instance de la classe Artiste. Elle génère une requête `‘INSERT INTO...’` et l’exécute. Elle permet l’ajout d'un Artiste dans la table. Cette méthode retourne le dernier id inséré ([lastInsertIdarrow-up-right](http://php.net/manual/fr/pdo.lastinsertid.php) ) * `getById($id)` : L’argument permet de sélectionner l’enregistrement que l’utilisateur de l’application souhaite modifier. Elle est donc appelée par l’application. Cette méthode retourne une instance de la classe Artiste dont les propriétés sont initialisées avec les valeurs de l'Artiste sélectionné. * `updateArtiste(Artiste $sh)` : L’argument de cette méthode est une instance de la classe Artiste. Elle génère une requête `‘UPDATE ...’` et l’exécute. Elle permet la modification de l’enregistrement concerné. * `getAll()` : Cette méthode construit un tableau contenant tous les Artiste de la table. Chaque élément du tableau est une instance de la classe Artiste dont les propriétés sont issues de chaque enregistrement de la table Artiste. * `afficheAll()` Cette méthode appelle la méthode `getAll()`. Elle génère un tableau HTML à partir du tableau d'Artiste issu de la fonction `getAll()`. Les propriétés de chaque Artiste sont issues des getters de la classe Artiste. Un lien hypertexte (dernière colonne du tableau) permettra d’appeler le formulaire de modification (`$_GET['id']`) La classe ArtisteManager contiendra une propriété privée qui est la connexion à la base de données. Cette connexion sera initialisée par le constructeur. circle-info [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#astuce) Astuce ------------------------------------------------------------------------------------------------------------------------------- Comme vous le constatez la classe ArtisteManager doit créer des objets Artiste. On pourrait facilement exploiter les Setters de chacune des propriétés pour remplir un objet Artiste en fonction des données issues d'une requête. Cela se fait très bien, si notre objet possède 2 ou 3 propriétés. Mais l'opération devient plus fastidieuse lorsque l'on a beaucoup de propriété. Pour palier à cela, on exploite souvent une méthode dite **d'hydratation** qui permet de remplir un objet en fonction d'un tableau associatif. En fait ce tableau comporte comme clé, le nom de la propriété que l'on souhaite initialiser, et comme valeur, la valeur issue de la base de données pr exemple. La méthode hydrate va essayer de construire les setters associés à chacune de ces clés. Et l'utiliser pour sauvegarder la valeur. Si de manière judicieuse les champs de la table sont nommés de la même manière que les propriétés, il devient assez simple de construire une méthode qui fait le lien entre la table et l'objet de manière générique. le code de l'hydratation pourrait ressembler au code ci-dessous: La boucle parcourt le tableau `$donnees`. Il s’agit d’un tableau associatif. Le nom de chaque enregistrement est le nom de chaque propriété du super héros `(id, nom, prenom, datenaissance, image, specialite)`. La variable `$method` est une chaîne de caractères correspondant à un setter. Si la méthode ainsi générée existe, elle est appelée : `$this->$method($value)`. L’intérêt de cette technique est de simplifier le code en le réduisant le nombre d’instructions. * Constructeur : est tout simplement un appel de la fonction Hydrate. * Update() est une méthode qui appelle la méthode hydrate pour mettre à jour un objet ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#la-classe-artiste-et-humain) La classe Artiste et Humain Avec cette nouvelle approche, il faut modifier la classe Artiste et la classe Humain. Il faut d'abord s'assurer d'avoir tous les setters pour les différentes propriétés. Ensuite, si vous étudiez le fichier seance12.php, vous devez remarquer que l'appel du constructeur d'Artiste est différent. Il n'utilise plus qu'un seul paramètre. Ce paramètre est un tableau associatif. Il est donc possible d'utiliser l'une des deux approches ci-dessous #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#sans-passer-par-la-methode-hydrate) Sans passer par la méthode hydrate Cette solution est rapide à mettre en place et n'implique pas forcément d'avoir tous les setters. Elle n'implique pas non plus de bien comprendre le concept d'hydratation. Chaque paramètre précédent est remplacé par son équivalent dans le tableau. circle-exclamation **Faites attentions aux dénominations ! Elles ne sont pas forcément identiques à votre code** #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#avec-la-methode-hydrate) Avec la méthode hydrate Cette solution utilise l'hydratation (**Il faut placer la méthode au bon endroit**), et implique d'avoir les setters pour toutes les propriétés (**n'oubliez pas les parents**). circle-info **Notez que cette méthode n'utilise plus l'appel à parent::\_\_construct(...), puisque l'hydrate passe par les setters.** ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#travail-a-faire) Travail à Faire * Ecrire la classe ArtisteManager * Modifier et adapter votre classe Artiste (faite une copie de la classe fonctionnelle) * Faire fonctionner la classe ArtisteManager avec le fichier [seance12.phparrow-up-right](https://app.gitbook.com/s/-LjKrFSyq65TEN9dTgPU/ancien-cas-pratique/tp8.php) ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#pour-aller-plus-loin) Pour Aller plus loin Comment pourriez vous gérer les Auteurs et les Dessinateurs ? [PrécédentSéance C : Traitement des formulaires pour nos livres et auteurschevron-left](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-c) [SuivantSéance E : Utilisation d'une base de données et des formulaireschevron-right](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-e) Mis à jour il y a 2 ans * [Sujet](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#sujet) * [A disposition](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#a-disposition) * [A faire](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#a-faire) * [La classe Artiste et Humain](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#la-classe-artiste-et-humain) * [Travail à Faire](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#travail-a-faire) * [Pour Aller plus loin](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/seance-d#pour-aller-plus-loin) seance12.php Copier Seance 12 - Manipulation de base de données

Manipulation de base de données et d'Artiste

'Conan Doyle', 'prenom' => 'Arthur', 'datenaissance' => '01/01/1800', 'specialite' => 'Auteur', 'image' => 'doyle.jpg')); $id = $am->addArtiste($artiste); echo '

Artiste ajouté avec l\'id numéro '.$id.'

'; $artiste2 = $am->getById($id); echo '

'.$artiste2->sePresente().'

'; ?>

Affichage de tous les artistes

afficheAll(); ?> Copier public function hydrate(array $donnees) { foreach ($donnees as $key => $value) { $method = 'set'.ucfirst($key); if (method_exists($this, $method)) { $this->$method($value); } } } Copier class Artiste { ... public function __construct($donnees) { parent::__construct($donnees['nom'], $donnees['prenom'], $donnees['datenaissance']) $this->image = $donnees['image']; $this->specialite = $donnees['specialite']; } ... } Copier class Artiste { ... public function __construct($donnees) { $this->hydrate($donnees); } ... } --- # Enquête | BUT INFO / C# / Embarqué Questionnaire Google Form à compléter [PreviousAstuces WPFchevron-left](https://cours.davidannebicque.fr/but-info/astuces-wpf) Last updated 2 years ago Was this helpful? Was this helpful? --- # JavaScript et LocalStorage | SAE 301 Comment afficher des données issues d'un tableau JavaScript en HTML Le début de votre fichier JavaScript ressemblera à ceci : Copier const data = { "products": [\ {\ "id": 1,\ "name": "T-shirt",\ "price": 10,\ "quantity": 1,\ "image": "https://picsum.photos/200/300?random=1"\ },\ {\ "id": 2,\ "name": "Pantalon",\ "price": 20,\ "quantity": 2,\ "image": "https://picsum.photos/200/300?random=2"\ },\ {\ "id": 3,\ "name": "Chaussures",\ "price": 30,\ "quantity": 1,\ "image": "https://picsum.photos/200/300?random=3"\ }\ ] } document.addEventListener('DOMContentLoaded', () => { //Le dom est chargé, votre code ici... }); Le plus pratique est de donner un id à votre tableau de votre panier, et de récupérer cet élément dans votre code JavaScript. Cette ligne devrait se trouver dans la partie tbody de votre tableau. On peut donc ajouter cette partie tbody à notre tableau (s'il n'en contient pas encore) Ensuite, vous pouvez parcourir les produits (products) des données json, et ajouter une ligne par produit. Il vous reste ensuite à définir le code HTML qui va être généré pour chaque ligne de produit, et l'ajouter à votre tableau. ### [hashtag](https://cours.davidannebicque.fr/sae-301/tutos/javascript-et-localstorage#travail-a-faire) Travail à faire * Afficher les données dans votre page panier, à partir des données json. * Ajoutez toutes les parties nécessaires (total, TVA, ...) * Alimentez ces zones (en JavaScript) avec les éléments de votre panier (calculé le coût total du panier, la TVA (20%), ...) * Ajoutez tous les boutons et interactions nécessaires (supprimer un produit, modifier la quantité, ...) * Prenez le temps d'intégrer correctement l'ensemble des éléments et d'ajouter une barre de menu. * Pensez à l'ergonomie, l'accessibilité et l'UX de votre page circle-info Pensez au formatage des données (dates, ...). Les fonctions JavaScript peuvent être très pratiques pour éviter de réécrire la même chose... ### [hashtag](https://cours.davidannebicque.fr/sae-301/tutos/javascript-et-localstorage#stockage-dans-le-localstorage) Stockage dans le localStorage Actuellement, si vous actualisez votre page, tout est perdu. Ce n'est pas très pratique... Une solution simple consiste à stocker les informations dans le `localStorage` ou `sessionStorage`. Lire ici pour plus de détails : [https://fr.javascript.info/localstoragearrow-up-right](https://fr.javascript.info/localstorage) * Les principales caractéristiques de `localStorage` sont les suivantes : * Partagé entre tous les onglets et fenêtres d’une même origine. * Les données n’expirent pas. Il reste après le redémarrage du navigateur et même le redémarrage du système d’exploitation. * L’objet `sessionStorage` est beaucoup moins utilisé que `localStorage`. * Les propriétés et les méthodes sont les mêmes, mais c’est beaucoup plus limité : * Le `sessionStorage` n’existe que dans l’onglet actuel du navigateur. * Un autre onglet avec la même page aura un stockage différent. * Mais il est partagé entre les iframes du même onglet (en supposant qu’ils proviennent de la même origine). * Les données survivent à l’actualisation de la page, mais pas à la fermeture/ouverture de l’onglet. Nous allons utiliser `localStorage` pour stocker les produits du panier. Les méthodes principales sont : * `setItem(key, value)` – stocke la paire clé/valeur. * `getItem(key)` – récupère la valeur par clé. * `removeItem(key)` – supprime la clé avec sa valeur. * `clear()` – supprime tout. * `key(index)` – récupère la clé sur une position donnée. * `length` – le nombre d’éléments stockés. [PrécédentOrganisationchevron-left](https://cours.davidannebicque.fr/sae-301/cm-lancement/organisation) Mis à jour il y a 2 ans * [Travail à faire](https://cours.davidannebicque.fr/sae-301/tutos/javascript-et-localstorage#travail-a-faire) * [Stockage dans le localStorage](https://cours.davidannebicque.fr/sae-301/tutos/javascript-et-localstorage#stockage-dans-le-localstorage) Copier const panier = document.getElementById('panier'); Copier const tbody = document.createElement('tbody') panier.appendChild(tbody) Copier data.products.forEach(product => { //Ajouter une ligne au tableau }); Copier const tr = document.createElement('tr'); tr.innerHTML = ` ...vos données pour un produit ... `; tbody.appendChild(tr); --- # Séance 4 : Router et navigation | Vue.js BUT [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#objectifs) 🎯 Objectifs --------------------------------------------------------------------------------------------------------------------- * Maîtriser navigation avancée avec Vue Router. * Gérer routes dynamiques et sécurisées. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#partie-theorique) 📖 Partie théorique ----------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#routes-dynamiques-et-imbriquees) Routes dynamiques et imbriquées #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#parametres-de-route) Paramètres de route Les **routes dynamiques** capturent des valeurs variables dans l'URL (`:id`, `:slug`). Copy // Configuration des routes const routes = [\ { path: '/task/:id', component: TaskDetail, props: true },\ { path: '/user/:userId/task/:taskId', component: TaskDetail },\ { path: '/profile/:userId?', component: UserProfile }, // Optionnel\ ] **Accès aux paramètres :** Copy // Dans le composant #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#routes-imbriquees) Routes imbriquées Organisation hiérarchique avec composants parent/enfant. **Navigation programmatique :** ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#gestion-des-erreurs) Gestion des erreurs Pages d'erreur et redirections pour une meilleure expérience utilisateur. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#page-404-personnalisee) Page 404 personnalisée #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#configuration-des-routes-derreur) Configuration des routes d'erreur #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#gestion-des-erreurs-de-navigation) Gestion des erreurs de navigation #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#routes-et-meta) Routes et meta Il est possible d'ajouter des **métadonnées** aux routes pour diverses utilisations (authentification, titres, etc.). Usage dans les composants : Le meta peut aussi être utilisé pour des guards ou pour changer le titre de la page dynamiquement. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#guards) Guards * Fonctions de contrôle d’accès (`beforeEach`, meta). * Protection des routes sensibles (authentification). #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#concepts-cles) Concepts clés : * **Global Guards** : s’appliquent à toutes les navigations. * **Per-Route Guards** : spécifiques à certaines routes. * **In-Component Guards** : définis dans les composants. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#guard-global) Guard global : #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#guard-par-route) Guard par route : #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#guard-dans-composant) Guard dans composant : #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#mise-a-jour-du-title-de-la-page) Mise à jour du title de la page ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#lazy-loading-chargement-differe) Lazy loading (Chargement différé) Chargement des composants uniquement quand nécessaire pour optimiser les performances. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#import-dynamique) Import dynamique #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#composant-de-chargement) Composant de chargement [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#travaux-pratiques) 📝 Travaux pratiques ------------------------------------------------------------------------------------------------------------------------------------- * Ajouter route `/task/:id`. * Mettre en place un guard d’accès (auth simulée). * Créer une page 404 personnalisée. [PreviousSéance 3 : Communication avec APIchevron-left](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api) [NextSéance 5 : State avancé (Pinia)chevron-right](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia) Last updated 4 months ago * [🎯 Objectifs](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#objectifs) * [📖 Partie théorique](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#partie-theorique) * [Routes dynamiques et imbriquées](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#routes-dynamiques-et-imbriquees) * [Gestion des erreurs](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#gestion-des-erreurs) * [Guards](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#guards) * [Lazy loading (Chargement différé)](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#lazy-loading-chargement-differe) * [📝 Travaux pratiques](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation#travaux-pratiques) Copy // Structure imbriquée const routes = [\ {\ path: '/dashboard',\ component: DashboardLayout,\ children: [\ { path: '', component: DashboardHome }, // /dashboard\ { path: 'tasks', component: TaskList }, // /dashboard/tasks\ { path: 'tasks/:id', component: TaskDetail }, // /dashboard/tasks/123\ ]\ }\ ] Copy Copy const router = useRouter() // Différentes façons de naviguer router.push('/tasks/123') router.push({ name: 'TaskDetail', params: { id: 123 } }) router.push({ path: '/tasks', query: { status: 'pending' } }) Copy Copy const routes = [\ // Autres routes...\ \ // Redirections\ { path: '/old-url', redirect: '/new-url' },\ \ // Redirection conditionnelle\ { \ path: '/user/:id', \ redirect: to => `/profile/${to.params.id}` \ },\ \ // Page 404 (toujours en dernier)\ { \ path: '/:pathMatch(.*)*', \ component: NotFound \ }\ ] Copy // Intercepter les erreurs de chargement router.onError((error) => { if (error.message.includes('Loading chunk')) { // Erreur de réseau, recharger la page window.location.reload() } }) Copy const routes = [\ {\ path: '/dashboard',\ component: DashboardLayout,\ meta: { requiresAuth: true, title: 'Tableau de bord' },\ children: [\ { path: 'analytics', component: AnalyticsPage, meta: { title: 'Analyse' } },\ { path: 'settings', component: SettingsPage, meta: { title: 'Paramètres' } }\ ]\ }\ ] Copy Copy router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !isAuthenticated()) { next('/login') } else { next() } }) Copy const routes = [\ {\ path: '/admin',\ component: AdminPanel,\ meta: { requiresAuth: true, role: 'admin' },\ beforeEnter: (to, from, next) => {\ // Vérification spécifique à cette route\ if (!user.isAdmin) {\ next('/forbidden')\ } else {\ next()\ }\ }\ }\ ] Copy Copy router.afterEach((to) => { if (to.meta.title) { document.title = to.meta.title } }) Copy // ❌ Import classique - chargé immédiatement import Home from '@/views/Home.vue' // ✅ Import dynamique - chargé à la demande const routes = [\ {\ path: '/home',\ component: () => import('@/views/Home.vue')\ }\ ] Copy --- # Séance I : Manager et BDD | Programmation Orientée Objet en PHP (B.U.T.) [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#exercice) Exercice ----------------------------------------------------------------------------------------------------------------------------------------- seanceI.php Copier Fichier de test de la séance I-J

Fichier de test de la séance I-J

Création de quelques auteurs

sePresente(); $auteur = new Auteur('Corbeyran', 'Eric', '14/12/1964', 'corbeyran.jpg'); $auteurRoman = new Auteur('Conan Doyle', 'Arthur', '22/05/1859', 'doyle.jpg'); echo '#################################'; echo $auteur->sePresente(); echo '#################################'; echo $auteurRoman->sePresente() ?>

Création de livres

addAuteur($auteurRoman); echo '#################################'; echo $livre->afficheLivre(); $livre->supprimerAuteur($auteurRoman); echo '#################################'; echo $livre->afficheLivre(); ?>

Création d'une BD

addAuteur($auteurRoman); $bd->addDessinateur($dessinateur) echo '#################################'; echo $bd->afficheLivre(); $bd->supprimerAuteur($auteurRoman); echo '#################################'; echo $bd->afficheLivre(); $auteurBd = new Auteur('', 'Morris', '01/12/1923', 'morris.jpg'); $bd->addAuteur($auteurBd); echo $bd->afficheLivre(); ?> [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#les-classes) Les classes ----------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#classe-abstraite-humain) Classe Abstraite Humain Un Humain est un objet possédant un nom, un prénom et une date de naissance. Un Humain est capable de se présenter. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#classe-artiste) Classe Artiste. Un `Artiste` est un `Humain` qui possède une spécialité. Une spécialité est un champ texte. Un artiste possède également une image (vous pouvez récupérer ces images directement sur Wikipedia par exemple). Nous considérerons dans un premier temps deux classes héritant d'`Artiste`: Un `Auteur` (spécialité écrire) et un `Dessinateur` (spécialité dessiner). **Implémentez cette classe ainsi que les classes filles nécessaires.** ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#livre) Livre ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#classe-abstraire-livre) Classe Abstraire Livre On va définir une classe abstraite `Livre` qui contiendra les propriétés _**protected**_ suivantes : * `titre` : chaîne de caractères, on s'assurera que le titre est formaté avec une majuscule sur chaque mot. * `nbPage` : entier. * `auteurs` : tableau d'Auteurs. Un auteur est un Artiste dont la spécialité est d'écrire. **Implémentez cette classe et les méthodes nécessaires** ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#classe-enfant-roman-et-bandedessinee) Classe enfant : Roman et BandeDessinée On définira deux classes enfants de cette classe Livre. * Une classe `Roman` ne possède pas de spécificité. * Une classe `BandeDessinee` qui possède en plus des auteurs une liste de dessinateurs **Implémentez ces deux classes et les méthodes associés** **Testez et implémentez les méthodes utilisées dans le fichier seanceI.php** [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#gestion-de-la-bdd) Gestion de la BDD ----------------------------------------------------------------------------------------------------------------------------------------------------------- Rédiger les classes permettant la gestion des Artistes et des Livres dans une base de données. Nous allons passer par des "_manager_" (ce terme est en référence au langage de nombreux framework), qui vont faire l'intermédiaire entre la classe Artiste et la base de données. En d'autres termes, la classe Artiste, ne contiendra que ce qui permet de manipuler un Artiste (getters, setters, méthodes spécifiques), et la classe ArtisteManager permettra les accès à la base de données et retournera un ou plusieurs objet Artiste en fonction des requêtes. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#a-disposition) A disposition * Un code SQL de base de données * Un fichier seancei2.php à tester ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#a-faire) A faire Nous allons concevoir le manager pour la classe Artiste uniquement dans ce TP. Le schéma ci-dessous, illustre, sur un autre exemple, le principe que nous souhaitons mettre en place. ![](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/~gitbook/image?url=https%3A%2F%2F441730266-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-LjKrFSyq65TEN9dTgPU%252F-LpWtscZoTw54JhX0RL8%252F-LpWwIYpJRAIowX3IUYk%252Fprincipe.png%3Falt%3Dmedia%26token%3D3ea68917-9d2b-4218-be5c-20d46dd89b52&width=768&dpr=3&quality=100&sign=c0854996&sv=2) Principe de fonctionnement d'un Manager #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#la-classe-artistemanager) La classe ArtisteManager La classe ArtisteManager contiendra les méthodes suivantes : * `addArtiste(Artiste $artiste)` : L’argument de cette méthode est une instance de la classe Artiste. Elle génère une requête `‘INSERT INTO...’` et l’exécute. Elle permet l’ajout d'un Artiste dans la table. Cette méthode retourne le dernier id inséré ([lastInsertIdarrow-up-right](http://php.net/manual/fr/pdo.lastinsertid.php) ) * `getById($id)` : L’argument permet de sélectionner l’enregistrement que l’utilisateur de l’application souhaite modifier. Elle est donc appelée par l’application. Cette méthode retourne une instance de la classe Artiste dont les propriétés sont initialisées avec les valeurs de l'Artiste sélectionné. * `updateArtiste(Artiste $sh)` : L’argument de cette méthode est une instance de la classe Artiste. Elle génère une requête `‘UPDATE ...’` et l’exécute. Elle permet la modification de l’enregistrement concerné. * `getAll()` : Cette méthode construit un tableau contenant tous les Artiste de la table. Chaque élément du tableau est une instance de la classe Artiste dont les propriétés sont issues de chaque enregistrement de la table Artiste. * `afficheAll()` Cette méthode appelle la méthode `getAll()`. Elle génère un tableau HTML à partir du tableau d'Artiste issu de la fonction `getAll()`. Les propriétés de chaque Artiste sont issues des getters de la classe Artiste. Un lien hypertexte (dernière colonne du tableau) permettra d’appeler le formulaire de modification (`$_GET['id']`) La classe ArtisteManager contiendra une propriété privée qui est la connexion à la base de données. Cette connexion sera initialisée par le constructeur. circle-info [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#astuce) Astuce ------------------------------------------------------------------------------------------------------------------------------------- Comme vous le constatez la classe ArtisteManager doit créer des objets Artiste. On pourrait facilement exploiter les Setters de chacune des propriétés pour remplir un objet Artiste en fonction des données issues d'une requête. Cela se fait très bien, si notre objet possède 2 ou 3 propriétés. Mais l'opération devient plus fastidieuse lorsque l'on a beaucoup de propriété. Pour palier à cela, on exploite souvent une méthode dite **d'hydratation** qui permet de remplir un objet en fonction d'un tableau associatif. En fait ce tableau comporte comme clé, le nom de la propriété que l'on souhaite initialiser, et comme valeur, la valeur issue de la base de données pr exemple. La méthode hydrate va essayer de construire les setters associés à chacune de ces clés. Et l'utiliser pour sauvegarder la valeur. Si de manière judicieuse les champs de la table sont nommés de la même manière que les propriétés, il devient assez simple de construire une méthode qui fait le lien entre la table et l'objet de manière générique. le code de l'hydratation pourrait ressembler au code ci-dessous: La boucle parcourt le tableau `$donnees`. Il s’agit d’un tableau associatif. Le nom de chaque enregistrement est le nom de chaque propriété du super héros `(id, nom, prenom, datenaissance, image, specialite)`. La variable `$method` est une chaîne de caractères correspondant à un setter. Si la méthode ainsi générée existe, elle est appelée : `$this->$method($value)`. L’intérêt de cette technique est de simplifier le code en le réduisant le nombre d’instructions. * Constructeur : est tout simplement un appel de la fonction Hydrate. * Update() est une méthode qui appelle la méthode hydrate pour mettre à jour un objet ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#la-classe-artiste-et-humain) La classe Artiste et Humain Avec cette nouvelle approche, il faut modifier la classe Artiste et la classe Humain. Il faut d'abord s'assurer d'avoir tous les setters pour les différentes propriétés. Ensuite, si vous étudiez le fichier seance12.php, vous devez remarquer que l'appel du constructeur d'Artiste est différent. Il n'utilise plus qu'un seul paramètre. Ce paramètre est un tableau associatif. Il est donc possible d'utiliser l'une des deux approches ci-dessous #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#sans-passer-par-la-methode-hydrate) Sans passer par la méthode hydrate Cette solution est rapide à mettre en place et n'implique pas forcément d'avoir tous les setters. Elle n'implique pas non plus de bien comprendre le concept d'hydratation. Chaque paramètre précédent est remplacé par son équivalent dans le tableau. circle-exclamation **Faites attentions aux dénominations ! Elles ne sont pas forcément identiques à votre code** #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#avec-la-methode-hydrate) Avec la méthode hydrate Cette solution utilise l'hydratation (**Il faut placer la méthode au bon endroit**), et implique d'avoir les setters pour toutes les propriétés (**n'oubliez pas les parents**). circle-info **Notez que cette méthode n'utilise plus l'appel à parent::\_\_construct(...), puisque l'hydrate passe par les setters.** ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#travail-a-faire) Travail à Faire * Ecrire la classe ArtisteManager * Modifier et adapter votre classe Artiste (faite une copie de la classe fonctionnelle) * Faire fonctionner la classe ArtisteManager avec le fichier [seancek.phparrow-up-right](https://app.gitbook.com/s/-LjKrFSyq65TEN9dTgPU/ancien-cas-pratique/tp8.php) ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#pour-aller-plus-loin) Pour Aller plus loin Comment pourriez vous gérer les Auteurs et les Dessinateurs ? [PrécédentSéance H : Des objets dans des classeschevron-left](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-h-des-objets-dans-des-classes) [SuivantTP Notéchevron-right](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-16) Mis à jour il y a 3 mois * [Exercice](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#exercice) * [Les classes](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#les-classes) * [Classe Abstraite Humain](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#classe-abstraite-humain) * [Classe Artiste.](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#classe-artiste) * [Livre](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#livre) * [Classe Abstraire Livre](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#classe-abstraire-livre) * [Classe enfant : Roman et BandeDessinée](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#classe-enfant-roman-et-bandedessinee) * [Gestion de la BDD](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#gestion-de-la-bdd) * [A disposition](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#a-disposition) * [A faire](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#a-faire) * [La classe Artiste et Humain](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#la-classe-artiste-et-humain) * [Travail à Faire](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#travail-a-faire) * [Pour Aller plus loin](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-i-manager-et-bdd#pour-aller-plus-loin) seance12.sql Copier CREATE TABLE `Artiste` ( `id` int(11) NOT NULL, `nom` varchar(50) NOT NULL, `prenom` varchar(50) NOT NULL, `image` varchar(50) NOT NULL, `datenaissance` varchar(20) NOT NULL, `specialite` varchar(50) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; ALTER TABLE `Artiste` ADD PRIMARY KEY (`id`); ALTER TABLE `Artiste` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; seancei2.php Copier Seance 12 - Manipulation de base de données

Manipulation de base de données et d'Artiste

'Conan Doyle', 'prenom' => 'Arthur', 'datenaissance' => '01/01/1800', 'specialite' => 'Auteur', 'image' => 'doyle.jpg')); $id = $am->addArtiste($artiste); echo '

Artiste ajouté avec l\'id numéro '.$id.'

'; $artiste2 = $am->getById($id); echo '

'.$artiste2->sePresente().'

'; ?>

Affichage de tous les artistes

afficheAll(); ?> Copier public function hydrate(array $donnees) { foreach ($donnees as $key => $value) { $method = 'set'.ucfirst($key); if (method_exists($this, $method)) { $this->$method($value); } } } Copier class Artiste { ... public function __construct($donnees) { parent::__construct($donnees['nom'], $donnees['prenom'], $donnees['datenaissance']) $this->image = $donnees['image']; $this->specialite = $donnees['specialite']; } ... } Copier class Artiste { ... public function __construct($donnees) { $this->hydrate($donnees); } ... } --- # Séance 5 | Développement Front (S3) | MMI Nouméa Sur cette séance vous allez finaliser le fonctionnement de vos deux premières pages, et veillez à l'accessibilité et l'UX de ces deux pages. [PreviousSéance 4chevron-left](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-4) [NextSéance 6chevron-right](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6) Last updated 2 years ago --- # Séance G : Synthèse des concepts | Programmation Orientée Objet en PHP (B.U.T.) [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#objectifs) OBJECTIFS : ------------------------------------------------------------------------------------------------------------------------------ * Construire des classes mettant en œuvre les concepts d’interface, d’héritage et d’encapsulation. * Être capable d’écrire seul(e) du code PHP en POO [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#travail-demande) TRAVAIL DEMANDE ---------------------------------------------------------------------------------------------------------------------------------------- Codez en PHP les classes suivantes chaque classe sera dans un fichier dédié**.** \*\* Ci-dessous le fichier seance8.php \*\* seance8.php Copier '; // Nombre d'individus echo Etudiant::getNombreIndividus(); // Instanciation $individu1=new Etudiant('Durand','Paul','homme','1234567890A','GEA',16); // Paul Durand se présente echo $individu1->sePresente().'
'; // Paul Durand travaille 35 heures echo $individu1->travailler(35); // Paul Durand prend 2 jours de congés echo $individu1->reposer(2); // Paul Durand a travaille 30 heures echo $individu1->travailler(30); // Paul Durand prend 2 jours de congés echo $individu1->reposer(1); // Déclaration du salaire de Paul Durand echo $individu1->declareSalaire(); // Remise à zéro du salaire de Paul Durand $individu1->RAZrevenu(); // Vérification du salaire de Paul Durand après Remise à zéro echo $individu1->declareSalaire(); // Affichage de l'âge de Paul Durand echo $individu1->getAge(); // Modification de l'âge de Paul Durand $individu1->setAge(17); // Affichage de l'âge de Paul Durand echo $individu1->getAge(); // Paul Durand a travaille 10 heures echo $individu1->travailler(10); // fin de cette partie echo '---------------fin etape 1--------------------------------
'; /*========================================== Une autre instance de la classe Etudiant ========================================== */ echo '-------------Début etape 2--------------------------------
'; // Instanciation $individu2=new Etudiant('Fraichi','Sarah','femme','9012345678B','TC',18); // Sarah Fraichi se présente echo $individu2->sePresente().'
'; // Sarah Fraichi travaille 20 heures echo $individu2->travailler(20); // Déclaration du salaire de Sarah Fraichi echo $individu2->declareSalaire(); // Nombre d'individus echo Etudiant::getNombreIndividus(); // Fin de cette partie echo '---------------fin etape 2--------------------------------
'; /*========================================== Une instance de la classe Individu ========================================== */ echo '-------------Début etape 3--------------------------------
'; //$individu3=new individu('Palenor','Hubert','homme'); // Hubert Palenor se présente //$individu3->sePresente().'
'; // Fin de cette partie echo '---------------fin etape 3--------------------------------
'; /*========================================== Une instance de la classe Etudiant_MMI ========================================== */ echo '-------------Début etape 4--------------------------------
'; // Instanciation $individu4=new Etudiant_MMI('Hontoi','Franck','homme','6789012345C',18,'Web avancé'); // Franck Hontoi se présente echo $individu4->sePresente().'
'; // Franck Hontoi travaille 35 heures echo $individu4->travailler(35); // Franck Hontoi déclare ses revenus echo $individu4->declareSalaire(); // Franck Hontoi obtient sa note d'examen echo $individu4->evaluer(11); // Quelle est l'option de Franck Hontoi echo $individu4->quelleOption(); // Franck Hontoi change d'option echo $individu4->ChangerOption('Conception graphique'); // Quelle est l'option de Franck Hontoi echo $individu4->quelleOption(); // Nombre d'individus echo Etudiant::getNombreIndividus(); unset($individu4); echo Etudiant::getNombreIndividus(); echo '---------------fin etape 4--------------------------------
'; ?> Vous pouvez bien sûr commenter des éléments dans le fichier seance8.php pour effectuer vos tests. A la fin de la séance, l'ensemble des appels du fichier doivent fonctionner. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#classe-individu-et-interface-ihumain) Classe Individu et interface iHumain La classe Individu est une classe abstraite qui implémente l’interface iHumain qui définit les méthodes * `travailler($nombreheures)` * `reposer($nombrejours)` * `sePresente()` #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#les-attributs) Les attributs Les 5 propriétés **protected** de la classe Individu sont : * `$nom` : valeur alphanumérique * `$prenom` : valeur alphanumérique * `$genre` : valeur alphanumérique (homme ou femme, autre) * `$revenu` : revenu en euros, valeur numérique calculée valant 0 par défaut * `$conges` : nombre de congés, valeur numérique calculée valant 0 par défaut #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#les-methodes) Les méthodes * La méthode `travailler($nombreheures)` permet de calculer le revenu cumulé d’un individu sur la base horaire de 9.5 euros. A chaque appel de cette méthode, on cumulera le salaire calculé au salaire précédent. * La méthode `reposer($nombrejours)` permet de cumuler le nombre de jours de congés pris. (A chaque appel de la méthode, on cumule les congés) * La méthode `sePresente()` retourne un texte avec le nom et le prénom de l’individu * La méthode `RAZrevenu()` permettra de remettre à zéro le revenu. * La méthode `RAZconges()` permettra de remettre à zéro le nombre de jours de congés * La méthode `declareSalaire()` retournera un texte indiquant le nom, le prénom et le revenu de l’individus Codez cette classe ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#classe-etudiant) Classe Etudiant La classe Etudiant est une classe qui hérite de la classe Individu #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#les-attributs-1) Les attributs Les propriétés **protected** de la classe Etudiant sont : * `$numetudiant` : 10 chiffres et une lettre * `$age` : valeur numérique * `$formation` : valeur alphanumérique * `$resultat` : valeur alphanumérique calculée lors de l’évaluation (méthode évaluer) qui prendra deux valeurs possibles ‘reçu(e)’ ou ‘ajourné(e)’ Cette classe possède également un attribut propre à la classe `$nbetudiants` qui permettra de connaître le nombre d’instances créées. #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#les-methodes-1) Les méthodes * La méthode `travailler($nombreheures)` permet de calculer le revenu cumulé d’un(e) étudiant(e) sur la base horaire de 9.5 euros. Mais ce tarif horaire sera minoré de 20% si l’étudiant(e) est âgé(e) de moins de 18 ans. A chaque appel de cette méthode, on cumulera le salaire calculé au salaire précédent. * La méthode `evaluer($noteExamen)` retournera un texte précisant le nom, le prénom et l’indication reçu(e) ou ajourné(e) à l’examen selon la note. Pour être reçu, il faut avoir la moyenne. * D’autres méthodes sont à créer : observez le code du fichier seance8.php (ci-dessus) pour les repérer. Codez cette classe ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#classe-etudiant_mmi) Classe Etudiant\_MMI La classe Etudiant\_mmi hérite de la classe Etudiant. Il n’est pas possible d’hériter de la classe Etudiant\_mmi. #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#les-attributs-2) Les attributs Une propriété **privé** : `$option`. Valeur alphanumérique indiquant le titre de l’option choisie par un(e) étudiant(e) au semestre 4 #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#les-methodes-2) Les méthodes * La méthode `quelleOption()` retourne un texte indiquant le nom, le prénom et l’option choisie * La méthode `ChangerOption($option)` permet de modifier l’option de l’étudiant * La méthode `sePresente` reprend la méthode initiale et complète le texte par ‘ et je suis en MMI’. Codez cette classe [PrécédentCM2 : Point d'étapechevron-left](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-h-point-detape) [SuivantSéance H : Des objets dans des classeschevron-right](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-h-des-objets-dans-des-classes) Mis à jour il y a 4 mois * [OBJECTIFS :](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#objectifs) * [TRAVAIL DEMANDE](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#travail-demande) * [Classe Individu et interface iHumain](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#classe-individu-et-interface-ihumain) * [Classe Etudiant](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#classe-etudiant) * [Classe Etudiant\_MMI](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-7#classe-etudiant_mmi) --- # Séance 9 : Exercice complet | Vue.js LP [PrécédentSéance 8 : Exercice completchevron-left](https://cours.davidannebicque.fr/vue.js/seance-6-api-axios-fetch) [SuivantSéance 10 : TP Notéchevron-right](https://cours.davidannebicque.fr/vue.js/seance-10-tp-note) Mis à jour il y a 2 ans --- # Séance 3 | Accessibilité numérique [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-3#balises-aria) Balises ARIA ----------------------------------------------------------------------------------------------------------- Point sur les attributs ARIA ( [Documentation sur la MDNarrow-up-right](https://developer.mozilla.org/fr/docs/Accessibilit%C3%A9/ARIA) , [Documentation par Orange,arrow-up-right](https://a11y-guidelines.orange.com/web/label-ledby-describedby.html) [La documentation officielle du W3Carrow-up-right](https://w3c.github.io/using-aria/) ) file-pdf 1MB [aria.pdf](https://472912620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MSl4NYgztlnU5U8_iKk%2F-MU3mOaJyHwgnvuz3WTx%2F-MU3mfrEBFe3id0DcGTe%2Faria.pdf?alt=media&token=3f5c95b1-b00f-48d1-96e0-7a0c635b41e8) PDF downloadDownload[arrow-up-right-from-squareOpen](https://472912620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MSl4NYgztlnU5U8_iKk%2F-MU3mOaJyHwgnvuz3WTx%2F-MU3mfrEBFe3id0DcGTe%2Faria.pdf?alt=media&token=3f5c95b1-b00f-48d1-96e0-7a0c635b41e8) Introduction aux attributs ARIA [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-3#grille-rgaa-pour-le-site-promo) Grille RGAA pour le site promo ----------------------------------------------------------------------------------------------------------------------------------------------- Afin d'évaluer la progression de votre travail sur l'accessibilité, vous aller établir une grille d'analyse du point de départ. Comme normalement vous êtes deux sur un projet : Un étudiant fait une grille RGAA : [https://www.numerique.gouv.fr/publications/rgaa-accessibilite/kit/#contenuwww.numerique.gouv.frchevron-right](https://www.numerique.gouv.fr/publications/rgaa-accessibilite/kit/#contenu) Un étudiant un checklist Opquast [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fres.cloudinary.com%2Fopquast%2Fimage%2Fupload%2Fv1542709628%2Ffavicon.png&width=20&dpr=3&quality=100&sign=5b24347d&sv=2)Checklist Opquast - assurance qualité webchecklists.opquast.comchevron-right](https://checklists.opquast.com/fr/assurance-qualite-web/) circle-info A la fin de la séance, vous déposerez les grilles d'analyse (2 par projet), sur le salon correspondant à votre projet. **N'oubliez pas d'indiquer l'URL du site et des pages testées dans le document.** [PreviousSéance 2chevron-left](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2) [NextSéance 4chevron-right](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4) Last updated 4 years ago Was this helpful? * [Balises ARIA](https://cours.davidannebicque.fr/accessibilite-numerique/seance-3#balises-aria) * [Grille RGAA pour le site promo](https://cours.davidannebicque.fr/accessibilite-numerique/seance-3#grille-rgaa-pour-le-site-promo) Was this helpful? --- # Séance 8 | Développement Front (S3) | MMI Nouméa [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-8#notation) Notation ------------------------------------------------------------------------------------------------------------- * 12 points : Panier fonctionnel, catalogue, formulaires (selon les consignes des séances) * 4 points : Ajout de 2 fonctionnalités "UX" sur panier et/ou catalogue * 4 points : qualité de l'intégration du tunnel (catalogue -> panier -> Inscription + paiement -> confirmation) + accessibilité (images, tableaux, formulaires, contrastes, ...) [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-8#rendu) Rendu ------------------------------------------------------------------------------------------------------- * Le 9 mai, rendu d'un ZIP sur discord en PV [PreviousSéance 7chevron-left](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-7) Last updated 2 years ago * [Notation](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-8#notation) * [Rendu](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-8#rendu) --- # Séance 5 | Accessibilité numérique Voici une check liste, non exhaustive, et qui ne se substitue pas aux RGAA et autres documents officielles pour vous permettre d'évaluer votre site promo de projet S4. * Taux de contraste > 4.5 * Aucune erreur (error) dans la validation W3C * Pas d'erreurs JS dans la console * Optimisation des médias. Redimensionnez les images à leur taille d'affichage. Proposer plusieurs formats si vous proposez un "zoom". ([https://www.accelerationdigitale.be/fr/inspiration/site-internet/taille-optimale-des-images-sur-votre-site-webarrow-up-right](https://www.accelerationdigitale.be/fr/inspiration/site-internet/taille-optimale-des-images-sur-votre-site-web) ). Attention au poids. * On identifie qui vous êtes sur le site (marque, coordonnées, contact, ...) * Les méta-données sont correctement définies. * La langue est définie. * Toutes les mentions légales sont présentes (RGPD, CGU, CGV, mentions légales, gestion des cookies, ...) * Les alternatives aux images sont définies lorsque cela est nécessaire * Je peux agrandir la taille de police sans "casser" le site * Le site reste "lisible" sans CSS * Le prix du produit est lisible et sans ambiguïté * Les formulaires sont adaptés aux données attendus. Ils sont lisibles. Une aide est apportée si nécessaire. * Les liens sont identifiables, dotés d'un titre * L'usage des icônes est lisible et compréhensible de tous * Si la page est longue, le site dispose d'un bouton pour remonter en haut, la navigation principale reste présente * Aucune information n'est véhiculée par la couleur * Les typographies sont lisibles, les textes correctement mis en forme de taille suffisante. * Le panier est correctement formaté avec toutes les mentions obligatoires. * Le panier contient toutes les informations obligatoires (designation du produit (avec un lien), prix unitaire, quantité, prix total), le total du panier HT et TTC, le montant des taxes, les frais de livraisons (même s'ils sont gratuits). * Les formulaires sont correctement construits, avec un label, une taille de champs adaptée, un texte d'aide si nécessaire, des messages d'erreurs pertinents si besoin. [PreviousSéance 4chevron-left](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4) [NextSéance 2 - S1 - BUT MMIchevron-right](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi) Last updated 3 years ago Was this helpful? Was this helpful? --- # Exercices S3 - FC | Programmation Orientée Objet en PHP (B.U.T.) [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#sujet-de-projet-combat-des-creatures) **Sujet de Projet : Combat des Créatures** ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- **Objectif** : Implémenter un mini-jeu où des créatures s’affrontent en utilisant les concepts de programmation orientée objet (POO) en PHP. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#contexte) **Contexte** Dans ce jeu, chaque créature a des caractéristiques (force, santé, défense) et des compétences spécifiques. Votre mission est d’écrire les classes nécessaires pour permettre : 1. La création de différents types de créatures. 2. L’attaque entre les créatures. Un fichier de test (jeu1.php) vous est fourni pour valider votre implémentation. [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#premiere-partie) Première partie ---------------------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-1-classe-creature) **Étape 1 : Classe** `**Creature**` Créez une classe `Creature` représentant une créature générique. Cette classe doit : * Être **abstraite**. * Avoir les attributs : * `nom` (chaîne de caractères) : Le nom de la créature. * `sante` (entier) : Les points de santé de la créature. * `force` (entier) : La puissance des attaques de la créature. * `defense` (entier) : La capacité de la créature à réduire les dégâts reçus. * Avoir les méthodes : * `attaquer(Creature $adversaire)` : Inflige des dégâts à l'adversaire. Les dégâts sont calculés comme `force - défense` (minimum 0). * `recevoirDegats(int $degats)` : Réduit les points de santé en fonction des dégâts reçus. * `estEnVie()` : Retourne `true` si les points de santé sont supérieurs à 0, sinon `false`. * `crier()` (abstraite) : Retourne une phrase propre à chaque créature. * * * ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-2-creatures-specifiques) **Étape 2 : Créatures Spécifiques** Créez les classes suivantes qui héritent de `Creature` : 1. **Guerrier** * Santé : 150. * Force : 20. * Défense : 10. * Cri : "Pour la gloire !" 2. **Mage** * Santé : 100. * Force : 30. * Défense : 5. * Modifiez la méthode `attaquer` pour infliger des dégâts supplémentaires (+10). * Cri : "Abracadabra !" 3. **Archer** * Santé : 120. * Force : 15. * Défense : 8. * Ajoutez une capacité d’**esquive** (30 % de chances de ne pas recevoir de dégâts). * Cri : "Prêt à viser !" ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-3-creation-de-larene) Etape 3 : Création de l'Arène L'Arène est une classe qui contient une méthode lancerCombat, qui va prendre deux créatures (quelque soit leur type) et déclencher un combat * lancerCombat(Creature $c1, Creature $c2) La créature c1, si elle est en vie, commence le combat, puis c2, si elle est en vie continue le combat. Le combat s'arrête lorsque l'une des deux créatures n'est plus en vie. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#le-fichier-de-test) Le fichier de test ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#quelques-explications-sur-lautoloader) Quelques explications sur l'Autoloader Vous constaterez que nous n'avons pas de "require" pour chacune des classes dans le fichier `seanceIJ.php`, pour autant vos classes seront accessibles. On utilise le mécanisme d'autoload de PHP qui permet d'éviter d'avoir des requires quand on utilise la POO. Cela s'avère très pratique quand nous avons beaucoup de classes à gérer. Le code ci-dessus assure le lien avec tous les fichiers nécessaires. En fait, à chaque fois que vous aller utiliser une classe (new Classe ou Classe::...), PHP, va essayer de trouver un fichier qui se nomme Classe.php et automatiquement en faire un require pour l'intégrer. Contrainte de cette solution, vous devez avoir un fichier par classe, et votre fichier doit se nommer exactement comme votre classe. Mais nous avons vu en cours, que cette contrainte est en fait une bonne pratique. [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#deuxieme-partie) Deuxième partie ---------------------------------------------------------------------------------------------------------------------------------------------------------- Dans cette deuxième partie nous allons gérer un plateau permettant de positionner les Créatures et de déterminer lesquelles doivent s'affronter. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-1-classe-coordonnee) **Étape 1 : Classe** `**Coordonnee**` Créez une classe `Coordonnee` pour représenter les positions des créatures sur le plateau. * Attributs : * `x` (entier) : La position horizontale (colonne). * `y` (entier) : La position verticale (ligne). * Méthodes : * `getX()` et `getY()` : Retourne la valeur de `x` ou `y`. * `setX(int $x)` et `setY(int $y)` : Définit une nouvelle valeur pour `x` ou `y`. * `estAdjacente(Coordonnee $autre)` : Vérifie si la position actuelle est adjacente à une autre coordonnée (cases voisines). * `__toString()` : Retourne les coordonnées sous forme de chaîne, par exemple `(2, 3)`. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-2-classe-plateau) **Étape 2 : Classe** `**Plateau**` Créez une classe `Plateau` pour gérer la disposition des créatures sur une grille. * Attributs : * `largeur` (entier) : Le nombre de colonnes. * `hauteur` (entier) : Le nombre de lignes. * `cases` (tableau bidimensionnel) : Contient les créatures positionnées sur le plateau ou `null` si la case est vide. * Méthodes : * `__construct(int $largeur, int $hauteur)` : Initialise le plateau vide. * `placerCreature(Creature $creature, Coordonnee $position)` : Place une créature à une position donnée * `deplacerCreature(Creature $creature, Coordonnee $nouvellePosition)` : Déplace une créature d'une position à une autre. * `estCaseLibre(Coordonnee $position)` : Retourne `true` si la case est libre, sinon `false`. * `getCase(Coordonnee $position)` : retourne la Creature qui est sur la case correspondante. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-3-integration-dans-la-classe-creature) **Étape 3 : Intégration dans la Classe** `**Creature**` Ajoutez un attribut `position` (instance de `Coordonnee`) dans la classe `Creature`. * Méthodes : * `setPosition(Coordonnee $position)` : Définit la position de la créature. * `getPosition()` : Retourne la position actuelle de la créature. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-4-classe-affichage-fourni) **Étape 4 : Classe** `**Affichage**` **(Fourni)** Une classe `Affichage` vous est donnée pour représenter visuellement le plateau. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#le-fichier-de-test-1) Le fichier de test ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-4-mise-a-jour-du-plateau) Etape 4 : Mise à jour du plateau Modifier votre code pour que le perdant du combat disparaisse du plateau [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#troisieme-partie) Troisième partie ------------------------------------------------------------------------------------------------------------------------------------------------------------ Actuellement, le combat est déclenché manuelle, et les créatures sont placées par le code. On va adapter le code afin que les créatures se déplacent aléatoirement.Si deux créatures sont sur des cases adjacentes alors le combat se lance. Modifier les fichiers nécessaires et dupliquer le fichier seance8.php pour en faire un fichier seance9.php avec ces règles. Imaginez les méthodes à ajouter, a priori, dans la classe Plateau. Afficher le plateau entre chaque calcul de déplacement. [PrécédentSéance Kchevron-left](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/seance-k) [SuivantDescription généralechevron-right](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/ancien-cas-pratique/description-generale) Mis à jour il y a 1 an * [Sujet de Projet : Combat des Créatures](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#sujet-de-projet-combat-des-creatures) * [Contexte](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#contexte) * [Première partie](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#premiere-partie) * [Étape 1 : Classe Creature](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-1-classe-creature) * [Étape 2 : Créatures Spécifiques](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-2-creatures-specifiques) * [Etape 3 : Création de l'Arène](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-3-creation-de-larene) * [Le fichier de test](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#le-fichier-de-test) * [Quelques explications sur l'Autoloader](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#quelques-explications-sur-lautoloader) * [Deuxième partie](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#deuxieme-partie) * [Étape 1 : Classe Coordonnee](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-1-classe-coordonnee) * [Étape 2 : Classe Plateau](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-2-classe-plateau) * [Étape 3 : Intégration dans la Classe Creature](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-3-integration-dans-la-classe-creature) * [Étape 4 : Classe Affichage (Fourni)](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-4-classe-affichage-fourni) * [Le fichier de test](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#le-fichier-de-test-1) * [Etape 4 : Mise à jour du plateau](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#etape-4-mise-a-jour-du-plateau) * [Troisième partie](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/les-anciennes-seances/exercices-s3-fc#troisieme-partie) jeu1.php Copier Document === Création des Créatures ==="; $guerrier = new Guerrier("Thor"); $mage = new Mage("Merlin"); $archer = new Archer("Robin"); echo $guerrier->crier() . "\n"; echo $mage->crier() . "\n"; echo $archer->crier() . "\n"; echo "

=== Premier Combat ===

"; $arene = new Arene(); $arene->lancerCombat($guerrier, $mage); echo "

=== Deuxième combat ===

"; $guerrier2 = new Guerrier("Gimli"); $arene2 = new Arene(); $arene2->lancerCombat($guerrier2, $archer); ?> Copier spl_autoload_register(function ($class_name) { require $class_name . '.php'; }); Affichage.php Copier table { border-collapse: collapse; } td { width: 50px; height: 50px; text-align: center; border: 1px solid #000; } "; echo ""; for ($y = 0; $y < $plateau->getHauteur(); $y++) { echo ""; for ($x = 0; $x < $plateau->getLargeur(); $x++) { $creature = $plateau->getCase(new Coordonnee($x, $y)); echo ""; } echo ""; } echo "
"; if ($creature) { echo $creature->getNom(); } else { echo " "; } echo "
"; } } jeu2.php Copier Document === Création des Créatures ==="; $guerrier = new Guerrier("Thor"); $mage = new Mage("Merlin"); $archer = new Archer("Robin"); echo $guerrier->crier() . "\n"; echo $mage->crier() . "\n"; echo $archer->crier() . "\n"; echo "

=== Placement sur le plateau ===

"; $plateau = new Plateau(5, 5); $plateau->placerCreature($guerrier, new Coordonnee(1, 1)); $plateau->placerCreature($mage, new Coordonnee(3, 1)); Affichage::afficherPlateau($plateau); echo "

=== Déplacement du guérrier sur le plateau ===

"; $plateau->deplacerCreature($guerrier, new Coordonnee(2, 1)); Affichage::afficherPlateau($plateau); echo "

=== Premier Combat ===

"; $arene = new Arene(); $arene->lancerCombat($guerrier, $mage); Affichage::afficherPlateau($plateau); //echo "

=== Deuxième combat ===

"; //$guerrier2 = new Guerrier("Gimli"); //$arene2 = new Arene(); //$arene2->lancerCombat($guerrier2, $archer); ?> --- # Choix du sujet | SAE 303 - Dataviz Cette année ce module se fait en lien avec "ODU - Open Data University" de l'association [Latitudesarrow-up-right](https://www.latitudes.cc/) . Les sources de données et des éléments de contexte sont sur ce site : [https://www.opendatauniversity.org/arrow-up-right](https://www.opendatauniversity.org/) circle-info Vous pouvez compléter ces données par d'autres sources (en les citant) si nécessaire. ### [hashtag](https://cours.davidannebicque.fr/sae-303-dataviz/choix-du-sujet#objectifs-de-la-sae) Objectifs de la SAE * Choisir une source de données parmi celles disponibles * Imaginer une analyse des données et le message auquel répondre * Proposer un site web qui sera composé des élements suivants (obligatoires) : * Site web accessible, éco-conçu (pas de CMS) * Une infographie réalisée avec le logiciel de votre choix * Des graphiques développés par vos soins * Avec des interactions * Des graphiques issus d'outils en ligne * Une mise en page (travaillée et adaptée) et des textes explicatifs * Une ergonomie et une mise en page agréable, appuyant votre message. triangle-exclamation Il y a suffisamment de sources et de manière d'interpréter les données ou de questions à poser que touts vos productions devront être différentes. ### [hashtag](https://cours.davidannebicque.fr/sae-303-dataviz/choix-du-sujet#quelques-exemples) Quelques exemples ![](https://cours.davidannebicque.fr/sae-303-dataviz/~gitbook/image?url=https%3A%2F%2Fbusiness.trustedshops.fr%2Fhubfs%2FAdd%2520a%2520little%2520bit%2520of%2520body%2520text-png.png&width=768&dpr=3&quality=100&sign=f0c9919f&sv=2) [https://business.trustedshops.fr/blog/dataviz-pour-votre-e-commercearrow-up-right](https://business.trustedshops.fr/blog/dataviz-pour-votre-e-commerce) ![](https://cours.davidannebicque.fr/sae-303-dataviz/~gitbook/image?url=https%3A%2F%2Finkidata.fr%2Fwp-content%2Fuploads%2F2016%2F12%2Flettre-fi.jpg&width=768&dpr=3&quality=100&sign=d605ba91&sv=2) [https://inkidata.fr/actu-infographies-de-synthese-datavisualisation-resultats/arrow-up-right](https://inkidata.fr/actu-infographies-de-synthese-datavisualisation-resultats/) [![Logo](https://cours.davidannebicque.fr/sae-303-dataviz/~gitbook/image?url=https%3A%2F%2Fwww.huwise.com%2Fwp-content%2Fuploads%2F2025%2F12%2Fcropped-Favicon_512x512-192x192.png&width=20&dpr=3&quality=100&sign=67812d07&sv=2)Quelles data visualisations choisir ? Dashboards, datastories, mapsHuwisechevron-right](https://www.opendatasoft.com/fr/blog/dashboards-datastories-maps-quelles-data-visualisations-choisir/) Dataviz intéractives [PrécédentIntroductionchevron-left](https://cours.davidannebicque.fr/sae-303-dataviz) [SuivantCM Introductifchevron-right](https://cours.davidannebicque.fr/sae-303-dataviz/cm-introductif) Mis à jour il y a 1 an * [Objectifs de la SAE](https://cours.davidannebicque.fr/sae-303-dataviz/choix-du-sujet#objectifs-de-la-sae) * [Quelques exemples](https://cours.davidannebicque.fr/sae-303-dataviz/choix-du-sujet#quelques-exemples) --- # Astuces WPF | BUT INFO / C# / Embarqué [hashtag](https://cours.davidannebicque.fr/but-info/astuces-wpf#timer) Timer --------------------------------------------------------------------------------- Copy private void Button_Click(object sender, RoutedEventArgs e) { System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); dispatcherTimer.Interval = TimeSpan.FromMilliseconds(20);; dispatcherTimer.Start(); } Copy private void dispatcherTimer_Tick(object sender, EventArgs e) { this.runCycleApi(); } [PreviousScénarios à intégrerchevron-left](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer) [NextEnquêtechevron-right](https://cours.davidannebicque.fr/but-info/enquete) Last updated 6 years ago Was this helpful? Was this helpful? --- # Séance 7 | Développement Front (S3) | MMI Nouméa [PreviousSéance 6chevron-left](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6) [NextSéance 8chevron-right](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-8) Last updated 2 years ago --- # Corrections S4 | Initiation à l'informatique ### [hashtag](https://cours.davidannebicque.fr/passerelle/corrections-s4#seance-1-corrections) **Séance 1 – Corrections** #### [hashtag](https://cours.davidannebicque.fr/passerelle/corrections-s4#tracer-un-carre) 🔹 Tracer un carré Copier pythonCopierModifierimport turtle t = turtle.Turtle() for i in range(4): t.forward(100) t.left(90) * * * #### [hashtag](https://cours.davidannebicque.fr/passerelle/corrections-s4#maison-carre--toit) 🔹 Maison (carré + toit) Copier import turtle t = turtle.Turtle() # carré for i in range(4): t.forward(100) t.left(90) # triangle (toit) t.left(90) t.forward(100) t.right(90) t.left(45) t.forward(70) # hypoténuse t.right(90) t.forward(70) * * * #### [hashtag](https://cours.davidannebicque.fr/passerelle/corrections-s4#initiales-simples-ex.-ab) 🔹 Initiales simples (ex. : "AB") * * * ### [hashtag](https://cours.davidannebicque.fr/passerelle/corrections-s4#seance-2-corrections) ✅ **Séance 2 – Corrections** #### [hashtag](https://cours.davidannebicque.fr/passerelle/corrections-s4#polygone-regulier-a-n-cotes) 🔹 Polygone régulier à `n` côtés * * * #### [hashtag](https://cours.davidannebicque.fr/passerelle/corrections-s4#rosace-avec-triangles) 🔹 Rosace avec triangles * * * ### [hashtag](https://cours.davidannebicque.fr/passerelle/corrections-s4#seance-3-fonctions) ✅ **Séance 3 – Fonctions** #### [hashtag](https://cours.davidannebicque.fr/passerelle/corrections-s4#fonction-etoile) 🔹 Fonction étoile * * * #### [hashtag](https://cours.davidannebicque.fr/passerelle/corrections-s4#plusieurs-etoiles-alignees) 🔹 Plusieurs étoiles alignées * * * ### [hashtag](https://cours.davidannebicque.fr/passerelle/corrections-s4#seance-4-aleatoire-et-feu-dartifice) ✅ **Séance 4 – Aléatoire et feu d’artifice** #### [hashtag](https://cours.davidannebicque.fr/passerelle/corrections-s4#feu-dartifice) 🔹 Feu d’artifice * * * #### [hashtag](https://cours.davidannebicque.fr/passerelle/corrections-s4#pluie-de-carres) 🔹 Pluie de carrés [PrécédentSéance 4 : Turtlechevron-left](https://cours.davidannebicque.fr/passerelle/seance-4-turtle) [SuivantSéance 4chevron-right](https://cours.davidannebicque.fr/passerelle/anciens-supports/seance4) Mis à jour il y a 9 mois * [Séance 1 – Corrections](https://cours.davidannebicque.fr/passerelle/corrections-s4#seance-1-corrections) * [✅ Séance 2 – Corrections](https://cours.davidannebicque.fr/passerelle/corrections-s4#seance-2-corrections) * [✅ Séance 3 – Fonctions](https://cours.davidannebicque.fr/passerelle/corrections-s4#seance-3-fonctions) * [✅ Séance 4 – Aléatoire et feu d’artifice](https://cours.davidannebicque.fr/passerelle/corrections-s4#seance-4-aleatoire-et-feu-dartifice) Copier import turtle t = turtle.Turtle() # Lettre A t.penup() t.goto(-100, 0) t.pendown() t.setheading(90) t.forward(50) t.right(90) t.forward(20) t.right(90) t.forward(25) t.right(90) t.forward(20) # Lettre B t.penup() t.goto(0, 0) t.setheading(90) t.pendown() t.forward(50) t.right(90) t.circle(-10, 180) # boucle haute t.right(180) t.circle(-10, 180) # boucle basse Copier import turtle t = turtle.Turtle() n = int(input("Combien de côtés ? ")) angle = 360 / n for i in range(n): t.forward(100) t.left(angle) Copier import turtle t = turtle.Turtle() for i in range(36): for j in range(3): t.forward(50) t.left(120) t.left(10) Copier import turtle t = turtle.Turtle() def etoile(taille, couleur): t.color(couleur) for i in range(5): t.forward(taille) t.right(144) etoile(100, "blue") Copier pythonCopierModifierfor i in range(5): t.penup() t.goto(i * 100 - 200, 0) t.pendown() etoile(50, "red") Copier import turtle import random t = turtle.Turtle() colors = ["red", "blue", "green", "yellow", "purple"] for i in range(10): t.penup() x = random.randint(-200, 200) y = random.randint(-200, 200) t.goto(x, y) t.pendown() t.color(random.choice(colors)) for j in range(36): t.forward(50) t.left(170) Copier import turtle import random t = turtle.Turtle() colors = ["red", "blue", "green", "orange", "pink"] for i in range(30): t.penup() t.goto(random.randint(-300, 300), random.randint(-300, 300)) t.pendown() t.color(random.choice(colors)) for j in range(4): t.forward(20) t.right(90) --- # Exercice datavisualisation 2 | SAE 303 - Dataviz ![](https://cours.davidannebicque.fr/sae-303-dataviz/~gitbook/image?url=https%3A%2F%2F1053960988-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F4y0c1qg0LRWvB5mvLa20%252Fuploads%252FGFdpfhBZbG1b4FI1Nuuo%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202023-10-17%2520a%25CC%2580%252015.01.26.png%3Falt%3Dmedia%26token%3Db812ed15-5974-4572-8c55-e93df8622586&width=768&dpr=3&quality=100&sign=6ecabc02&sv=2) [PrécédentExercice datavisualisation 1chevron-left](https://cours.davidannebicque.fr/sae-303-dataviz/cours-dolivier-cherain/exercice-datavisualisation-1) [SuivantCours magistral 2 - préparer les donnéeschevron-right](https://cours.davidannebicque.fr/sae-303-dataviz/cours-dolivier-cherain/cours-magistral-2-preparer-les-donnees) Mis à jour il y a 2 ans --- # Cours magistral 2 - préparer les données | SAE 303 - Dataviz file-pdf 2MB [SAE303 - CM2.pdf](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FLaHQT7jY0HIzAH9SmZTV%2FSAE303%20-%20CM2.pdf?alt=media&token=574a8d22-3c08-47e1-8b47-b8bbe6ffd0bd) PDF downloadTélécharger[arrow-up-right-from-squareOuvrir](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FLaHQT7jY0HIzAH9SmZTV%2FSAE303%20-%20CM2.pdf?alt=media&token=574a8d22-3c08-47e1-8b47-b8bbe6ffd0bd) [PrécédentExercice datavisualisation 2chevron-left](https://cours.davidannebicque.fr/sae-303-dataviz/cours-dolivier-cherain/exercice-datavisualisation-2) [SuivantAnalyser les données - statistiqueschevron-right](https://cours.davidannebicque.fr/sae-303-dataviz/cours-dolivier-cherain/analyser-les-donnees-statistiques) Mis à jour il y a 1 an --- # Séance 10 : TP Noté | Vue.js LP [PrécédentSéance 9 : Exercice completchevron-left](https://cours.davidannebicque.fr/vue.js/seance-7-api-axios-fetch) [SuivantQuelques sourceschevron-right](https://cours.davidannebicque.fr/vue.js/quelques-sources) Mis à jour il y a 3 ans --- # Séance 2 | Accessibilité numérique Produire une analyse de votre site perso (ou d'un site de votre choix si vous n'avez pas de site perso en ligne). * Utiliser un outil en ligne (dareboost, siteanalyser, ...) * Utiliser un outil de navigateur * Appliquer la checklist Opquast. A l'issue de cette première analyse, présentation de quelques uns de vos retours, afin d'expliquer les messages et informations données par ces outils. Mise en place de correctifs sur votre site. [PreviousSéance 1chevron-left](https://cours.davidannebicque.fr/accessibilite-numerique/seance-1) [NextSéance 3chevron-right](https://cours.davidannebicque.fr/accessibilite-numerique/seance-3) Last updated 4 years ago Was this helpful? Was this helpful? --- # Introduction | Accessibilité (S1) | MMI Nouméa file-download 17MB [CM\_2022.pptx](https://1283878026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F66pWwTmIg5XgNOy9cbWG%2Fuploads%2FeZbpxaKmp1UyhkjqIVqt%2FCM_2022.pptx?alt=media&token=da9c34a3-a0ea-4b54-864c-468c6809ccdd) downloadDownload[arrow-up-right-from-squareOpen](https://1283878026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F66pWwTmIg5XgNOy9cbWG%2Fuploads%2FeZbpxaKmp1UyhkjqIVqt%2FCM_2022.pptx?alt=media&token=da9c34a3-a0ea-4b54-864c-468c6809ccdd) Support de cours > La nature du Web est son universalité. Il doit être accessible à toutes les personnes handicapées. - Sir Tim Beners Lee [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#comprendre-laccessibilite) Comprendre l'accessibilité ---------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#laccessibilite...-quest-ce-que-cest) L'accessibilité... Qu'est ce que c'est ? > L'**accessibilité du web** est la problématique de l'accès aux [contenus et services webarrow-up-right](https://fr.wikipedia.org/wiki/World_Wide_Web) > par les personnes [handicapéesarrow-up-right](https://fr.wikipedia.org/wiki/Handicap) > (déficients visuels, sourds, malentendants, etc.) et plus généralement par tous les utilisateurs, quels que soient leurs dispositifs d’accès (mobile, tablette, etc.) ou leurs conditions d’environnement (niveau sonore, éclairement, etc.). -- [Wikipediaarrow-up-right](https://fr.wikipedia.org/wiki/Accessibilit%C3%A9_du_web) L'accessibilité est définie par des normes [techniquesarrow-up-right](https://fr.wikipedia.org/wiki/Technique) établies par la [Web Accessibility Initiativearrow-up-right](https://fr.wikipedia.org/wiki/Web_Accessibility_Initiative) (WAI) du [World Wide Web Consortiumarrow-up-right](https://fr.wikipedia.org/wiki/World_Wide_Web_Consortium) (W3C). Elle nécessite un traitement tout au long du cycle de vie d'un [site webarrow-up-right](https://fr.wikipedia.org/wiki/Site_web) , par l'ensemble de ses acteurs, via des méthodes d'applications, des référentiels métiers et une démarche de suivi. C'est un droit universel, selon l'article 9 de la [Convention relative aux droits des personnes handicapéesarrow-up-right](https://fr.wikipedia.org/wiki/Convention_relative_aux_droits_des_personnes_handicap%C3%A9es) adoptée en [2006arrow-up-right](https://fr.wikipedia.org/wiki/2006) par l'[Organisation des Nations uniesarrow-up-right](https://fr.wikipedia.org/wiki/Organisation_des_Nations_unies) « afin de permettre aux personnes handicapées de vivre de façon indépendante et de participer pleinement à tous les aspects de la vie, les États Parties prennent des mesures appropriées pour leur assurer, sur la base de l’égalité avec les autres, l’accès à l’environnement physique, aux transports, à l’information et à la communication, y compris aux systèmes et technologies de l’information et de la communication, et aux autres équipements et services ouverts ou fournis au public, tant dans les zones urbaines que rurales. Ces mesures, parmi lesquelles figurent l’identification et l’élimination des obstacles et barrières à l’accessibilité, s’appliquent, entre autres \[...\] aux services d’information, de communication et autres services, y compris les services électroniques et les services d’urgence \[...\] Les États Parties prennent également des mesures appropriées pour \[...\] promouvoir l’accès des personnes handicapées aux nouveaux systèmes et [technologies de l’information et de la communicationarrow-up-right](https://fr.wikipedia.org/wiki/Technologies_de_l%E2%80%99information_et_de_la_communication) , y compris l’[Internetarrow-up-right](https://fr.wikipedia.org/wiki/Internet) . » ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#contexte-utilisateur) Contexte utilisateur L'accessibilité n'est pas uniquement la prise en compte des handicaps "lourds", elle est bien plus large que cela. Elle permet au plus grand nombre d'accéder aux sites web. Entre **280 000 et 23 650 000** personnes handicapées, selon le périmètre utilisé, note le rapport de la Cour des Comptes en 2003, qui rappelle aussi que 3,97 millions de personnes en 1999 se déclaraient titulaires d'un taux d'incapacité reconnu officiellement, soit 6,8 % de la population. Les différents contextes utilisateurs sont, par exemple : * la diversité des [handicapsarrow-up-right](https://fr.wikipedia.org/wiki/Handicap) susceptibles d'affecter la capacité à accéder à un contenu ou à un service en ligne. Ceux-ci peuvent être visuels ([cécitéarrow-up-right](https://fr.wikipedia.org/wiki/C%C3%A9cit%C3%A9) , [trouble de la visionarrow-up-right](https://fr.wikipedia.org/wiki/Trouble_de_la_vision) , [daltonismearrow-up-right](https://fr.wikipedia.org/wiki/Daltonisme) , [achromatopsiearrow-up-right](https://fr.wikipedia.org/wiki/Achromatopsie) ), auditifs ([surditéarrow-up-right](https://fr.wikipedia.org/wiki/Surdit%C3%A9) totale ou partielle), moteurs, cognitifs ou neurologiques, ou encore liés au [vieillissementarrow-up-right](https://fr.wikipedia.org/wiki/Vieillissement) ; * la variété des périphériques d'entrée et de sortie, et celle des technologies d'assistance : claviers alternatifs et commutateurs, dispositifs braille, [lecteurs d'écranarrow-up-right](https://fr.wikipedia.org/wiki/Lecteur_d%27%C3%A9cran) ([JAWSarrow-up-right](https://fr.wikipedia.org/wiki/Jaws_(logiciel_pour_d%C3%A9ficients_visuels)) , [NonVisual Desktop Accessarrow-up-right](https://fr.wikipedia.org/wiki/NonVisual_Desktop_Access) , [VoiceOverarrow-up-right](https://fr.wikipedia.org/wiki/VoiceOver) Window-Eyes, SRCore pour [Gnopernicusarrow-up-right](https://fr.wikipedia.org/wiki/Gnopernicus) ), outils de synthèse vocale (Narrator pour [Windows 2000arrow-up-right](https://fr.wikipedia.org/wiki/Windows_2000) ), loupes d'écran et autres dispositifs d'agrandissement, navigateurs textes, dispositifs d'interaction vocale, paramétrages d'accessibilité des navigateurs web classiques, etc. [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.atalan.fr%2Ffavicon.ico&width=20&dpr=3&quality=100&sign=6063e4d9&sv=2)L’accessibilité numérique, et si nous agissions ?L’accessibilité numérique, et si nous agissions ?chevron-right](https://www.atalan.fr/agissons/fr/index.html) Comprendre les handicaps * Les terminaux utilisés (PC, tablette, smartphone), * Les outils (système d'exploitation, navigateur web, ...) * "L'ambiance" de navigation (ensoleillé par exemple, sombre, ...) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.leptidigital.fr%2Fwp-content%2Fuploads%2F2022%2F09%2Fcropped-favicon-leptidigital-192x192.png&width=20&dpr=3&quality=100&sign=21ee1030&sv=2)Parts de marché des navigateurs web en 2026 (France et Monde)leptidigitalchevron-right](https://www.leptidigital.fr/webmarketing/parts-de-marche-navigateurs-web-10814/) ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#favoriser-laccessibilite-cest-sassurer-un-meilleur-referencement) Favoriser l'accessibilité c'est s'assurer un meilleur référencement ! Quoi de plus frustrant que de trouver son "super site web" à la 2198éme pages des résultats de Google ? Tout simplement parce que Google utilise un "navigateur" qui ne supporte ni le flash, ni le javascript et ne comprend rien aux images... Optimiser l'accessibilité sera donc bénéfique à votre référencement. Pour l'indexation d'une part, si on fait attention à ce que chaque contenu soit accessible sans flash ou javascript, il sera également accessible aux moteurs de recherches. Pour l'optimisation des mots-clés d'autre part, en remplissant les balises "alt" et "title" des images par exemple. [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#laccessibilite-cest-normee) L'accessibilité c'est normée ------------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-normes) Les normes Le WAI (Web Accessibility Initiative) ([https://www.w3.org/WAI/arrow-up-right](https://www.w3.org/WAI/) ), fondé en 1997 par le W3C * A donc rédigé des conseils pratiques qui peuvent aider les concepteurs web à rendre les sites internet plus accessibles, et ce qui nous intéresse en particulier, c'est le WCAG, les règles pour accessibilité des contenus web. * Avant de se jeter sur les outils d'accessibilité que l'on peut trouver sur le web, il est intéressant de lire ou relire le WCAG 2.0 sur le site du W3C ([https://www.w3.org/WAI/intro/wcagarrow-up-right](https://www.w3.org/WAI/intro/wcag) ), pour bien comprendre les techniques et mécanismes qui rendront votre contenu accessible au plus grand nombre. Niveau Objectif Faisabilité Exemple A Atteindre un niveau d'accessibilité minimal. Critères de succès essentiels pouvant raisonnablement s'appliquer à toutes les ressources web. La couleur n'est pas le seul moyen visuel de véhiculer l'information. AA Améliorer le niveau d'accessibilité Critères de succès supplémentaires pouvant raisonnablement s'appliquer à toutes les ressources web. Les textes de petite taille ont un ratio de contraste au moins égal à 4.5 AAA Atteindre un niveau supérieur d'accessibilité. Critères de succès ne s'appliquant pas à toutes les ressources web. Les textes de petite taille ont un ratio de contraste au moins égal à 7 WCAG 2.0 entérine enfin le choix du niveau AA comme objectif des politiques d'accessibilité globale, le niveau AAA n'étant pertinent que pour certains projets, en fonction des contenus spécifiques qui sont concernés ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-normes-europeennes) Les normes Européennes L'Europe parle de l'accessibilité numérique comme d'une obligation citoyenne : une plus large diffusion de produits et services numériques accessibles favorise l'insertion professionnelle, l'intégration sociale et un cadre de vie autonome. La vidéo proposée en début d'article en est un excellent exemple. Certains pays européens sont en pointe : l'Irlande ("Disability Act", 1999) ; la Grande-Bretagne (Disability Discrimination Act, 1995) ; l'Allemagne et l'Espagne (2002) ; la Grèce (2003)... ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-normes-en-france) Les normes en France * L'accessibilité du web est une des priorité du gouvernement et doit faire partie intégrante des formations pour le web. * En 1999, une circulaire du Premier ministre déclare que : "Les responsables des sites \[publics\] veilleront tout particulièrement à favoriser l'accessibilité de l'information à tous les internautes, notamment les personnes handicapées, non voyantes, malvoyantes ou malentendantes." * En décembre 2003, un rapport d'étude mené dans le cadre du plan national de diffusion des nouvelles technologies auprès des personnes handicapées recommande notamment la création d'un "cadre général clair pour une meilleure prise en compte des critères d'accessibilité des sites", d'un "centre ressources pour le conseil et la formation" et enfin d'un "organisme officiel de certification, totalement habilité à effectuer ce type de travail par son indépendance" * En 2004 s'ouvre une première phase d'incitation à l'accessibilité des sites des services de l'État, des collectivités territoriales et des établissements publics : l'agence pour le Développement de l'administration électronique (ADAE) adopte un "Référentiel accessibilité des services Internet de l'administration". Celui-ci est issu des travaux du centre de ressources et de recherche Accessiweb créé par l'association BrailleNet sur la base de la norme internationale WCAG1.0, complétés par des préconisations ergonomiques. Il n'a pas de caractère obligatoire. * En 2005, l'obligation d'accessibilité du Web public est légalement créée par l'article 47 de la loi du 11 février (no 2005-102) pour "l'égalité des droits et des chances, la participation et la citoyenneté des personnes handicapées", qui énonce : "Les services de communication publique en ligne des services de l'État, des collectivités territoriales et des établissements publics qui en dépendent doivent être accessibles aux personnes handicapées." * La direction générale de la modernisation de l'État (DGME) devient le moteur du projet pour la création du référentiel général d'accessibilité pour les administrations (RGAA), publié dans sa version finale en octobre 2009. * Par l'arrêté du 29 avril 2015, la version 3.0 du RGAA est adoptée. Elle est une évolution majeure du référentiel. * En septembre 2019 est publié la version 4 du RGAA. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#quel-est-letat-de-laccessibilite-du-web) Quel est l'état de l'accessibilité du web ? En 2005, l'étude eAccessibility of public sector services in the European Union menée par le Cabinet Oce britannique et portant sur 436 sites Web d'administration publique des 25 pays membres de l'UE, évalue à 3% le nombre de sites qui répondent aux exigences de niveau A de WCAG 1.0 Une étude menée en 2004 sur un échantillon de 1 000 sites Web par la Disability Rights Commission britannique identifiait les principaux manquements aux directives WCAG1.0 * l'absence d'alternatives pertinentes aux éléments graphiques et au javascript ; * la présence de contenus en mouvement non contrôlables par l'utilisateur, et d'ouvertures de liens dans une nouvelle fenêtre du navigateur non anticipables par l'utilisateur ; * la présence de libellés de liens non explicites et de contenus rédigés dans un langage trop complexe en fonction du contexte ; * la structuration HTML insuffisante du contenu ; l'utilisation non accessible de la couleur comme véhicule de l'information ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-certifications) Les certifications L'accessibilité est quelque chose qui peut (doit ?) être certifié. Il existe plusieurs niveaux de certification (Bronze, Argent, Or). Évidemment cela est long, coûteux. Des organismes privés peuvent faire cette certification. [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-outils-danalyses) Les outils d'analyses ------------------------------------------------------------------------------------------------------------------------------------ Il existe également de nombreux outils permettant d'évaluer l'accessibilité de son site web. Mais ces outils, nécessairement incomplet, car une par de l'accessibilité repose sur le contenu présent dans votre site. Ces outils ne peuvent donc être qu'une aide. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-referentiels) Les référentiels #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#wcag) WCAG La référence officielle du Web. Pas forcément facile à utiliser. Le RGAA en est une retranscription quasi complète. [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.w3.org%2Ffavicon.ico&width=20&dpr=3&quality=100&sign=d6ebe252&sv=2)Règles pour l'accessibilité des contenus Web (WCAG) 2.0www.w3.orgchevron-right](https://www.w3.org/Translations/WCAG20-fr/) #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#rgaa) RGAA Référentiel français, que toutes les administrations publiques devraient appliquer au niveau AA. [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.numerique.gouv.fr%2Fstatic%2Fdsfr%2Fdist%2Ffavicon%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=fdae8021&sv=2)numerique.gouv.frwww.numerique.gouv.frchevron-right](https://www.numerique.gouv.fr/publications/rgaa-accessibilite/) La liste des critères est relativement longue et couvre tous les aspects du site. [https://www.numerique.gouv.fr/publications/rgaa-accessibilite/methode/criteres/#contenuarrow-up-right](https://www.numerique.gouv.fr/publications/rgaa-accessibilite/methode/criteres/#contenu) Un kit d'Audit est disponible : [https://www.numerique.gouv.fr/publications/rgaa-accessibilite/kit/#contenuarrow-up-right](https://www.numerique.gouv.fr/publications/rgaa-accessibilite/kit/#contenu) contenant notamment une grille avec les critères et le calcul du score. Normalement, toutes les pages de votre site devraient être testées avec cette grille. #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#opquast) OPQUAST Opquast est à la fois un organisme de certification et de formation. Il dresse une check-liste des bonnes pratiques du Web. Cela va plus loin que simplement l'accessibilité. [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwebsite.oqs-cdn.com%2Fwp-content%2Fuploads%2F2021%2F03%2Ffavicon-32x32-1.png&width=20&dpr=3&quality=100&sign=cedcd860&sv=2)Opquast - Parcours de certification Qualité numériqueOpquastchevron-right](https://www.opquast.com/) Les 240 règles sont décrites ici : [https://checklists.opquast.com/fr/assurance-qualite-web/arrow-up-right](https://checklists.opquast.com/fr/assurance-qualite-web/) Elles peuvent aussi être prise en fonction du contexte avec les checklists téléchargeables : [https://checklists.opquast.com/fr/assurance-qualite-web/download/arrow-up-right](https://checklists.opquast.com/fr/assurance-qualite-web/download/) ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-outils) Les outils Nombreux, parfois très spécifiques (contrastes, syntaxe HTML), parfois regroupant SEO et accessibilité, ils ne couvrent jamais l'ensemble des aspects, et sont simplement une première aide pour l'accessibilité. #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#validator-w3c) Validator w3C Même si avoir un site parfaitement valide au W3C n'est pas une garantie d'avoir une site accessible, cela est déjà un premier point de départ. Il n'est pas toujours possible de supprimer tous les warnings, mais il ne devrait pas y avoir d'erreurs. [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.w3.org%2Fassets%2Flogos%2Fw3c-2025%2Ffavicons%2Ffavicon-32.png&width=20&dpr=3&quality=100&sign=8ae65495&sv=2)The W3C Markup Validation Servicevalidator.w3.orgchevron-right](https://validator.w3.org/) #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#wave) Wave Wave est un outil qui se greffe sur votre navigateur (Chrome ou Firefox). Il permet de vérifier la qualité du code, et des éléments comme le contraste. Il ajoute une sur-couche à votre page web, pour faciliter la lecture. [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwave.webaim.org%2Ffavicon.ico&width=20&dpr=3&quality=100&sign=651bc381&sv=2)WAVE Web Accessibility Evaluation Toolswave.webaim.orgchevron-right](https://wave.webaim.org/) #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#outils-de-developpement-des-navigateurs) Outils de développement des navigateurs Chrome et firefox intègrent des outils de développeurs qui contiennent, entre-autre, des éléments pour mesure l'accessibilité de votre site. #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#axe-accessibility) Axe Accessibility Axe Accessibility est aussi un plugin de navigateur qui complète l'outil de développement en ajoutant d'autres informations et d'autres tests. [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.deque.com%2Fwp-content%2Fuploads%2F2025%2F10%2Ffavicon.svg&width=20&dpr=3&quality=100&sign=41f533fb&sv=2)Axe Platform | Full suite of accessibility testing toolsDequechevron-right](https://www.deque.com/axe/) #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#dareboost) Dareboost Dareboost est un site en ligne qui permet de tester, en partie l'accessibilité de votre site, mais plutôt destiné cependant à l'optimisation de votre site et son référencement. Néanmoins, améliorer le SEO et optimiser votre site ne peut être que bénéfique pour l'accessibilité. [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fwww.dareboost.com%2Fvassets%2Fimg%2Ffavicons%2F040d77e989b8b22e85160704e3aeb8b8-apple-touch-icon.png&width=20&dpr=3&quality=100&sign=61a085c6&sv=2)Analyse de site Web, Test de Performance et Audit qualité | DareboostDareboostchevron-right](https://www.dareboost.com/fr) Dans le même genre vous avez aussi : [https://www.site-analyzer.com/fr/arrow-up-right](https://www.site-analyzer.com/fr/) , [https://developers.google.com/speed/pagespeed/insights/arrow-up-right](https://developers.google.com/speed/pagespeed/insights/) , ... et beaucoup d'autres : [https://www.codeur.com/blog/outils-analyser-optimiser-seo/arrow-up-right](https://www.codeur.com/blog/outils-analyser-optimiser-seo/) chacun offrant des analyses plus ou moins similaire, et des tarifs ou mode de fonctionnement différents. #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-contrastes-ou-couleurs) Les contrastes ou couleurs Pour évaluer un contraste [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fweb-color.aliasdmc.fr%2Ffavicon.ico&width=20&dpr=3&quality=100&sign=f3f1a73b&sv=2)Accessibilité contraste couleurs WCAG 2.0 pour la couleur forestgreen : Web-color.aliasdmc.frWeb Color by Aliasdmc.frchevron-right](https://web-color.aliasdmc.fr/contraste-couleur-text-fond-wcag.php) Pour évaluer une palette au regard d'handicap (daltonisme, ...) [![Logo](https://cours.davidannebicque.fr/mmi-noumea/~gitbook/image?url=https%3A%2F%2Fpaletton.com%2Fimg%2Ffavicon-128.png&width=20&dpr=3&quality=100&sign=99e77cc3&sv=2)Paletton - The Color Scheme Designerpaletton.comchevron-right](https://paletton.com/#uid=35-0u0kllllaFw0g0qFqFg0w0aF) [PreviousObjectifschevron-left](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1) [NextSéance 1chevron-right](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/seance-1) Last updated 2 years ago * [Comprendre l'accessibilité](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#comprendre-laccessibilite) * [L'accessibilité... Qu'est ce que c'est ?](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#laccessibilite...-quest-ce-que-cest) * [Contexte utilisateur](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#contexte-utilisateur) * [Favoriser l'accessibilité c'est s'assurer un meilleur référencement !](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#favoriser-laccessibilite-cest-sassurer-un-meilleur-referencement) * [L'accessibilité c'est normée](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#laccessibilite-cest-normee) * [Les normes](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-normes) * [Les normes Européennes](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-normes-europeennes) * [Les normes en France](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-normes-en-france) * [Quel est l'état de l'accessibilité du web ?](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#quel-est-letat-de-laccessibilite-du-web) * [Les certifications](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-certifications) * [Les outils d'analyses](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-outils-danalyses) * [Les référentiels](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-referentiels) * [Les outils](https://cours.davidannebicque.fr/mmi-noumea/accessibilite-s1/introduction#les-outils) --- # Astuces pour vos IDE | Accessibilité numérique Emmet est une "syntaxe" qui permet de générer rapidement du code HTML et des structures (tables, listes, ...) dans vos Ide. [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fdocs.emmet.io%2F-%2F3755353140%2Ffavicon.ico&width=20&dpr=3&quality=100&sign=ae9e12b5&sv=2)Abbreviations Syntaxdocs.emmet.iochevron-right](https://docs.emmet.io/abbreviations/syntax) Emmet [PreviousSéance 2 - S1 - BUT MMIchevron-left](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi) [NextBibliographie / Sitographiechevron-right](https://cours.davidannebicque.fr/accessibilite-numerique/ressources/bibliographie-sitographie) Last updated 4 years ago Was this helpful? Was this helpful? --- # Organisation et Livrable | SAE 303 - Dataviz ### [hashtag](https://cours.davidannebicque.fr/sae-303-dataviz/organisation-et-livrable#organisation) Organisation * En binôme * Présent à l'IUT sur tous les créneaux "PTUT" ### [hashtag](https://cours.davidannebicque.fr/sae-303-dataviz/organisation-et-livrable#livrables) Livrables #### [hashtag](https://cours.davidannebicque.fr/sae-303-dataviz/organisation-et-livrable#intermediaires) Intermédiaires * Vendredi 27 septembre, 12h30 (a communiquer à l'IUT entre 11h et 12h30, salle **h103**) * Votre binôme * Votre source de données * Votre "histoire" (les données sont larges pour que les histoires ne soient pas toutes identiques). * ~Mercredi 2 octobre, à partir de 15h30 (H017)~ Jeudi 3 octobre 11h, h101 * Présentation d'une maquette détaillée des pages proposées * Avec tous les éléments présents sur la mise en page * Choix des graphiques (même si les données ne sont pas encore finalisées) * 15 octobre, à partir de 14h00 (et avant 15h30) * Une pré-version du site en ligne * Votre site contiendra au moins deux pages (ou en one page) pour les dataviz + une page avec vos coordonnées + une page avec les références et sources utilisées * S'il faut chiffrer entre 8 et 10 graphiques semblent pertinents * Au moins 4 programmés, dont au moins deux fortement interactif * 1 en infographie libre * Les autres au format libre * ~17 octobre 17h00~ **18 octobre 12h30** (rendu final en ligne) circle-exclamation Attention ! L'interactivité ici est à lire au sens : Graphiques paramétrables (cocher/masquer des informations, ...). Les comportements natifs des outils ne sont pas considérés comme des interactivités programmés. circle-info ### [hashtag](https://cours.davidannebicque.fr/sae-303-dataviz/organisation-et-livrable#changement-de-date-de-rendu-site-web-avec-data-visualisations-interactives-a-rendre-pour-le-17-octob) CHANGEMENT DE DATE DE RENDU !!! Site web avec data-visualisations interactives à rendre pour le ~17 octobre 2024~ 18 octobre 2024, 12h30. Le rendu se fera par mail (1 par binôme). ### [hashtag](https://cours.davidannebicque.fr/sae-303-dataviz/organisation-et-livrable#criteres-de-notation) Critères de notation * Site web * Accessibilité (a11y AA) * Eco-conception * Données exploitées * Histoire racontée * Esthétique du site (qualité de l'infographie libre, du site globalement) ### [hashtag](https://cours.davidannebicque.fr/sae-303-dataviz/organisation-et-livrable#quelques-exemple-bons-et-moins-bons) Quelques exemple (bons et moins bons) [https://mmi22a13.mmi-troyes.fr/sae303/mmi22a13.mmi-troyes.frchevron-right](https://mmi22a13.mmi-troyes.fr/sae303/) [Ws303DataVizmmi22b02.mmi-troyes.frchevron-right](http://mmi22b02.mmi-troyes.fr/sae303d/index.html) [http://clement-deroberti.fr/sae/sae303/index.htmlclement-deroberti.frchevron-right](http://clement-deroberti.fr/sae/sae303/index.html) [http://mmi22d15.mmi-troyes.fr/sae303d/mmi22d15.mmi-troyes.frchevron-right](http://mmi22d15.mmi-troyes.fr/sae303d/) [PrécédentCM Introductifchevron-left](https://cours.davidannebicque.fr/sae-303-dataviz/cm-introductif) [SuivantTD 1 - Premiers graphiqueschevron-right](https://cours.davidannebicque.fr/sae-303-dataviz/cours-de-david-annebicque/td-1-premiers-graphiques) Mis à jour il y a 1 an * [Organisation](https://cours.davidannebicque.fr/sae-303-dataviz/organisation-et-livrable#organisation) * [Livrables](https://cours.davidannebicque.fr/sae-303-dataviz/organisation-et-livrable#livrables) * [Critères de notation](https://cours.davidannebicque.fr/sae-303-dataviz/organisation-et-livrable#criteres-de-notation) * [Quelques exemple (bons et moins bons)](https://cours.davidannebicque.fr/sae-303-dataviz/organisation-et-livrable#quelques-exemple-bons-et-moins-bons) --- # DLL HomeIO | BUT INFO / C# / Embarqué [hashtag](https://cours.davidannebicque.fr/but-info/untitled#presentation) Présentation -------------------------------------------------------------------------------------------- HomeIO dispose d'une DLL permettant de lire et écrire les valeurs de l'ensemble des capteurs et actionneurs de la maison. HomeIO utilise le concept de [Memory Mapped Filesarrow-up-right](https://docs.microsoft.com/fr-fr/dotnet/standard/io/memory-mapped-files) pour sauvegarder les données de la maison. Cette Memory Map est mise à jour en permanence par HomeIO qui indique les valeurs des capteurs, et lit les valeurs des actionneurs. HomeIo met donc à disposition une DLL qui comporte un objet MemoryMap de type singleton (une seule instance peut exister). Cette instance représente une copie en cache de la Memory Map gérée par HomeIO. La méthode MemoryMap.Instance.Update() est responsable de la synchronisation entre la version en cache de la Memory map et sa version en mémoire accessible et utilisée par HomeIO. Cette méthode doit être appelée à chaque fois que vous souhaitez que vos actions aient une incidence sur HomeIO ou pour récupérer l'état de la maison. circle-info Vous pouvez récupérer la documentation : [https://docs.realgames.co/homeio/en/sdk-getting-started/arrow-up-right](https://docs.realgames.co/homeio/en/sdk-getting-started/) Ce dossier contient des exemples (à étudier), et un explorateur (écrit en C#) pour voir l'état des capteurs/actionneurs. triangle-exclamation Attention, avec la version .Net 6, il faut utiliser une version plus récente de la DLL, qui se trouve ici : [https://github.com/realgamessoftware/factoryio-sdkarrow-up-right](https://github.com/realgamessoftware/factoryio-sdk) (répertoire lib) [hashtag](https://cours.davidannebicque.fr/but-info/untitled#cas-de-lecture-simple) Cas de lecture simple -------------------------------------------------------------------------------------------------------------- L'exemple ci-dessous permet de piloter la lampe du salon, et de l'allumer/éteindre 10 fois. La lumière du salon doit être en mode "pilotage externe" (_external mode_, icône en bleu) Copy using System; using System.Threading; using EngineIO; //import the HomeIO dll namespace EngineIO.Samples { class Program { //In this sample we are switching the living room light on and off 10 times. static void Main(string[] args) { //We are using a MemoryBit which we get from the MemoryMap. //You can find all the memory addresses at the Memory Addresses page. MemoryBit livingRoomLight = MemoryMap.Instance.GetBit(0, MemoryType.Output); for (int i = 0; i < 10; i++) { livingRoomLight.Value = !livingRoomLight.Value; //When using a memory value before calling the Update method we are using a cached value. Console.WriteLine("Light is on? " + livingRoomLight.Value); //Calling the Update method will write the livingRoomLight.Value to the memory map. MemoryMap.Instance.Update(); Thread.Sleep(1000); } //When we no longer need the MemoryMap we should call the Dispose method to release all the allocated resources. MemoryMap.Instance.Dispose(); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } } } ### [hashtag](https://cours.davidannebicque.fr/but-info/untitled#principe) Principe 1. Récupérer l'adresse de l'élément que vous souhaitez piloter (ligne 15) 2. Modifier sa valeur (ligne 19) 3. Mettre à jour la MemoryMap (ligne 25) La liste des adresses des différents capteurs et actionneurs se trouvent à cette adresse : [https://docs.realgames.co/homeio/en/memory-addresses/arrow-up-right](https://docs.realgames.co/homeio/en/memory-addresses/) Les inputs (capteurs/interrupteurs) et les outputs (actionneurs/lumières/moteurs...) sont listés avec le type, l'adresse, la zone (pièce), son nom, et le type de contact. circle-exclamation Une même adresse peut être utilisée pour différentes inputs ou outputs en fonction du type manipulé. [PreviousIntroductionchevron-left](https://cours.davidannebicque.fr/but-info) [NextPremier exemple pas à paschevron-right](https://cours.davidannebicque.fr/but-info/premier-exemple-pas-a-pas) Last updated 11 months ago Was this helpful? * [Présentation](https://cours.davidannebicque.fr/but-info/untitled#presentation) * [Cas de lecture simple](https://cours.davidannebicque.fr/but-info/untitled#cas-de-lecture-simple) * [Principe](https://cours.davidannebicque.fr/but-info/untitled#principe) Was this helpful? --- # Corrections séance F | Programmation Orientée Objet en PHP (B.U.T.) VehiculeAMoteur.php Copier verificationtype($typeMoteur); $this->verificationnbpassagers($nbPassagers); $this->typeMoteur = $typeMoteur; $this->nbPassagers = $nbPassagers; self::$nbVehicules++; } public function setypeMoteur(string $typeMoteur): void { $this->verificationtype($typeMoteur); $this->typeMoteur = $typeMoteur; } protected function verificationtype(string $type): void { if ($type !== 'T' && $type !== 'E') { throw new \InvalidArgumentException("Type moteur invalide : doit être 'T' ou 'E'."); } } protected function verificationnbpassagers(int $nombre): void { if ($nombre < 1) { throw new \InvalidArgumentException("Le nombre de passagers doit être un entier positif."); } } public static function getNbVehicules(): int { return self::$nbVehicules; } public function getTypeMoteur(): string { return $this->typeMoteur; } public function getNbPassagers(): int { return $this->nbPassagers; } } [PrécédentSéance F : Héritage multiplechevron-left](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6) [SuivantInterfaceschevron-right](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/interfaces) Mis à jour il y a 3 mois Voiture.php Copier marque = $marque; $this->puissance = $puissance; } public function lireCaracteristiques(): string { return 'Type de moteur : '.$this->typeMoteur.', Nombre de passagers : '.$this->nbPassagers.', Marque : '.$this->marque.', Puissance : '.$this->puissance; } } VoitureDeSport.php Copier zeroACent = $zeroACent; } public function lireCaracteristiques(): string { return parent::lireCaracteristiques(). ' Zéro à cent :'.$this->zeroACent; } } Camion Copier tonnage = $tonnage; $this->nbEssieux = $nbEssieux; } public function lireCaracteristiques(): string { return '

Type moteur : '.$this->typeMoteur.', Nombre de passagers: '.$this->nbPassagers.', Tonnage : '.$this->tonnage.', Nombre d\'essieux : '.$this->nbEssieux.'

'; } } VoitureTourisme Copier consommation = $consommation; } public function afficherCaracteristiques(): string { $texte = parent::afficherCaracteristiques(); $texte .= 'Consommation : '.$this->consommation.'
'; $texte .= 'Kilométrage : '.$this->kilometrage.'
'; return $texte; } public function utiliser(float $distance): void { $this->kilometrage += $distance; } } --- # Séance F : Héritage multiple | Programmation Orientée Objet en PHP (B.U.T.) ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#heritage-multiple) Héritage multiple L’héritage est le moyen de spécialiser une classe sans compromettre son code original. PHP autorise l’héritage multiple. Une classe pouvant être une classe fille mais aussi une classe parent. (cf. exemple ci-dessous) Copier prop1 = $a1; $this->prop2 = $a2; //incrémentation du nombre d'instances self::$nbinstances++; } //destructeur public function __destruct() { //décrémente le nombre d'instances self::$nbinstances--; } public function lireProprietes(): string { return 'Propriété 1 :'.$this->prop1.', Propriété 2 :'.$this->prop2; } } //Classe fille de A, mais aussi classe parent de C class B extends A { //Propriétés public $prop3; //constructeur public function __construct($a1, $a2, $a3) { parent::__construct($a1, $a2); $this->prop3 = $a3; } } //Classe fille de B final class C extends B { //Propriétés public $prop4; //constructeur public function __construct($a1, $a2, $a3, $a4) { parent::__construct($a1, $a2, $a3); $this->prop4 = $a4; } } Dans l'exemple ci-dessus, la classe B hérite de la classe A. La classe C hérite de la classe B. #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#final) Final Evidemment l’héritage multiple a fonctionnellement des limites. On peut souhaiter interdire l’héritage afin de conserver une certaine intégrité du code. C’est possible si on place le mot clé final devant le nom de la classe. (cf. exemple ci-dessous) Dans l'exemple ci-dessus, on ne pourra pas créer de classes à partir de la classe C. L’héritage est interdit. #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#classe-abstraite) Classe abstraite une classe abstraite ne peut pas être instanciée. L’héritage devient alors le seul moyen pour exploiter ses propriétés et ses méthodes. Les classes filles pouvant alors être instanciées. (cf. exemples ci-dessous). Classe abstraite, mot-clé abstract. Dans l'exemple ci-dessus, la classe A est abstraite. Elle ne peut pas être instanciée. Le code ci-dessous montre que l’instanciation de la classe A provoque une erreur _PHP : Fatal Error, cannot instanciate abstract class A_ L’intérêt de la classe Abstraite est de fournir un code de base (une sorte de modèle) commun à un ensemble de classes. Mais ce code n’est pas complet pour pouvoir l’utiliser directement. L’héritage est donc la seule solution de développement. Ci-dessus, application, classe abstraite, instanciation impossible. #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#acces-statique) Accès statique une classe peut posséder des propriétés statiques. Ces propriétés ne sont pas des propriétés liées aux objets, mais des propriétés de classe. Il est ainsi possible d’exploiter cette caractéristique pour connaître par exemple le nombre d’instances créées. Cela s’avère particulièrement utile lors de la mise en œuvre de l’héritage. Mais pas seulement. (cf. exemples ci-dessous) ![](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/~gitbook/image?url=https%3A%2F%2F441730266-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-LjKrFSyq65TEN9dTgPU%252F-LjL9IZDLrjVz1i_GsFu%252F-LjLQrN_jGPkT6nmW7qG%252Ffigure5.png%3Falt%3Dmedia%26token%3Df9b47a4c-3148-47ee-8c3b-52fc60707ca8&width=768&dpr=3&quality=100&sign=54c3bccb&sv=2) Propriété de classe ![](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/~gitbook/image?url=https%3A%2F%2F441730266-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-LjKrFSyq65TEN9dTgPU%252F-LjL9IZDLrjVz1i_GsFu%252F-LjLQsOSfbIztvH13z-u%252Ffigure6.png%3Falt%3Dmedia%26token%3D9d7bf158-60c9-43e2-9ed5-a102882adfcf&width=768&dpr=3&quality=100&sign=9006457e&sv=2) Exemple d'utilisation d'une propriété de classe Dans le code ci-dessus, il est possible de connaître le nombre d’instances (objets) créées. ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#travail-a-faire) Travail à faire ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#creation-de-classes-avec-heritage-un-fichier-par-classe) CREATION DE CLASSES AVEC HERITAGE (un fichier par classe) Voici la représentation [UMLarrow-up-right](https://fr.wikipedia.org/wiki/UML_(informatique)) du diagramme des classes à créer dans cet exercice. ![](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/~gitbook/image?url=https%3A%2F%2F441730266-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-LjKrFSyq65TEN9dTgPU%252F-LjL9IZDLrjVz1i_GsFu%252F-LjLQtf7B4e0r9BZYSpe%252Fuml.png%3Falt%3Dmedia%26token%3Df8984ca2-710e-421c-8099-cd73fdaa0b7d&width=768&dpr=3&quality=100&sign=de2609ab&sv=2) Schéma d'héritage des classes (diagram UML de classe) #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#classe-vehiculeamoteur) Classe VehiculeAMoteur Créer la classe **Abstraite** VehiculeAMoteur dont les caractéristiques sont les suivantes : * Propriétés * Type de moteur (propriété encapsulée) * Nombre de passagers (propriété encapsulée) * Nombre de véhicules (propriété de la classe : Static) * Méthodes * Le constructeur * `verificationtype($type)` : cette méthode permet de vérifier que l’utilisateur de la classe utilisera bien le bon code pour la propriété Type moteur. Il vaut soit T, soit E. (T pour Thermique, E pour Electrique) * `verificationnbpassagers($nombre)` : cette méthode permet de vérifier que l’utilisateur de la classe affecte bien une valeur numérique (un entier) au nombre de passagers. circle-info Avec l'utilisation de PHP 8 et versions suivantes et l'usage du typage, la méthode `verificationnbpassagers` n'a plus forcément de sens, le passage d'une donnée autre qu'un entier provoquerait une erreur PHP #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#classe-voiture) Classe Voiture Créer la classe Voiture qui hérite de la classe VehiculeAMoteur dont les caractéristiques sont les suivantes : * Propriétés * Marque du véhicule * Puissance en chevaux * Méthodes * Le constructeur * `Lirecaracteristiques()` qui retourne : * Le type de moteur, * Le nombre de passagers * La marque * La puissance #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#classe-voituredesport) Classe VoitureDeSport Créer la classe VoitureDeSport qui hérite de la classe Voiture. Il ne doit pas être possible de créer des classes filles à partir de la classe VoitureDeSport. * Propriété : * Nb de secondes de zéro à 100 km/h * Méthodes : * Le constructeur * `Lirecaracteristiques()` héritée de la classe Voiture et qui affiche en plus le nombre de secondes de zéro à cent. #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#classe-voituretourisme) Classe VoitureTourisme Créer la classe VoitureTourisme qui hérite de la classe Voiture dont les caractéristiques sont les suivantes : * Propriétés : * Consommation en litres pour 100 kilomètres. * Kilométrage, valeur définie par défaut à 0 km. * Méthodes : * Le constructeur, toutes les propriétés ne sont pas nécessaires dans le constructeur. * `Lirecaracteristiques()` héritée de la classe Voiture et qui retourne en plus la consommation et le kilométrage. * `utiliser($distance)` : incrémente le kilométrage dun nombre de kilomètres donné en argument (`$distance`) #### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#classe-camion) Classe Camion Créer la classe Camion qui hérite de la classe VehiculeAMoteur dont les caractéristiques sont les suivantes : * Propriétés : * Tonnage * Nombre d’essieux * Méthodes * Le constructeur * `lirecaracteristiques()` qui retourne : * Type moteur, * Nombre de passagers * Le tonnage * Le nombre d’essieux ### [hashtag](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#creation-de-lapplication-seance6.php) CREATION DE L’APPLICATION (seance6.php) Voici le code de l’application attendue. A saisir et à tester. [PrécédentSéance E : Héritage & Encapsulationchevron-left](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-5) [SuivantCorrections séance Fchevron-right](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/corrections-seance-f) Mis à jour il y a 4 mois * [Héritage multiple](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#heritage-multiple) * [Travail à faire](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#travail-a-faire) * [CREATION DE CLASSES AVEC HERITAGE (un fichier par classe)](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#creation-de-classes-avec-heritage-un-fichier-par-classe) * [CREATION DE L’APPLICATION (seance6.php)](https://cours.davidannebicque.fr/programmation-orientee-objet-en-php/decouverte/seance-6#creation-de-lapplication-seance6.php) Copier //Source H. Boulet //Classe fille de B final class C extends B { //Propriétés public $prop4; //constructeur public function __construct($a1, $a2, $a3, $a4) { parent::__construct($a1, $a2, $a3); $this->prop4 = $a4; } } Copier //Source H. Boulet //Classe Parent abstract class A { //Propriétés public mixed $prop1; public mixed $prop2; // Propriété de la classe static int $nbinstances; //constructeur public function __construct($a1, $a2) { $this->prop1 = $a1; $this->prop2 = $a2; //incrémentation du nombre d'instances self::$nbinstances++; } //destructeur public function __destruct() { //décrémente le nombre d'instances self::$nbinstances--; } public function lireProprietes(): string { return 'Propriété 1 :'.$this->prop1.', Propriété 2 :'.$this->prop2; } } Copier lireProprietes(); //impossible car l'instanciation est impossible Copier '; echo 'Instanciation impossible'.'
'; echo '
'; $vehicule2=new Voiture('T',5,'Renault',90); echo 'Véhicule2 est un objet de '.get_class($vehicule2).'
'; echo $vehicule2->lirecaracteristiques(); echo '
'; echo '
'; $vehicule3=new Voiture('E',7,'Tesla',450); echo 'Véhicule3 est un objet de '.get_class($vehicule3).'
'; echo $vehicule3->lirecaracteristiques(); echo '
'; echo '
'; $vehicule4=new VoitureDeSport('T',2,'Porsche',300,5); echo 'Véhicule4 est un objet de '.get_class($vehicule4).'
'; echo $vehicule4->lirecaracteristiques(); echo '
'; echo '
'; $vehicule5=new VoitureTourisme('T',4,'Fiat',70,5.5); echo 'Véhicule5 est un objet de '.get_class($vehicule5).'
'; $vehicule5->utiliser(6000); echo $vehicule5->lirecaracteristiques(); echo '
'; echo '
'; $vehicule6=new Camion('T',1,16,2); echo 'Véhicule6 est un objet de '.get_class($vehicule6).'
'; echo $vehicule6->lirecaracteristiques(); echo '
'; echo '
'; $vehicule7=new Camion('T',1,24,3); echo 'Véhicule7 est un objet de '.get_class($vehicule7).'
'; echo $vehicule7->lirecaracteristiques(); echo '
'; echo '
'; echo 'Nombre d\'objets (instances) : '.VehiculeAMoteur::$nbvehicules; ?> --- # Exercice datavisualisation 1 | SAE 303 - Dataviz ![](https://cours.davidannebicque.fr/sae-303-dataviz/~gitbook/image?url=https%3A%2F%2F1053960988-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F4y0c1qg0LRWvB5mvLa20%252Fuploads%252Fh5j1ExQBZoeItdQ0i1ht%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202023-10-17%2520a%25CC%2580%252014.58.19.png%3Falt%3Dmedia%26token%3Dcacc2332-b628-470b-b099-c7dc2c9c2438&width=768&dpr=3&quality=100&sign=81ab7ad&sv=2) [PrécédentCours magistral 1 - Donner du sens aux donnéeschevron-left](https://cours.davidannebicque.fr/sae-303-dataviz/cours-dolivier-cherain/cours-magistral-1-donner-du-sens-aux-donnees) [SuivantExercice datavisualisation 2chevron-right](https://cours.davidannebicque.fr/sae-303-dataviz/cours-dolivier-cherain/exercice-datavisualisation-2) Mis à jour il y a 1 an --- # Séance 4 | Accessibilité numérique [Webpackarrow-up-right](https://webpack.js.org/) est un automatiseur (ou encore _module bundler)_ de tâches, pour le "front", qui vous permet de fusionner plusieurs fichiers CSS, plusieurs fichiers javascript, de minifier le JS ou le CSS, de transformer du code typeScript, Ecmas, ... en du javascript compréhensible par tous les navigateurs, de compiler du SCC/SASS en du CSS, ... circle-info Pour fonctionner, vous devez avoir [NodeJsarrow-up-right](https://nodejs.org/en/) d'installé sur votre serveur (ou dans votre environnement de travail) [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#principe-de-fonctionnement) Principe de fonctionnement --------------------------------------------------------------------------------------------------------------------------------------- ![](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2F472912620-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-MSl4NYgztlnU5U8_iKk%252F-MVAN_bsLVikgRVkIPyS%252F-MVAOeiMq3Qz0Z0gQDIl%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202021-03-07%2520a%25CC%2580%252007.35.52.png%3Falt%3Dmedia%26token%3De2c7af6d-ba03-4822-bc54-1381513555d2&width=768&dpr=3&quality=100&sign=bf5bff1e&sv=2) Image d'illustration du fonctionnement de Webpack (source site webpack) Comme le montre le schéma ci-dessus, l'intérêt de Webpack est de prendre tous les éléments de votre projet (avec les dépendances, les différents formats, ...) et de les préparer, compiler, optimiser pour vous donner en sortie, les formats standards pour les navigateurs (JS, CSS, et images). [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#premiere-mise-en-place) Première mise en place ------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#pre-requis) Pré-requis Installer NodeJs (version 10.13 minimum). Pour vous en assurer Normalement NPM est installé automatiquement avec NodeJS (mais vous pouvez aussi utiliser Yarn) Si votre projet n'est pas encore gérer avec npm (vous n'avez pas de gestion de dépendance, et donc pas de package.json à la racine de votre projet), vous devez initialiser votre répertoire Et ensuite installer Webpack : L'idée est ensuite d'avoir un fichier qui va regrouper toutes les dépendances (souvent nommé index.js ou app.js), c'est ce fichier que WebPack utilisera pour "comprendre" votre projet. ### [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#premiere-utilisation) Première utilisation Pour une première mise en place, on peut se baser sur le guide officiel ici : [https://webpack.js.org/guides/getting-started/arrow-up-right](https://webpack.js.org/guides/getting-started/) Dans ce guide vous trouverez comment mettre en place le fichier de configuration de webpack (webpack.config.js) qui sera l'élément principal de la configuration. ### [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#et-ensuite) Et ensuite ? A ce stade de la configuration Webpack ne gère pas encore beaucoup de choses. Uniquement le JS, mais sans minification, pas de CSS, ... Il va donc falloir ajouter les règles (des loaders) pour les différents éléments que vous souhaitez gérer. #### [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#css) CSS [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fwebpack.js.org%2Ficon_512x512.png&width=20&dpr=3&quality=100&sign=597f4f5&sv=2)Asset Management | webpackwebpackchevron-right](https://webpack.js.org/guides/asset-management/#loading-css) Et la minification du CSS [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fwebpack.js.org%2Ficon_512x512.png&width=20&dpr=3&quality=100&sign=597f4f5&sv=2)MiniCssExtractPlugin | webpackwebpackchevron-right](https://webpack.js.org/plugins/mini-css-extract-plugin/#minimizing-for-production) Si vous travailler avec du SASS/SCSS, il vous faudra expliquer à webpack comment le compiler en du CSS : [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fwebpack.js.org%2Ficon_512x512.png&width=20&dpr=3&quality=100&sign=597f4f5&sv=2)sass-loader | webpackwebpackchevron-right](https://webpack.js.org/loaders/sass-loader/) Vous pouvez gérer de la même manière vos images, vos polices, ... [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#quelques-ressources) Quelques ressources ------------------------------------------------------------------------------------------------------------------------- Configuration d'un projet complet avec Webpack 5 Un autre tuto, écrit et pas à pas : [A mostly complete guide to webpack 5 (2020)Valentino Gagliardi's Blogchevron-right](https://www.valentinog.com/blog/webpack/) Une série de tutos sur Webpack 4 en français [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fgrafikart.fr%2Ffavicons%2Ficon-128x128.png&width=20&dpr=3&quality=100&sign=d402be9c&sv=2)Formation Comprendre WebpackGrafikart.frchevron-right](https://grafikart.fr/formations/webpack) triangle-exclamation Attention cette série de vidéo est faite avec Webpack 4. Il peut y avoir des changements plus ou moins importants avec Webpack 5. (voir ici : [https://webpack.js.org/migrate/5/arrow-up-right](https://webpack.js.org/migrate/5/) ) [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#alternatives-a-webpack) Alternatives à Webpack ------------------------------------------------------------------------------------------------------------------------------- Webpack est sans doute la solution la plus connue actuellement, mais aussi probablement la plus complexe (parce que très complète). Avant Webpack, beaucoup d'autres solutions existaient, et vous pourrez rencontrer par exemple : [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fparceljs.org%2Ffavicon.fe6f9d11.ico&width=20&dpr=3&quality=100&sign=e3567ac3&sv=2)Parcel – The zero configuration build tool for the web.parceljschevron-right](https://parceljs.org/) [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fgulpjs.com%2Fimg%2Ffavicon.png&width=20&dpr=3&quality=100&sign=710406f1&sv=2)gulp.jsgulpjs.comchevron-right](https://gulpjs.com/) [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fgruntjs.com%2Fimg%2Ffavicons%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=99b8e409&sv=2)Grunt: The JavaScript Task Runnergruntjschevron-right](https://gruntjs.com/) Chacun apportant son interprétation et sa complexité, mais répondant généralement parfaitement aux besoins basiques (compressions, fusion, traduction de code). [PreviousSéance 3chevron-left](https://cours.davidannebicque.fr/accessibilite-numerique/seance-3) [NextSéance 5chevron-right](https://cours.davidannebicque.fr/accessibilite-numerique/seance-5) Last updated 4 years ago Was this helpful? * [Principe de fonctionnement](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#principe-de-fonctionnement) * [Première mise en place](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#premiere-mise-en-place) * [Pré-requis](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#pre-requis) * [Première utilisation](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#premiere-utilisation) * [Et ensuite ?](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#et-ensuite) * [Quelques ressources](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#quelques-ressources) * [Alternatives à Webpack](https://cours.davidannebicque.fr/accessibilite-numerique/seance-4#alternatives-a-webpack) Was this helpful? Copy node -v Copy npm -v Copy cd votreProjet npm init Copy npm install webpack webpack-cli --save-dev --- # Mise en place d'une supervision | BUT INFO / C# / Embarqué La supervision est une technique industrielle de suivi et de pilotage informatique de procédés de fabrication automatisés. La supervision concerne l'acquisition de données (mesures, alarmes, retour d'état de fonctionnement) et des paramètres de commande des processus généralement confiés à des automates programmables. * Informer l'utilisateur de l'état d'un système, * L'informer des données issues des capteurs (entrées), * L'informer des actionneurs activés, * Proposer des graphiques, des statistiques, des informations ![](https://cours.davidannebicque.fr/but-info/~gitbook/image?url=https%3A%2F%2F1040930847-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-M-BFEAuHC4UaCNW_RvV%252F-M1d-kR3ohfzjEScvxZz%252F-M1d0XvfeRpAjSiuoWly%252Fsupervision1.jpg%3Falt%3Dmedia%26token%3D57bcbc4d-2f2a-45ff-8b67-9c6605d92f77&width=768&dpr=3&quality=100&sign=bcf3f1c5&sv=2) Exemple1 ![](https://cours.davidannebicque.fr/but-info/~gitbook/image?url=https%3A%2F%2F1040930847-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-M-BFEAuHC4UaCNW_RvV%252F-M1d-kR3ohfzjEScvxZz%252F-M1d0awMsOuG7O9CSLYz%252Fsupervision2.png%3Falt%3Dmedia%26token%3D43109efc-ef05-40fc-9cd4-b5f60658fd47&width=768&dpr=3&quality=100&sign=c187f263&sv=2) Exemple 2 ![](https://cours.davidannebicque.fr/but-info/~gitbook/image?url=https%3A%2F%2F1040930847-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-M-BFEAuHC4UaCNW_RvV%252F-M1d-kR3ohfzjEScvxZz%252F-M1d0f3H3m-NmByVQ8Yd%252Fsupervision3.png%3Falt%3Dmedia%26token%3D3351e2df-ba3d-4113-8bba-7f58fc74a040&width=768&dpr=3&quality=100&sign=f9066ba0&sv=2) Exemple 3 ![](https://cours.davidannebicque.fr/but-info/~gitbook/image?url=https%3A%2F%2F1040930847-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-M-BFEAuHC4UaCNW_RvV%252F-M1d-kR3ohfzjEScvxZz%252F-M1d11pOCLNGlYvPqTrf%252Fth.jpeg%3Falt%3Dmedia%26token%3D3692e714-9c74-44e0-9e34-da2a66e0bf65&width=768&dpr=3&quality=100&sign=aed625f0&sv=2) Exemple en .Net [hashtag](https://cours.davidannebicque.fr/but-info/supervision#en-pratique-avec-homeio-et-c) En pratique avec HomeIO et C# -------------------------------------------------------------------------------------------------------------------------------- * On va ajouter une méthode qui sera exécutée à chaque cycle d'automate (comme nos programmes volets, garages, ...) * A chaque cycle : * on va lire les actionneurs/capteurs que l'on souhaite visualiser * on va mettre à jour notre interface graphique * On pourrait ajouter des actions depuis notre interface. Cela serait alors à considérer comme des entrées dans nos programmes et utilisable dans nos équations. ### [hashtag](https://cours.davidannebicque.fr/but-info/supervision#exemple) Exemple L'exemple ci=dessous affiche l'état du volet par un texte. ![](https://cours.davidannebicque.fr/but-info/~gitbook/image?url=https%3A%2F%2F1040930847-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-M-BFEAuHC4UaCNW_RvV%252Fuploads%252FsjJpMGASChyOrkMKnjl1%252FCaptureSupervision.PNG%3Falt%3Dmedia%26token%3Db17fa816-7842-4256-adef-4fac0b9a9253&width=768&dpr=3&quality=100&sign=664d48f0&sv=2) Exemple de supervision minimaliste Il faut ajouter un label (ou un objet de votre choix), ici il se nomme etatVoletA Cette méthode ne gère que l'affichage du volet A. N'oubliez pas de l'ajouter dans votre méthode exécutée par le timer [PreviousGestion de la porte de garagechevron-left](https://cours.davidannebicque.fr/but-info/gestion-de-la-porte-de-garage) [NextScénarios à intégrerchevron-right](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer) Last updated 11 months ago Was this helpful? * [En pratique avec HomeIO et C#](https://cours.davidannebicque.fr/but-info/supervision#en-pratique-avec-homeio-et-c) * [Exemple](https://cours.davidannebicque.fr/but-info/supervision#exemple) Was this helpful? Copy private void runSupervision() { float openess = MemoryMap.Instance.GetFloat(3, MemoryType.Input).Value; if (openess == 0.0) { //fermé etatVoletA.Content = "Volets fermés"; } else if(openess == 10.0) { //ouvert etatVoletA.Content = "Volets ouverts"; } else { //en mouvement (ou bloqué dans un état intermédiaire). etatVoletA.Content = "Volets en mouvement"; } } Copy private void dispatcherTimer_Tick(object sender, EventArgs e) { runCycleApi(); runCycleApiStores(); runPorteGarage(); runSupervision(); } --- # Scénarios à intégrer | BUT INFO / C# / Embarqué [hashtag](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer#levaluation) L'évaluation ------------------------------------------------------------------------------------------------------- L'évaluation se fera sur un projet avec les élements suivants : * Scénario de la lampe, des volets et du garage vus en cours * Ajout de la gestion du portail (voir scénario 4 ci-après). * Ajout d'un scénario libre de votre choix * Mise en place d'une supervision [hashtag](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer#scenario-4-pilotage-de-la-porte-de-garage-et-du-portail) SCÉNARIO 4 : Pilotage de la porte de garage et du portail ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Cahier des charges : Un appui sur le bouton 1 de la télécommande ouvre la porte du garage et le portail simultanément, après une temporisation de 5 secondes en position ouverte pour la porte du garage et 1 seconde pour le portail, chaque porte se referme. Une fois la porte et le portail refermés le cycle reprend au départ et attend un appui sur le bouton 1. [On pourra fortement s'inspirer du grafcet donnée sur ce lienarrow-up-right](https://realgames.co/docs/homeio/fr/gate-control/index.html) 1. Proposer le grafcet 2. Traduire le grafcet en équations 3. Coder les équations [hashtag](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer#scenario-5-libre) SCÉNARIO 5 : libre ------------------------------------------------------------------------------------------------------------------ Par exemple : simuler en fonction de l'heure de la présence dans la maison (ouverture des stores le matin, fermeture le soir, gestion de l'éclairage, ...). Vous pouvez intégrer n'importe quel scénario de votre choix. Il doit malgré tout être un minimum ambitieux et différent de ceux vus en cours. La commande des équipements se fera idéalement en respectant le cycle d'un API, mais vous êtes libres de la méthode. [hashtag](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer#supervision) **SUPERVISION** ---------------------------------------------------------------------------------------------------------- La supervision est une technique industrielle de suivi et de pilotage informatique de procédés de fabrication automatisés. La supervision concerne l'acquisition de données (mesures, alarmes, retour d'état de fonctionnement) et des paramètres de commande des processus généralement confiés à des automates programmables. Informer l'utilisateur de l'état d'un système, * L'informer des données issues des capteurs (entrées), * L'informer des actionneurs activés, * Proposer des graphiques, des statistiques, des informations Vous mettrez donc en place une supervision permettant de voir l'état d'au moins 2 pièces de la maison. [hashtag](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer#evaluation) **EVALUATION** -------------------------------------------------------------------------------------------------------- Evaluation dans la dernière heure de la dernière séance. Les points pris en compte sont les suivants * Intégration des scénarios (lumière, store(s), garage), sous la forme logique (équations du grafcet) * Supervision de l'état de la maison (vue graphique) Apportera des points supplémentaires * Scénarios supplémentaires * Qualité de la supervision [hashtag](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer#bareme) **BARÈME** ------------------------------------------------------------------------------------------------ * Intégration des scénarios du cours (lampe, volet, garage) : 5 points * Intégration du scénario garage + portail : 3 points * Supervision basique (affichage simple d'au moins 2 pièces de la maison) : 4 points * Ajout d'un scénario de votre choix : 4 points * Ajout d'une supervision plus complète (travail de mise en page, réflexion sur les données affichées, ...) et d'informations générales (températures, consommation électrique, ...), avec un effort de présentation : 4 points ![](https://cours.davidannebicque.fr/but-info/~gitbook/image?url=https%3A%2F%2F1040930847-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-legacy-files%2Fo%2Fassets%252F-M-BFEAuHC4UaCNW_RvV%252F-MVV1UUbpmN9EhVk1Fv9%252F-MVV1pKMRotx5c0n7WZO%252FCapturewpf.PNG%3Falt%3Dmedia%26token%3Dd5541e73-4ef8-4e57-abdd-4a7d60f95fc4&width=768&dpr=3&quality=100&sign=b99b52e8&sv=2) Exemple de supervision "basique" [PreviousMise en place d'une supervisionchevron-left](https://cours.davidannebicque.fr/but-info/supervision) [NextAstuces WPFchevron-right](https://cours.davidannebicque.fr/but-info/astuces-wpf) Last updated 11 months ago Was this helpful? * [L'évaluation](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer#levaluation) * [SCÉNARIO 4 : Pilotage de la porte de garage et du portail](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer#scenario-4-pilotage-de-la-porte-de-garage-et-du-portail) * [SCÉNARIO 5 : libre](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer#scenario-5-libre) * [SUPERVISION](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer#supervision) * [EVALUATION](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer#evaluation) * [BARÈME](https://cours.davidannebicque.fr/but-info/scenarios-a-integrer#bareme) Was this helpful? --- # Séance 5 : State avancé (Pinia) | Vue.js BUT [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#objectifs) 🎯 Objectifs ------------------------------------------------------------------------------------------------------------------- * Mettre en place un store global avec Pinia. * Persister l’état dans le navigateur. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#quest-ce-quun-store-en-vue.js) 📖 Qu'est-ce qu'un store en Vue.js ? --------------------------------------------------------------------------------------------------------------------------------------------------------------- Un **store** est un conteneur centralisé pour l'état (données) partagé d'une application. Plutôt que de faire transiter des données via des props entre de nombreux composants (prop drilling), le store fournit une "source unique de vérité" (single source of truth) accessible depuis n'importe quel composant. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#objectifs-pedagogiques-de-cette-section) Objectifs pédagogiques de cette section * Comprendre le rôle d'un store dans une application SPA. * Connaître les concepts clés (state, getters, actions, mutations/actions selon l'implémentation). * Savoir quand et pourquoi utiliser un store. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#principaux-concepts) Principaux concepts * State : l'ensemble des données partagées (par ex. utilisateur courant, liste d'items, paramètres UI). * Getters (ou computed) : fonctions dérivées qui lisent le state et renvoient des valeurs calculées. * Actions/Mutations : fonctions (souvent asynchrones) qui modifient le state ou appellent des APIs. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#pourquoi-utiliser-un-store) Pourquoi utiliser un store ? * Centralisation : évite les incohérences et facilite le debug. * Réutilisabilité : plusieurs composants peuvent lire/écrire le même état sans duplication, cela réduit les appels de données. * Prévisibilité : les changements d'état sont centralisés et prévisibles. * Testabilité : la logique métier est isolée dans des actions testables. * Persistance : simple à combiner avec localStorage/IndexedDB pour sauvegarder la session. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#bonnes-pratiques) Bonnes pratiques * Garder le store simple : ne pas y placer du code UI. * Nommer clairement les getters/actions. * Gérer les erreurs et les états de chargement dans le store. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#edge-cases-pieges) Edge cases / pièges * Ne pas tout placer dans le store : certains états restent locaux au composant (e.g. champ de formulaire non validé). * Persistance : attention aux champs sensibles (tokens) — stocker en localStorage nécessite des précautions de sécurité. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#pinia) Pinia -------------------------------------------------------------------------------------------------------- Pinia (https://pinia.vuejs.org/) est le store officiel recommandé pour Vue 3. Il s'appuie sur la Composition API et propose une API légère et expressive. Points forts de Pinia : * API simple et proche de la Composition API (hooks-like). * Support natif du typage TypeScript. * Plugins faciles à ajouter (persist, devtools, plugins pour SSR). * Pas de notion lourde de "mutations" : les actions modifient directement le state (moins de verbosité qu'avec Vuex). Cas d'usage typiques : * Authentification et gestion de session. * Données partagées entre vues (panier, préférences utilisateur). * Caching d'appels API et logique métier centralisée. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#exemple-dun-store-pinia) Exemple d'un store Pinia --------------------------------------------------------------------------------------------------------------------------------------------- **Utilisation dans un composant :** ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#stores-composables-et-services) Stores, composables et services Il est important de distinguer les rôles des stores, des composables et des services dans une application Vue.js : * **Store** : conteneur d’état global réactif (single source of truth) partagé par plusieurs composants (ex. Pinia). * **Service** : module / classe responsable d’une logique métier ou d’accès aux APIs ; souvent non‑réactif et sans état UI. * **Composable** : fonction réutilisable basée sur la Composition API qui encapsule de la logique réactive liée à un comportement ou une fonctionnalité. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#tableau-de-synthese-store-vs-service-vs-composable) Tableau de synthèse — store vs service vs composable ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Voici un tableau compact pour comparer rapidement les trois concepts. Concept But principal Portée / cycle de vie Réactivité Accès depuis Exemple court Quand l'utiliser Store (Pinia) Contenir et partager l'état applicatif (single source of truth) Global, vie de l'app, persistable Oui (state réactif, getters) Tous composants, composables, services `useAuthStore()` (user, token, actions) État partagé (auth, panier, préférences), besoin de persistance/consistance Service Encapsuler la logique métier / appels API Module réutilisable, généralement stateless Non (retourne Promises/données) Stores, composables, composants `taskService.fetchTasks()` (fetch/axios wrapper) Isolation des appels API et logique métier, tests unitaires Composable Factoriser de la logique réactive liée à une fonctionnalité Scoped / feature-level, réutilisable Oui (utilise `ref`/`reactive`) Composants et autres composables `useToggle()`, `useForm()` Logique UI réutilisable, hooks locaux, encapsulation de comportements ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#recommandations-rapides) Recommandations rapides * Architecture recommandée : Services (API) → Stores (état & cache) → Composables (logique UI réactive). * Tests : tester les services (unitaires), les actions de store (intégration/unité) et les composables (unitaires). * Persistance & sécurité : gérer la persistance dans les stores ou via plugins dédiés ; ne pas stocker de secrets sans précautions. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#persister-letat-avec-pinia) Persister l'état avec Pinia Pinia propose des plugins pour persister automatiquement l'état dans le `localStorage` ou `sessionStorage`. Voici un exemple avec `pinia-plugin-persistedstate` (https://prazdevs.github.io/pinia-plugin-persistedstate/). Avec cette configuration, l'état du store `auth` sera automatiquement sauvegardé dans le `localStorage` et restauré au rechargement de la page. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#exercice) Exercice -------------------------------------------------------------------------------------------------------------- * Créez un store Pinia pour gérer une liste de tâches (CRUD). * Ajoutez la persistance dans le `localStorage`. * Utilisez ce store dans un composant pour afficher et modifier les tâches. * Indiquez sur les différentes pages le nombre de tâches restantes (getter). [PreviousSéance 4 : Router et navigationchevron-left](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation) [NextSéance 6-a : TypeScriptchevron-right](https://cours.davidannebicque.fr/vue.js-but/but3/seance-6-a-typescript) Last updated 4 months ago * [🎯 Objectifs](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#objectifs) * [📖 Qu'est-ce qu'un store en Vue.js ?](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#quest-ce-quun-store-en-vue.js) * [Objectifs pédagogiques de cette section](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#objectifs-pedagogiques-de-cette-section) * [Principaux concepts](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#principaux-concepts) * [Pourquoi utiliser un store ?](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#pourquoi-utiliser-un-store) * [Bonnes pratiques](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#bonnes-pratiques) * [Edge cases / pièges](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#edge-cases-pieges) * [Pinia](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#pinia) * [Exemple d'un store Pinia](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#exemple-dun-store-pinia) * [Stores, composables et services](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#stores-composables-et-services) * [Tableau de synthèse — store vs service vs composable](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#tableau-de-synthese-store-vs-service-vs-composable) * [Recommandations rapides](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#recommandations-rapides) * [Persister l'état avec Pinia](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#persister-letat-avec-pinia) * [Exercice](https://cours.davidannebicque.fr/vue.js-but/but3/seance-5-state-avance-pinia#exercice) Copy // stores/auth.js import { defineStore } from 'pinia' import { ref, computed } from 'vue' export const useAuthStore = defineStore('auth', () => { const user = ref(null) const token = ref(null) const loading = ref(false) const error = ref(null) const isAuthenticated = computed(() => !token.value) const login = async (credentials) => { loading.value = true error.value = null try { // Exemple simplifié - remplacer par appel réel await new Promise(resolve => setTimeout(resolve, 500)) token.value = 'fake-jwt-token' user.value = { id: 1, name: 'Alice' } // Persister (on verra plus tard avec un plugin) localStorage.setItem('token', token.value) localStorage.setItem('user', JSON.stringify(user.value)) return true } catch (err) { error.value = 'Erreur de connexion' return false } finally { loading.value = false } } const logout = () => { token.value = null user.value = null localStorage.removeItem('token') localStorage.removeItem('user') } return { user, token, loading, error, isAuthenticated, login, logout } }) Copy Copy // main.js import { createApp } from 'vue' import { createPinia } from 'pinia' import piniaPersistedstate from 'pinia-plugin-persistedstate' import App from './App.vue' const app = createApp(App) const pinia = createPinia() pinia.use(piniaPersistedstate) app.use(pinia) app.mount('#app') Copy // stores/auth.js import { defineStore } from 'pinia' import { ref } from 'vue' export const useAuthStore = defineStore('auth', () => { const user = ref(null) const token = ref(null) function login(newUser, newToken) { user.value = newUser token.value = newToken } function logout() { user.value = null token.value = null } return { user, token, login, logout } }, { persist: true // active la persistance automatique }) Copy // Dans un composant --- # Bibliographie / Sitographie | Accessibilité numérique RGAA * [RGAA 3.0 Grille d'Auditarrow-up-right](http://davidannebicque.fr/wp-content/uploads/2017/02/rgaa3.0.grille-de-test-full-1.xlsx) * [RGAA 4.0 Grille d'Auditarrow-up-right](https://www.numerique.gouv.fr/publications/rgaa-accessibilite/kit/#contenu) Opquast La checklist : [https://checklists.opquast.com/fr/assurance-qualite-web/arrow-up-right](https://checklists.opquast.com/fr/assurance-qualite-web/) Couleur Le contraste doit être **d'au moins 4.5**. Les outils suivants vous permettent de le mesurer. [https://www.handi-pratique.com/contraste-couleurs-accessibilite-webarrow-up-right](https://www.handi-pratique.com/contraste-couleurs-accessibilite-web) [https://web-color.aliasdmc.fr/contraste-couleur-text-fond-wcag.phparrow-up-right](https://web-color.aliasdmc.fr/contraste-couleur-text-fond-wcag.php) [https://gmazzocato.altervista.org/fr/colorwheel/wheel.phparrow-up-right](https://gmazzocato.altervista.org/fr/colorwheel/wheel.php) [http://paletton.com/#uid=1000u0kllllaFw0g0qFqFg0w0aFarrow-up-right](http://paletton.com/#uid=1000u0kllllaFw0g0qFqFg0w0aF) Site Niveau Or : [https://www.filblanc.fr/pages/presentation-fil-blanc.phparrow-up-right](https://www.filblanc.fr/pages/presentation-fil-blanc.php) Firefox : [https://developer.mozilla.org/fr/docs/Accessibilit%C3%A9arrow-up-right](https://developer.mozilla.org/fr/docs/Accessibilit%C3%A9) DEMO: [https://www.atalan.fr/agissons/fr/arrow-up-right](https://www.atalan.fr/agissons/fr/) Audit: [https://www.lafabriquedunet.fr/creation-site-vitrine/articles/guide-accessibilite-site-web/arrow-up-right](https://www.lafabriquedunet.fr/creation-site-vitrine/articles/guide-accessibilite-site-web/) [https://webaccessibility.com/arrow-up-right](https://webaccessibility.com/results) Kit [http://references.modernisation.gouv.fr/kit-daudit-modeles-pour-faire-des-audits-rgaa-3arrow-up-right](http://references.modernisation.gouv.fr/kit-daudit-modeles-pour-faire-des-audits-rgaa-3) [http://www.accessiweb.org/index.php/accessiweb\_2.2\_liste\_generale.html#elementsarrow-up-right](http://www.accessiweb.org/index.php/accessiweb_2.2_liste_generale.html#elements) Outils [https://www.smashingmagazine.com/2021/06/complete-guide-accessibility-tooling/?s=03arrow-up-right](https://www.smashingmagazine.com/2021/06/complete-guide-accessibility-tooling/?s=03) [https://www.technologie-handicap-accessibilite.net/dossiers/accessibilite-web/accessibilite-web-les-normes/arrow-up-right](https://www.technologie-handicap-accessibilite.net/dossiers/accessibilite-web/accessibilite-web-les-normes/) [https://4design.xyz/outils-en-ligne-pour-verifier-accessibilite-de-votre-site-webarrow-up-right](https://4design.xyz/outils-en-ligne-pour-verifier-accessibilite-de-votre-site-web) [https://blog.ipedis.com/ameliorer-accessibilite-numerique-site-webarrow-up-right](https://blog.ipedis.com/ameliorer-accessibilite-numerique-site-web) [https://www.ionos.fr/digitalguide/sites-internet/developpement-web/lecteurs-decran-logiciels-pour-malvoyants-et-non-voyants/arrow-up-right](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/lecteurs-decran-logiciels-pour-malvoyants-et-non-voyants/) [https://www.paris-web.fr/2016/conferences/laccessibilite-decomplexee---ce-quelle-peut-faire-pour-vous.phparrow-up-right](https://www.paris-web.fr/2016/conferences/laccessibilite-decomplexee---ce-quelle-peut-faire-pour-vous.php) [https://www.egalitech.org/arrow-up-right](https://www.egalitech.org/) ### [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/ressources/bibliographie-sitographie#design-et-accessibilite) Design et Accessibilité [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fdesign-accessible.fr%2Fassets%2Ffavicons%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=c6e77f16&sv=2)Design AccessibleDesign Accessiblechevron-right](https://design-accessible.fr/?s=03) ### [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/ressources/bibliographie-sitographie#eco-conception) Eco-Conception [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Falexsoyes.com%2Fwp-content%2Fuploads%2F2021%2F09%2Flogo-fav.svg&width=20&dpr=3&quality=100&sign=3abbd446&sv=2)Éco-conception web : Coder un site écologique 🌱 – Alex so yesAlex so yeschevron-right](https://alexsoyes.com/eco-conception-web?s=03) [PreviousAstuces pour vos IDEchevron-left](https://cours.davidannebicque.fr/accessibilite-numerique/astuces-pour-vos-ide) [NextOutils de navigateurchevron-right](https://cours.davidannebicque.fr/accessibilite-numerique/ressources/outils-de-navigateur) Last updated 4 years ago Was this helpful? * [Design et Accessibilité](https://cours.davidannebicque.fr/accessibilite-numerique/ressources/bibliographie-sitographie#design-et-accessibilite) * [Eco-Conception](https://cours.davidannebicque.fr/accessibilite-numerique/ressources/bibliographie-sitographie#eco-conception) Was this helpful? --- # Outils de navigateur | Accessibilité numérique Plusieurs plugin de navigateur sont disponible. Nativement Chrome en intègre un dans les outils de développement, vous pourriez aussi ajouter : WAVE (qui surcharge la page); AXE qui ajoute un onglet dans la barre d'outil développeur du navigateur Chrome ou Firefox [PreviousBibliographie / Sitographiechevron-left](https://cours.davidannebicque.fr/accessibilite-numerique/ressources/bibliographie-sitographie) Last updated 5 years ago Was this helpful? Was this helpful? --- # Séance 10 : Projet – Kick-off réseau social | Vue.js BUT [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#objectifs) 🎯 Objectifs ------------------------------------------------------------------------------------------------------------------------------- * Lancer projet Nuxt/VueJs Social App. * Mettre en place authentification + channels. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#partie-theorique) 📖 Partie théorique --------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#presentation-du-projet) Présentation du projet * Mini-réseau social type Slack/Discord/... * Fonctionnalités principales : channels, publications (et réponses), authentification, système de like. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#architecture) Architecture * Frontend : Nuxt ou VueJs * Backend : API Platform (fourni) ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#endpoints-principaux) Endpoints principaux * `/auth/login` : authentification * `/channels` : gestion des salons * `/publications?channelId=...` : messages filtrés par salon * ... (voir documentation API fournie) [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#travaux-pratiques) 📝 Travaux pratiques ----------------------------------------------------------------------------------------------------------------------------------------------- * Créer projet Nuxt/VueJs Social App. * Mettre en place les différentes pages (login, channels, publications, ...). * Toutes les fonctionnalités utiles et nécessaires pour ce type d'application * Implémenter l'authentification et toutes les fonctionnalités utiles dans ce processus (login, logout, gestion du token, mot de passe perdu, inscription, ...). [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#evaluation-du-projet) Evaluation du projet -------------------------------------------------------------------------------------------------------------------------------------------------- * Critères : fonctionnalités, qualité du code, UI/UX, tests, accessibilité. * Mise en place de tests unitaires (un service, un composant ou un store) * Mise en place d'un test ent-to-end (la page de login, l'ajout d'une publication) * Livrables : code source (sur un git), démonstration. triangle-exclamation Rendu le 10 mars 2026 (évalution pendant la séance) [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#lien-de-lapi-fournie) Lien de l'API fournie --------------------------------------------------------------------------------------------------------------------------------------------------- L'API est commune à tous les groupes et dispose des endpoints REST classiques pour chaque ressource. Ainsi pour gérer les accès sans mélanger vos données un "slug" unique vous sera attribué (fourni par l'enseignant) et à utiliser dans toutes les URLs * Base URL : `https://wra506d.davidannebicque.ovh/api/{votre-slug}/...` Un code d'inscription vous sera également fourni pour créer des comptes utilisateurs (à intégrer dans dans vos formulaires d'inscription). La base de données est pré-remplie avec des utilisateurs, channels et publications pour les tests. Libre à vous d'ajouter/modifier/supprimer des données via l'API. Une interface Swagger est également disponible pour explorer/tester l'API : `https://wra506d.davidannebicque.ovh/api` et une interface vous permet de récupérer un token JWT pour un utilisateur existant : `https://wra506d.davidannebicque.ovh/`. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#url-globales) URL globales ---------------------------------------------------------------------------------------------------------------------------------- * **Connexion API** : `https://wra506d.davidannebicque.ovh/api/login` en envoyant en post les champs `email` et `password`, vous donnera un token JWT à utiliser dans les headers `Authorization: Bearer {token}` pour les appels suivants. * **Récupération de l'utilisateur courant** : `https://wra506d.davidannebicque.ovh/api/{slug}/users/me` avec le token JWT dans les headers, vous donnera les informations de l'utilisateur connecté. * **Inscription API** (sans slug) : `https://wra506d.davidannebicque.ovh/api/register` en envoyant en post les champs `displayName`, `email`, `password` et `codeInscription`, vous permettra de créer un nouvel utilisateur dans le bon workspace (slug). * **Inscription API** (avec slug) : `https://wra506d.davidannebicque.ovh/api/{slug}/register` en envoyant en post les champs `displayName`, `email`, `password`, vous permettra de créer un nouvel utilisateur dans le bon workspace (slug). [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#structure-de-lapi-rest) Structure de l'API REST ------------------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#channel-api-channels) Channel (/api/channels) * name : string * slug : string * tags : tableau, optionnel * description: text, optionnel * image : text (url), optionnel ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#publication-api-publications) Publication (/api/publications) * Author : User (géré par l'API) * Channel : Channel (à transmettre sous forme d'IRI) * title : string * body : string (contenu) * createdAt : datetime (géré par l'API) * updatedAt : datetime (géré par l'API) ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#comment-api-comments) Comment (/api/comments) * Author : User (géré par l'API) * Publication : Publication (à transmettre sous forme d'IRI) * body : string (contenu) * createdAt : datetime (géré par l'API) * updatedAt : datetime (géré par l'API) ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#user-api-users) User (/api/users) * displayName : string * email : string * password : string (non retourné par l'API) * avatar : string (URL de l'avatar) * createdAt : datetime (géré par l'API) ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#reaction-api-reactions) Reaction (/api/reactions) * type : string (like, love, etc.) * Author : User (géré par l'API) * publication : Publication (optionnel) * comment : Comment (optionnel) * createdAt : datetime (géré par l'API) ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#media-api-media) Media (/api/media) * owner : User (géré par l'API) * originalName : string * mimeType : string * size : integer (taille en octets) * path : string (URL du média) * createdAt : datetime (géré par l'API) * publication : Publication (optionnel) * comment : Comment (optionnel) [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#appel-api-avec-un-token-jwt) Appel API avec un token JWT ---------------------------------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#en-vuejs-avec-fetch) en VueJs avec fetch ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#en-nuxtjs-avec-usefetch) en NuxtJs avec useFetch [PreviousSéance 9 : Tests frontchevron-left](https://cours.davidannebicque.fr/vue.js-but/but3/seance-9-tests-front) [NextSéance 11 : Projet – Développementchevron-right](https://cours.davidannebicque.fr/vue.js-but/but3/seance-11-projet-developpement) Last updated 13 days ago * [🎯 Objectifs](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#objectifs) * [📖 Partie théorique](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#partie-theorique) * [Présentation du projet](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#presentation-du-projet) * [Architecture](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#architecture) * [Endpoints principaux](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#endpoints-principaux) * [📝 Travaux pratiques](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#travaux-pratiques) * [Evaluation du projet](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#evaluation-du-projet) * [Lien de l'API fournie](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#lien-de-lapi-fournie) * [URL globales](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#url-globales) * [Structure de l'API REST](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#structure-de-lapi-rest) * [Channel (/api/channels)](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#channel-api-channels) * [Publication (/api/publications)](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#publication-api-publications) * [Comment (/api/comments)](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#comment-api-comments) * [User (/api/users)](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#user-api-users) * [Reaction (/api/reactions)](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#reaction-api-reactions) * [Media (/api/media)](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#media-api-media) * [Appel API avec un token JWT](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#appel-api-avec-un-token-jwt) * [en VueJs avec fetch](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#en-vuejs-avec-fetch) * [en NuxtJs avec useFetch](https://cours.davidannebicque.fr/vue.js-but/but3/seance-10-projet-kick-off-reseau-social#en-nuxtjs-avec-usefetch) Copy const token = 'votre_token_jwt_ici'; fetch('https://wra506d.davidannebicque.ovh/api/ws-xx/channels', { headers: { 'Authorization': `Bearer ${token}` } }) .then(response => response.json()) .then(data => console.log(data)); Copy const token = 'votre_token_jwt_ici'; const { data, error } = await useFetch('https://wra506d.davidannebicque.ovh/api/ws-xx/channels', { headers: { 'Authorization': `Bearer ${token}` } }); --- # Séance 6 | Développement Front (S3) | MMI Nouméa Mettre en place les dernières pages du tunnel de commande : * Collecte de l'adresse de livraison et de facturation, coordonnées du client * Mise en place d'un formulaire de paiement (factice pour collecter le choix et les données associées) * Confirmation de la commande Ces formulaires étant sont essentiels pour la bonne réception de la commande et la satisfaction client. Il faut donc veiller à leur bon fonctionnement, à collecter que ce qui est nécessaire et à guider les usagers en cas d'erreurs. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6#preparation) Préparation #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6#creation-des-pages) Création des pages Ajoutez les pages nécessaires. Vous pouvez faire plusieurs pages (une par étape) ou un processus en une seule page. Dans les deux cas il est important d'indiquer aux utilisateurs où ils en sont dans le processus et combien d'étapes il reste à faire. #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6#collecte-des-informations) Collecte des informations Pour chaque page, définissez les informations à collecter. Pour chaque information, définissez les contraintes et les messages d'erreur. circle-info Consultez la documentation de bootstrap pour les formulaires [https://getbootstrap.com/docs/5.3/forms/overview/arrow-up-right](https://getbootstrap.com/docs/5.3/forms/overview/) ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6#exercice) Exercice * Mettre en place l'ensemble des éléments en HTML et CSS. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6#verification-des-donnees) Vérification des données La validation doit toujours se faire du côté serveur. Cela permet de s'assurer que les données sont valides et que le formulaire n'a pas été modifié. Malgré tout il est possible de faire une première validation du côté client pour éviter de faire des requêtes inutiles au serveur, et pour guider l'utilisateur. #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6#validation-cote-client) Validation côté client Il existe plusieurs librairie permettant de faire cela en JavaScript. Néanmoins, pour appréhender la logique, nous allons le mettre en place manuellement sur quelques vérifications simple. Les éléments que nous allons vérifier sont les suivants : * Le nom et le prénom ne doivent pas être vides * L'email doit être un email * L'adresse doit être saisie * Le code postal doit être un nombre à 5 chiffres * Le numéro de téléphone doit être un nombre à 6 chiffres #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6#mise-en-place) Mise en place Pour chaque champ, à valider, nous allons ajouter un événement `change` qui va vérifier la validité du champ et afficher un message d'erreur si nécessaire. Cet extrait de code va ajouter un événement `change` sur tous les éléments ayant la classe `validation`. Lorsque l'événement est déclenché, la fonction `validation` est appelée. Pour faciliter la vérification, on peut préciser sur chaque champs les éléments à controler. Le plus simple est de passer des attributs `data` sur les éléments. Pour récupérer ces attributs, on peut utiliser la propriété `dataset` de l'élément. Par exemple : En fonction du "type" on peut appeler la bonne méthode pour vérifier la validité de la valeur. Par exemple pour le type `text` : Si la valeur n'est pas valide on peut ajouter la class 'is-invalid' de bootstrap sur l'élément et afficher un message d'erreur précisant la nature de l'erreur sous le champs. circle-info Il peut aussi être intéressant d'indiquer qu'un champ est valide et pas juste qu'il y a une erreur. C'est d'autant plus important sur des données sensibles avec des informations "complexes" à saisir (mot de passe, numéro de carte bancaire, etc.). ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6#exercice-1) Exercice Mettre en place les vérifications sur vos différents formulaires [PreviousSéance 5chevron-left](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-5) [NextSéance 7chevron-right](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-7) Last updated 2 years ago * [Préparation](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6#preparation) * [Exercice](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6#exercice) * [Vérification des données](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6#verification-des-donnees) * [Exercice](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-6#exercice-1) Copy document.querySelectorAll('.validation').forEach((e) => { e.addEventListener('change', (e) => { console.log('validerr') validation(e) }) }) Copy Copy const validation = (e) => { const element = e.target const required = element.dataset.required const type = element.dataset.type const min = element.dataset.min const max = element.dataset.max const value = element.value console.log(required, type, min, max, value, id, error) } Copy const validationText = (value, min, max) => { if (value.length < min || value.length > max) { return false } return true } --- # Séance 2 - S1 - BUT MMI | Accessibilité numérique L'objectif de cette séance est d'apprendre à utiliser les bonnes balises HTML, pour produire un code de meilleure qualité, et plus accessible. Nous verrons notamment les bons usages pour les images, les tableaux et les formulaires. Ainsi que le choix d'une structure de page adaptée au contenu. circle-info L'objectif de cette séance n'est pas de se focaliser sur le CSS, mais uniquement sur le code HTML. [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi#images) Images ---------------------------------------------------------------------------------------------------------- ![](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2F472912620-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MSl4NYgztlnU5U8_iKk%252Fuploads%252F441HRAXyKnWmnw8mMJFe%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202021-11-11%2520a%25CC%2580%252019.11.51.png%3Falt%3Dmedia%26token%3D1913afcf-77d8-4d3a-a4fe-4c7c32e10412&width=768&dpr=3&quality=100&sign=644bb3fc&sv=2) Reproduire cette mise en page (avec l'image de votre choix) en écrivant un code HTML juste et de qualité [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fwww.w3schools.com%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=2252839c&sv=2)W3Schools.comwww.w3schools.comchevron-right](https://www.w3schools.com/tags/tag_figcaption.asp) Extrait de la documentation sur W3Schools.com [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi#tableaux) Tableaux -------------------------------------------------------------------------------------------------------------- ![](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2F472912620-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MSl4NYgztlnU5U8_iKk%252Fuploads%252FMyxxyYLDACtgAAIFzWMZ%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202021-11-11%2520a%25CC%2580%252019.09.59.png%3Falt%3Dmedia%26token%3D5bd00bb7-9cd0-4b99-a818-7b24057d466b&width=768&dpr=3&quality=100&sign=64f55783&sv=2) Reproduire cette mise en page (avec les données de votre choix) en écrivant un code HTML juste et de qualité. [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fwww.w3schools.com%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=2252839c&sv=2)W3Schools.comwww.w3schools.comchevron-right](https://www.w3schools.com/tags/tag_table.asp) Extrait de la documentation de W3Schools sur les tables [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fwww.w3schools.com%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=2252839c&sv=2)W3Schools.comwww.w3schools.comchevron-right](https://www.w3schools.com/tags/tag_caption.asp) Extrait de la documentation de W3Schools sur Caption [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi#listes) Listes ---------------------------------------------------------------------------------------------------------- ![](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2F472912620-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MSl4NYgztlnU5U8_iKk%252Fuploads%252F1EkbRMdBejFEO5fYP5F6%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202021-11-11%2520a%25CC%2580%252019.10.11.png%3Falt%3Dmedia%26token%3Df923a04f-2d04-4bc0-b316-0e88d72114ac&width=768&dpr=3&quality=100&sign=c0ca81d6&sv=2) Reproduire cette mise en page (avec les données de votre choix) en écrivant un code HTML juste et de qualité. [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fwww.w3schools.com%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=2252839c&sv=2)W3Schools.comwww.w3schools.comchevron-right](https://www.w3schools.com/tags/tag_dl.asp) Extrait de la documentation pour les listes "dl" [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi#formulaires) Formulaires -------------------------------------------------------------------------------------------------------------------- ![](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2F472912620-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LjKrFSyq65TEN9dTgPU%252Fuploads%252FTGbBCzG02W38D3LGcJwd%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202021-11-11%2520a%25CC%2580%252019.19.55.png%3Falt%3Dmedia%26token%3Dd7c7e8ff-0aa4-484c-8b91-50c94590782c&width=768&dpr=3&quality=100&sign=6f6266ae&sv=2) Reproduire cette mise en page (avec les données de votre choix) en écrivant un code HTML juste et de qualité. [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fwww.w3schools.com%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=2252839c&sv=2)W3Schools.comwww.w3schools.comchevron-right](https://www.w3schools.com/tags/tag_fieldset.asp) Extrait de la documentation pour la balise "fieldset" [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fwww.w3schools.com%2Fapple-touch-icon.png&width=20&dpr=3&quality=100&sign=2252839c&sv=2)W3Schools.comwww.w3schools.comchevron-right](https://www.w3schools.com/tags/tag_input.asp) Extrait de la documentation pour les champs "input" ### [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi#quelques-ressources) Quelques ressources [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fwww.smashingmagazine.com%2Fimages%2Ffavicon%2Ffavicon.ico&width=20&dpr=3&quality=100&sign=3516e915&sv=2)HTML5 Input Types: Where Are They Now? — Smashing MagazineSmashing Magazinechevron-right](https://www.smashingmagazine.com/2019/01/html5-input-types#a5) [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fwww.smashingmagazine.com%2Fimages%2Ffavicon%2Ffavicon.ico&width=20&dpr=3&quality=100&sign=3516e915&sv=2)UX And HTML5: Let’s Help Users Fill In Your Mobile Form (Part 1) — Smashing MagazineSmashing Magazinechevron-right](https://www.smashingmagazine.com/2018/08/ux-html5-mobile-form-part-1) [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fwww.smashingmagazine.com%2Fimages%2Ffavicon%2Ffavicon.ico&width=20&dpr=3&quality=100&sign=3516e915&sv=2)UX And HTML5: Let’s Help Users Fill In Your Mobile Form (Part 2) — Smashing MagazineSmashing Magazinechevron-right](https://www.smashingmagazine.com/2018/08/ux-html5-mobile-form-part-2) [![Logo](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2Fuicookies.com%2Fwp-content%2Fuploads%2F2017%2F08%2Fcropped-favicon-192x192.png&width=20&dpr=3&quality=100&sign=e5571b53&sv=2)36 Most Beautiful CSS Forms Designed By Top Designers 2026uiCookieschevron-right](https://uicookies.com/beautiful-css-forms) [hashtag](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi#page-complete) Page complète ------------------------------------------------------------------------------------------------------------------------ ![](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2F472912620-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LjKrFSyq65TEN9dTgPU%252Fuploads%252FeRJPFOHo8j1U3Z1QhG5M%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202021-11-11%2520a%25CC%2580%252019.41.09.png%3Falt%3Dmedia%26token%3Db88e22c2-32a9-4d05-ae37-f874ee336738&width=768&dpr=3&quality=100&sign=cfbc312f&sv=2) Page 1 ![](https://cours.davidannebicque.fr/accessibilite-numerique/~gitbook/image?url=https%3A%2F%2F472912620-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LjKrFSyq65TEN9dTgPU%252Fuploads%252F60F0xAe0oWnfeJFZEtrP%252FCapture%2520d%25E2%2580%2599e%25CC%2581cran%25202021-11-11%2520a%25CC%2580%252019.41.19.png%3Falt%3Dmedia%26token%3D9b9c150f-de10-4261-aee4-076e7fac44c2&width=768&dpr=3&quality=100&sign=908d758d&sv=2) Page 2 Pour les pages ci-dessus, quelles balises utiliseriez vous pour définir la structure globale ? [PreviousSéance 5chevron-left](https://cours.davidannebicque.fr/accessibilite-numerique/seance-5) [NextAstuces pour vos IDEchevron-right](https://cours.davidannebicque.fr/accessibilite-numerique/astuces-pour-vos-ide) Last updated 4 years ago Was this helpful? * [Images](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi#images) * [Tableaux](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi#tableaux) * [Listes](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi#listes) * [Formulaires](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi#formulaires) * [Quelques ressources](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi#quelques-ressources) * [Page complète](https://cours.davidannebicque.fr/accessibilite-numerique/seance-2-s1-but-mmi#page-complete) Was this helpful? Copy
Description de l'image
Fig.1 Légende de l'image
Copy
Légende de mon tableau
Copy
Processeur
Intel i7
Mémoire Ram
16Go
Carte Graphique
Radeon xxxx
Copy
Votre identité





Votre Adresse







--- # Cours magistral 1 - Donner du sens aux données | SAE 303 - Dataviz file-pdf 3MB [SAE303 - CM1.pdf](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FCmEoHMzidBmPbsggy1Mh%2FSAE303%20-%20CM1.pdf?alt=media&token=2220dccc-dc9b-4918-89a5-929fa4bd3da8) PDF downloadTélécharger[arrow-up-right-from-squareOuvrir](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FCmEoHMzidBmPbsggy1Mh%2FSAE303%20-%20CM1.pdf?alt=media&token=2220dccc-dc9b-4918-89a5-929fa4bd3da8) [PrécédentTD 1 - Tipschevron-left](https://cours.davidannebicque.fr/sae-303-dataviz/cours-de-david-annebicque/td-1-tips) [SuivantExercice datavisualisation 1chevron-right](https://cours.davidannebicque.fr/sae-303-dataviz/cours-dolivier-cherain/exercice-datavisualisation-1) Mis à jour il y a 1 an --- # Analyser les données - statistiques | SAE 303 - Dataviz file-download 13KB [exercice 1 stats.xlsx](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2F3Ksf6C0ZQY9CiCPF9hTy%2Fexercice%201%20stats.xlsx?alt=media&token=81135934-a08c-4b9a-866f-1b93f50b8b9b) downloadTélécharger[arrow-up-right-from-squareOuvrir](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2F3Ksf6C0ZQY9CiCPF9hTy%2Fexercice%201%20stats.xlsx?alt=media&token=81135934-a08c-4b9a-866f-1b93f50b8b9b) file-download 137KB [exercice2 stats.xlsx](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FhBRFADwo5TdLCznVxcJR%2Fexercice2%20stats.xlsx?alt=media&token=f3012942-518e-436f-b1ad-4780ddb4b867) downloadTélécharger[arrow-up-right-from-squareOuvrir](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FhBRFADwo5TdLCznVxcJR%2Fexercice2%20stats.xlsx?alt=media&token=f3012942-518e-436f-b1ad-4780ddb4b867) * * * file-download 25KB [exercice 1 stats correction.xlsx](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FvHomEwJYAthoGs0Doz3v%2Fexercice%201%20stats%20correction.xlsx?alt=media&token=eedc88d9-672c-425d-82de-017dad14e1da) downloadTélécharger[arrow-up-right-from-squareOuvrir](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FvHomEwJYAthoGs0Doz3v%2Fexercice%201%20stats%20correction.xlsx?alt=media&token=eedc88d9-672c-425d-82de-017dad14e1da) file-download 70KB [exercice 2 correction.xlsx](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FIOet6BfL0oTNuh2xPNKf%2Fexercice%202%20correction.xlsx?alt=media&token=19b2d9ed-a612-4bfe-9301-305650f1bf50) downloadTélécharger[arrow-up-right-from-squareOuvrir](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FIOet6BfL0oTNuh2xPNKf%2Fexercice%202%20correction.xlsx?alt=media&token=19b2d9ed-a612-4bfe-9301-305650f1bf50) [PrécédentCours magistral 2 - préparer les donnéeschevron-left](https://cours.davidannebicque.fr/sae-303-dataviz/cours-dolivier-cherain/cours-magistral-2-preparer-les-donnees) [SuivantAnalyser les données - TCDchevron-right](https://cours.davidannebicque.fr/sae-303-dataviz/cours-dolivier-cherain/analyser-les-donnees-tcd) Mis à jour il y a 2 ans --- # LP | Vue.js LP [hashtag](https://cours.davidannebicque.fr/vue.js/lp#pour-les-experts-de-vue.js) Pour les "experts" de Vue.js ------------------------------------------------------------------------------------------------------------------ En utilisant une API de votre choix (suffisament complexe), par exemple : * [https://restcountries.com/arrow-up-right](https://restcountries.com/) * [https://developer.marvel.com/docs#!/public/getCreatorCollection\_get\_0arrow-up-right](https://developer.marvel.com/docs#!/public/getCreatorCollection_get_0) * [https://openweathermap.org/apiarrow-up-right](https://openweathermap.org/api) (dans une moindre mesure par rapport aux consignes) * ... Proposez une application interactive permettant de consulter les données. Les critères suivants devront être intégrés * Navigation fluide dans l'ensemble du catalogue * Possibilité d'effectuer une recherche multicritères (cumulables) * Avoir une version "condensée" et une version détaillée * Une mise en page, une ergonomie et une UX travaillée * D'avoir un système de "favori" (stocké en local), permettant de retrouver nos éléments préférés dans un affichage ergonomique. [hashtag](https://cours.davidannebicque.fr/vue.js/lp#pour-les-nouveaux) Pour les nouveaux ---------------------------------------------------------------------------------------------- * Repartez d'un projet vide. * En utilisant l'API [https://restcountries.com/v3.1/allarrow-up-right](https://restcountries.com/v3.1/all) * Développez un composant permettant d'afficher la fiche d'un pays. * Affichez une page permettant d'afficher tous les pays. * Ajoutez une recherche permettant de filtrer par pays. [PrécédentQuelques sourceschevron-left](https://cours.davidannebicque.fr/vue.js/quelques-sources) Mis à jour il y a 2 ans * [Pour les "experts" de Vue.js](https://cours.davidannebicque.fr/vue.js/lp#pour-les-experts-de-vue.js) * [Pour les nouveaux](https://cours.davidannebicque.fr/vue.js/lp#pour-les-nouveaux) --- # Quelques sources | Vue.js LP [![Logo](https://cours.davidannebicque.fr/vue.js/~gitbook/image?url=https%3A%2F%2Fmedia2.dev.to%2Fdynamic%2Fimage%2Fwidth%3D192%2Cheight%3D%2Cfit%3Dscale-down%2Cgravity%3Dauto%2Cformat%3Dauto%2Fhttps%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Farticles%252F8j7kvp660rqzt99zui8e.png&width=20&dpr=3&quality=100&sign=d66b4ec9&sv=2)Apprendre Vue.js 3 - Jour 1 : concepts de baseDEV Communitychevron-right](https://dev.to/ericlecodeur/apprendre-vue-js-3-jour-1-concepts-de-base-2jfn) [PrécédentSéance 10 : TP Notéchevron-left](https://cours.davidannebicque.fr/vue.js/seance-10-tp-note) [SuivantLPchevron-right](https://cours.davidannebicque.fr/vue.js/lp) Mis à jour il y a 3 ans --- # Séance 2 | Développement Front (S3) | MMI Nouméa [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-2#donnees-de-base) Données de base --------------------------------------------------------------------------------------------------------------------------- Les données au format json proposé pour l'exercice est le suivant : Copy { "products": [\ {\ "id": 1,\ "name": "T-shirt",\ "price": 10,\ "quantity": 1,\ "image": "https://picsum.photos/200/300?random=1"\ },\ {\ "id": 2,\ "name": "Pantalon",\ "price": 20,\ "quantity": 2,\ "image": "https://picsum.photos/200/300?random=2"\ },\ {\ "id": 3,\ "name": "Chaussures",\ "price": 30,\ "quantity": 1,\ "image": "https://picsum.photos/200/300?random=3"\ }\ ] } Ce fichier décrit le contenu des produits ajoutés au panier par le client. Par la suite, nous verrons comment le construire dynamiquement à partir de la page catalogue. Les liens vers les images et les textes, peuvent être modifiés pour afficher des images plus adaptées à votre thème. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-2#integration-du-panier-en-html) Intégration du panier en HTML L'objectif est maintenant de construire votre panier, et d'y ajouter les articles qui se trouvent dans le fichier JavaScript. Pour cela, intégrez votre page panier, et la structure de votre panier (l'usage des tableaux est le plus "simple", mais vous êtes libre de choisir la structure qui vous convient le mieux). Dans un premier temps vous pouvez ajouter une ligne ou deux avec des produits pour vous assurer que le HTML est correctement intégré. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-2#integration-du-panier-en-javascript) Intégration du panier en JavaScript Maintenant que le HTML est intégré, il faut ajouter les produits au panier, vous allez retirer les lignes des données fictives, et les remplacer par une boucle qui va parcourir les produits du fichier json en JavaScript et ajouter le code HTML manquant. Garder une "copie" d'une ligne qui servira de base pour la partie JavaScript. Le début de votre fichier JavaScript ressemblera à ceci : Le plus pratique est de donner un id à votre tableau de votre panier, et de récupérer cet élément dans votre code JavaScript. Cette ligne devrait se trouver dans la partie tbody de votre tableau. On peut donc ajouter cette partie tbody à notre tableau (s'il n'en contient pas encore) Ensuite, vous pouvez parcourir les produits (products) des données json, et ajouter une ligne par produit. Il vous reste ensuite à définir le code HTML qui va être généré pour chaque ligne de produit, et l'ajouter à votre tableau. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-2#travail-a-faire) Travail à faire * Afficher les données dans votre page panier, à partir des données json. * Ajoutez toutes les parties nécessaires (total, TVA, ...) * Alimentez ces zones (en JavaScript) avec les éléments de votre panier (calculé le coût total du panier, la TVA (20%), ...) * Ajoutez tous les boutons et interactions nécessaires (supprimer un produit, modifier la quantité, ...) * Prenez le temps d'intégrer correctement l'ensemble des éléments et d'ajouter une barre de menu. * Pensez à l'ergonomie, l'accessibilité et l'UX de votre page circle-info Pensez au formatage monétaire des données... Une petite fonction JavaScript serait appropriée... [PreviousSéance 1chevron-left](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3) [NextSéance 3chevron-right](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3) Last updated 2 years ago * [Données de base](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-2#donnees-de-base) * [Intégration du panier en HTML](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-2#integration-du-panier-en-html) * [Intégration du panier en JavaScript](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-2#integration-du-panier-en-javascript) * [Travail à faire](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-2#travail-a-faire) Copy const data = { "products": [\ {\ "id": 1,\ "name": "T-shirt",\ "price": 10,\ "quantity": 1,\ "image": "https://picsum.photos/200/300?random=1"\ },\ {\ "id": 2,\ "name": "Pantalon",\ "price": 20,\ "quantity": 2,\ "image": "https://picsum.photos/200/300?random=2"\ },\ {\ "id": 3,\ "name": "Chaussures",\ "price": 30,\ "quantity": 1,\ "image": "https://picsum.photos/200/300?random=3"\ }\ ] } document.addEventListener('DOMContentLoaded', () => { //Le dom est chargé, votre code ici... }); Copy const panier = document.getElementById('panier'); Copy const tbody = document.createElement('tbody') panier.appendChild(tbody) Copy data.products.forEach(product => { //Ajouter une ligne au tableau }); Copy const tr = document.createElement('tr'); tr.innerHTML = ` ...vos données pour un produit ... `; tbody.appendChild(tr); --- # Analyser les données - TCD | SAE 303 - Dataviz file-download 14KB [exercice 1 tcd.xlsx](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FP1NSr4XniUpn7Z4KVCyu%2Fexercice%201%20tcd.xlsx?alt=media&token=81e53ee7-98b2-4118-b8a7-199f394f0cbe) downloadTélécharger[arrow-up-right-from-squareOuvrir](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FP1NSr4XniUpn7Z4KVCyu%2Fexercice%201%20tcd.xlsx?alt=media&token=81e53ee7-98b2-4118-b8a7-199f394f0cbe) file-download 36KB [exercice 2 tcd.xlsx](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2Fko4TwheuMJTQemWkMLMW%2Fexercice%202%20tcd.xlsx?alt=media&token=ba06a243-270a-48c1-ad02-0cf519817397) downloadTélécharger[arrow-up-right-from-squareOuvrir](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2Fko4TwheuMJTQemWkMLMW%2Fexercice%202%20tcd.xlsx?alt=media&token=ba06a243-270a-48c1-ad02-0cf519817397) * * * file-download 32KB [exercice 1 tcd correction.xlsx](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FDhYie8DpBdPgbWw4kUKM%2Fexercice%201%20tcd%20correction.xlsx?alt=media&token=1ee00fe1-9245-4cad-b2b9-2677efa6af58) downloadTélécharger[arrow-up-right-from-squareOuvrir](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FDhYie8DpBdPgbWw4kUKM%2Fexercice%201%20tcd%20correction.xlsx?alt=media&token=1ee00fe1-9245-4cad-b2b9-2677efa6af58) file-download 125KB [exercice 2 tcd correction.xlsx](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FtGmRhwWCkFbZbbm2L192%2Fexercice%202%20tcd%20correction.xlsx?alt=media&token=cd36da77-143f-4961-a17b-8090b1913ded) downloadTélécharger[arrow-up-right-from-squareOuvrir](https://1053960988-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4y0c1qg0LRWvB5mvLa20%2Fuploads%2FtGmRhwWCkFbZbbm2L192%2Fexercice%202%20tcd%20correction.xlsx?alt=media&token=cd36da77-143f-4961-a17b-8090b1913ded) [PrécédentAnalyser les données - statistiqueschevron-left](https://cours.davidannebicque.fr/sae-303-dataviz/cours-dolivier-cherain/analyser-les-donnees-statistiques) Mis à jour il y a 2 ans --- # Gestion des volets | BUT INFO / C# / Embarqué [hashtag](https://cours.davidannebicque.fr/but-info/gestion-des-volets#scenario-1-ouverture-des-stores-dune-piece) **SCÉNARIO 1 :** Ouverture des stores d'une pièce. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Proposer une commande qui lors de l'appui sur l'interrupteur du volet permet de lever le volet jusqu'en haut (ou de la baisser), sauf si l'utilisateur appuie de nouveau sur le bouton monter ou descendre. 1. Proposer le grafcet 2. Traduire le grafcet en équations 3. Coder les équations Copy // Some code private bool x0v = true; private bool x1v = false; private bool x2v = false; private bool x3v = false; private bool ft1v = false; private bool ft2v = false; private bool ft3v = false; private bool ft4v = false; private bool ft5v = false; private bool boutonMonterPrec = false; private bool boutonMonter = false; private bool boutonDescendrePrec = false; private bool boutonDescendre = false; private bool frontMonter = false; private bool frontDescendre = false; private bool capteurHaut = false; private bool capteurBas = false; private MemoryBit actMonter; private MemoryBit actDescendre; private void runCycleVolet() { MemoryMap.Instance.Update(); boutonMonterPrec = boutonMonter; boutonDescendrePrec = boutonDescendre; boutonMonter = MemoryMap.Instance.GetBit(3, MemoryType.Input).Value; boutonDescendre = MemoryMap.Instance.GetBit(4, MemoryType.Input).Value; capteurHaut = MemoryMap.Instance.GetFloat(3, MemoryType.Input).Value == 10.0; capteurBas = MemoryMap.Instance.GetFloat(3, MemoryType.Input).Value == 0.0; frontMonter = !boutonMonterPrec && boutonMonter; frontDescendre = !boutonDescendrePrec && boutonDescendre; ft1v = (x0v || x2v) && frontMonter && !capteurHaut; ft2v = x1v && capteurHaut; ft3v = (x0v || x1v) && frontDescendre && !capteurBas; ft4v = x2v && capteurBas; ft5v = x3v; x0v = ft5v || x0v && !(ft1v || ft3v); x1v = ft1v || x1v && !(ft2v || ft3v); x2v = ft3v || x2v && !(ft4v || ft1v); x3v = (ft2v || ft4v) || x3v && !ft5v; actMonter = MemoryMap.Instance.GetBit(1, MemoryType.Output); actDescendre = MemoryMap.Instance.GetBit(2, MemoryType.Output); actMonter.Value = x1v; actDescendre.Value = x2v; MemoryMap.Instance.Update(); } [PreviousPremier exemple (en WPF)chevron-left](https://cours.davidannebicque.fr/but-info/premier-exemple-en-wpf) [NextGestion de la porte de garagechevron-right](https://cours.davidannebicque.fr/but-info/gestion-de-la-porte-de-garage) Last updated 11 months ago Was this helpful? Was this helpful? --- # Séance 4 | Développement Front (S3) | MMI Nouméa Mise en place de la page catalogue. Cette page doit afficher la liste des produits disponibles avec un bouton permettant l'ajout au panier. Vous veillerez à travailler l'affichage pour intégrer les éléments nécessaires, coller à votre gabarit et avoir une accessibilité correcte. Vous pouvez faire cette page en PHP, avec un tableau de produits en dur, ou HTML en dupliquant les blocs de produits. L'objectif est d'afficher une dizaine de produits, avec, a minima une image, un titre, un prix et un bouton d'ajout au panier. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-4#exercice) Exercice Intégrer votre menu (avec un endroit pour afficher la quantité d'article dans le panier) et votre page catalogue. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-4#mise-en-place-du-bouton-ajouter) Mise en place du bouton ajouter Le bouton ajouter doit faire plusieurs choses : * ajouter le produit au panier (dans une variable JavaScript), puis dans le localStorage * mettre à jour la quantité d'article dans le panier (dans le menu) * éventuellement afficher un message de confirmation et indiquer la quantité selectionnée dans l'article. Comme nous l'avons fait sur les séances précédentes, nous allons parcourir tous les boutons "Ajouter au panier" et ajouter un écouteur d'événement sur le clic. Copy // On récupère tous les boutons "Ajouter au panier" const buttons = document.querySelectorAll('.add-to-cart'); //si notre bouton à une classe add-to-cart // On parcourt tous les boutons buttons.forEach((button) => { // On ajoute un écouteur d'événement sur le clic button.addEventListener('click', (event) => { //on gère le clic }); }); ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-4#gestion-du-clic) Gestion du clic Les étapes à faire sont les suivantes : * Récupérer les informations du produit * On peut soit parcourir le dom pour récupérer les informations (titre, prix, id), soit récupérer les informations avec des attributs "data", soit récupérer depuis une source de données (appel API, ...). * Vérifier si le produit est déjà dans le panier * Si oui, on doit augmenter la quantité * Si non, on doit l'ajouter dans le panier avec une quantité 1 * Mettre à jour la quantité d'article dans le panier (dans le menu) * Deux logique, on affiche le nombre différents de produit, on affiche la quantité réelle de produit. A votre convenance. #### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-4#exercice-1) Exercice Mettre en place le fonctionnement des boutons et l'affichage du nombre de produits dans le menu ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-4#stockage-dans-le-localstorage) Stockage dans le localStorage Actuellement, si vous actualisez votre page, tout est perdu. Ce n'est pas très pratique... Une solution simple consiste à stocker les informations dans le `localStorage` ou `sessionStorage`. Lire ici pour plus de détails : [https://fr.javascript.info/localstoragearrow-up-right](https://fr.javascript.info/localstorage) * Les principales caractéristiques de `localStorage` sont les suivantes : * Partagé entre tous les onglets et fenêtres d’une même origine. * Les données n’expirent pas. Il reste après le redémarrage du navigateur et même le redémarrage du système d’exploitation. * L’objet `sessionStorage` est beaucoup moins utilisé que `localStorage`. * Les propriétés et les méthodes sont les mêmes, mais c’est beaucoup plus limité : * Le `sessionStorage` n’existe que dans l’onglet actuel du navigateur. * Un autre onglet avec la même page aura un stockage différent. * Mais il est partagé entre les iframes du même onglet (en supposant qu’ils proviennent de la même origine). * Les données survivent à l’actualisation de la page, mais pas à la fermeture/ouverture de l’onglet. Nous allons utiliser `localStorage` pour stocker les produits du panier. Les méthodes principales sont : * `setItem(key, value)` – stocke la paire clé/valeur. * `getItem(key)` – récupère la valeur par clé. * `removeItem(key)` – supprime la clé avec sa valeur. * `clear()` – supprime tout. * `key(index)` – récupère la clé sur une position donnée. * `length` – le nombre d’éléments stockés. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-4#exercice-2) Exercice Modifiez votre code catalogue pour sauvegarder les éléments ajoutés dans le panier dans le `localStorage`. Modifiez la page panier pour récupérer maintenant les données depuis le `localStorage` et le mettre à jour à chaque modification. [PreviousSéance 3chevron-left](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3) [NextSéance 5chevron-right](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-5) Last updated 2 years ago * [Exercice](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-4#exercice) * [Mise en place du bouton ajouter](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-4#mise-en-place-du-bouton-ajouter) * [Gestion du clic](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-4#gestion-du-clic) * [Stockage dans le localStorage](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-4#stockage-dans-le-localstorage) * [Exercice](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-4#exercice-2) --- # Séance 3 : Communication avec API | Vue.js BUT [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#objectifs) 🎯 Objectifs ----------------------------------------------------------------------------------------------------------------------- * Appeler une API externe. * Gérer erreurs, loaders et services dédiés. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#partie-theorique) 📖 Partie théorique ------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#architecture-client-serveur) Architecture client/serveur * Vue/Nuxt côté client, API côté serveur. * Communication via HTTP (REST, JSON, voire GraphQL). ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#fetch-api-vs-axios) Fetch API vs Axios #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#fetch) Fetch * `fetch` : natif, simple, mais moins de fonctionnalités. **Exemple :** Copy fetch('http://localhost:3001/tasks') .then(response => response.json()) .then(data => { console.log(data); }); #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#axios) Axios * `axios` : plus complet, gestion des interceptors, requêtes simplifiées. **Exemple :** ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#gestion-des-erreurs) Gestion des erreurs * Utilisation de `try/catch` pour capturer les erreurs réseau ou API. **Exemple avec Fetch :** Dans cet exemple, si la requête échoue (problème réseau, serveur indisponible, etc.), le bloc `catch` permet d’afficher un message d’erreur à l’utilisateur. **Exemple simple en Vue.js :** Cet exemple affiche un message d’erreur à l’utilisateur si la récupération des tâches échoue. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#loaders) Loaders Pour afficher un loader pendant l'appel à l'API, il suffit d'ajouter une variable d'état `isLoading` et de l'utiliser dans le template : Ici, le loader s'affiche tant que la requête est en cours (`isLoading` à `true`), puis disparaît dès que la réponse est reçue ou qu'une erreur survient. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#services-dedies) Services dédiés * Création d'un service API pour centraliser les appels HTTP. [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#travaux-pratiques) 📝 Travaux pratiques --------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#etape-1-installation-de-json-server) Étape 1 : Installation de JSON Server JSON Server permet de créer une API REST complète à partir d'un simple fichier JSON. **Installation :** ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#etape-2-creation-du-fichier-de-donnees) Étape 2 : Création du fichier de données **Créer** `**db.json**` **à la racine du projet :** ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#etape-3-configuration-et-demarrage-de-json-server) Étape 3 : Configuration et démarrage de JSON Server **Ajouter les scripts dans** `**package.json**` **:** **Pour exécuter simultanément Vue et l'API :** ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#etape-4-urls-disponibles) Étape 4 : URLs disponibles Une fois JSON Server démarré sur le port 3001, les endpoints suivants sont disponibles : **Endpoints automatiques :** **Paramètres de requête supportés :** ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#etape-5-appels-api-dans-vue) Étape 5 : Appels API dans Vue * Utilisez ces API pour lier vos tâches dans votre application Vue. * Gérez les états de chargement et d'erreur avec des loaders et des messages. * Créez des services dédiés pour organiser vos appels API. [PreviousSéance 2 : Architecture et composableschevron-left](https://cours.davidannebicque.fr/vue.js-but/but3/seance-2-architecture-et-composables) [NextSéance 4 : Router et navigationchevron-right](https://cours.davidannebicque.fr/vue.js-but/but3/seance-4-router-et-navigation) Last updated 4 months ago * [🎯 Objectifs](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#objectifs) * [📖 Partie théorique](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#partie-theorique) * [Architecture client/serveur](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#architecture-client-serveur) * [Fetch API vs Axios](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#fetch-api-vs-axios) * [Gestion des erreurs](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#gestion-des-erreurs) * [Loaders](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#loaders) * [Services dédiés](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#services-dedies) * [📝 Travaux pratiques](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#travaux-pratiques) * [Étape 1 : Installation de JSON Server](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#etape-1-installation-de-json-server) * [Étape 2 : Création du fichier de données](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#etape-2-creation-du-fichier-de-donnees) * [Étape 3 : Configuration et démarrage de JSON Server](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#etape-3-configuration-et-demarrage-de-json-server) * [Étape 4 : URLs disponibles](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#etape-4-urls-disponibles) * [Étape 5 : Appels API dans Vue](https://cours.davidannebicque.fr/vue.js-but/but3/seance-3-communication-avec-api#etape-5-appels-api-dans-vue) Copy import axios from 'axios'; axios.get('http://localhost:3001/tasks') .then(response => { console.log(response.data); }); Copy async function fetchTasks() { try { const response = await fetch('http://localhost:3001/tasks'); if (!response.ok) { throw new Error('Erreur lors de la récupération des tâches'); } const data = await response.json(); console.log(data); } catch (error) { // Affichage d’un message d’erreur à l’utilisateur alert('Une erreur est survenue : ' + error.message); } } Copy Copy Copy # Installation globale npm install -g json-server # Ou installation locale dans le projet npm install --save-dev json-server Copy { "tasks": [\ {\ "id": 1,\ "title": "Apprendre Vue 3",\ "description": "Maîtriser la Composition API et les nouveautés",\ "priority": "High",\ "completed": false,\ "createdAt": "2024-09-01T10:00:00Z",\ "dueDate": "2024-09-30T23:59:59Z"\ },\ {\ "id": 2,\ "title": "Créer un projet",\ "description": "Développer une application de gestion de tâches",\ "priority": "Medium",\ "completed": true,\ "createdAt": "2024-09-15T14:30:00Z",\ "dueDate": "2024-10-15T23:59:59Z"\ },\ {\ "id": 3,\ "title": "Déployer l'application",\ "description": "Mettre en ligne sur Netlify ou Vercel",\ "priority": "Low",\ "completed": false,\ "createdAt": "2024-09-20T09:15:00Z",\ "dueDate": "2024-11-01T23:59:59Z"\ }\ ], "users": [\ {\ "id": 1,\ "name": "Alice Dupont",\ "email": "[email protected]",\ "role": "admin"\ },\ {\ "id": 2,\ "name": "Bob Martin",\ "email": "[email protected]",\ "role": "user"\ }\ ] } Copy { "scripts": { "dev": "vite", "build": "vite build", "api": "json-server --watch db.json --port 3001" } } Copy # Terminal 1 : Vue npm run dev # Terminal 2 : API JSON Server npm run api Copy GET /tasks # Récupérer toutes les tâches GET /tasks/1 # Récupérer la tâche avec l'ID 1 POST /tasks # Créer une nouvelle tâche PUT /tasks/1 # Mettre à jour la tâche avec l'ID 1 PATCH /tasks/1 # Mise à jour partielle de la tâche avec l'ID 1 DELETE /tasks/1 # Supprimer la tâche avec l'ID 1 GET /users # Récupérer tous les utilisateurs GET /users/1 # Récupérer l'utilisateur avec l'ID 1 Copy GET /tasks?completed=true # Filtrer par statut GET /tasks?priority=High # Filtrer par priorité GET /tasks?_sort=createdAt&_order=desc # Trier par date (desc) GET /tasks?_limit=10&_page=2 # Pagination GET /tasks?q=Vue # Recherche textuelle --- # Séance 5 - 8 | LP MIOT [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-5-8#projet-final-note) Projet final (noté) --------------------------------------------------------------------------------------------------------- Réaliser une application manipulant une API et affichant les données dans lesquels il est possible de naviguer. ### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-5-8#api-openweather) API OpenWeather Une fois votre compte créé (il faut parfois attendre 2heures pour que la clé d'API fonctionne), vous pouvez choisir entre deux accès. #### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-5-8#les-donnees-actuelles) Les données actuelles Copy https://api.openweathermap.org/data/2.5/weather?q=troyes&appid={cleapi}&units=metric La valeur cleApi est à remplacer par votre clé. "troyes" peut être remplacée par n'importe quelle ville du monde (dans sa langue d'origine ou anglaise) #### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-5-8#les-previsions) Les prévisions Copy https://api.openweathermap.org/data/2.5/forecast?q=troyes&appid=f09048b15950f446f8a54ea748fb65e3&units=metric Le fonctionnement est identique à l'appel précédent (weather est remplacé par forecast) Copy {"coord": { "lon":4.0833, "lat":48.3333 }, "weather": [{\ "id":800,\ "main":"Clear",\ "description":"clear sky",\ "icon":"01d"\ }], "base":"stations", "main": { "temp":8.03, "feels_like":8.03, "temp_min":8.03, "temp_max":9.43, "pressure":1012, "humidity":93 }, "visibility":10000, "wind": { "speed":0.51, "deg":150 }, "clouds": { "all":0 }, "dt":1653975602, "sys": { "type":1, "id":6555, "country":"FR", "sunrise":1653968878, "sunset":1654025702}, "timezone":7200, "id":2971548, "name":"Arrondissement de Troyes", "cod":200 } ### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-5-8#base) Base ### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-5-8#changement-de-ville) Changement de ville ### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-5-8#modifier-une-image) Modifier une image ### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-5-8#consignes) Consignes * Au moins 2 pages. * Une pour les informations météos actuelles, * Une pour les prévisions * Possibilité de choisir parmi une liste de ville * Affichage soignée (couleur, mise en page, interactions éventuelles, lisibilité) ### [hashtag](https://cours.davidannebicque.fr/lp-miot/seance-5-8#criteres-de-notation) Critères de notation * Qualité visuelle des pages * Fonctionnement des pages (possibilité de changer de ville) * Lisibilité des informations, mise en page * Variété et complexité des informations [PreviousSéance 4chevron-left](https://cours.davidannebicque.fr/lp-miot/seance-4) Last updated 3 years ago * [Projet final (noté)](https://cours.davidannebicque.fr/lp-miot/seance-5-8#projet-final-note) * [API OpenWeather](https://cours.davidannebicque.fr/lp-miot/seance-5-8#api-openweather) * [Base](https://cours.davidannebicque.fr/lp-miot/seance-5-8#base) * [Changement de ville](https://cours.davidannebicque.fr/lp-miot/seance-5-8#changement-de-ville) * [Modifier une image](https://cours.davidannebicque.fr/lp-miot/seance-5-8#modifier-une-image) * [Consignes](https://cours.davidannebicque.fr/lp-miot/seance-5-8#consignes) * [Critères de notation](https://cours.davidannebicque.fr/lp-miot/seance-5-8#criteres-de-notation) Copy Météo

Application météo

Température : °C

Copy Météo

Application météo

Température : °C

Copy Document Copy Document lien 1 lien 2 lien 3 --- # Séance 3 | Développement Front (S3) | MMI Nouméa [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#seance-3) Séance 3 ------------------------------------------------------------------------------------------------------------- Dans cette séance nous allons faire fonctionner les différents boutons de notre panier (gestion de la quantité, suppression d'un produit, suppression de tous les produits). L'action sur un de ces boutons devra déclencher la mise à jour de toutes les données du panier (prix total, nombre de produits, TVA, ...). ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#video-de-demonstration) Vidéo de démonstration La vidéo ci-après vous montre un exemple du résultat que vous devriez obtenir. L'emplacement des éléments n'est pas important, vous pouvez les placer où vous le souhaitez. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#etape-1-mise-en-place-des-boutons-du-panier) Étape 1 : Mise en place des boutons du panier Dans la séance précédente vous avez mis les boutons, mais ces derniers ne sont pas opérationnels. La première opération va donc consister à ajouter un écouteur d'événement sur chacun de ces boutons, et dans un premier temps nous allons simplement afficher un message dans la console pour vérifier que l'écouteur fonctionne. Pour cela, vous devez ajouter un écouteur d'événement sur chacun des boutons du panier. Pour cela, vous devez utiliser la méthode `addEventListener` de l'objet `document` et lui passer en paramètre le nom de l'événement à écouter (ici `click`) et une fonction qui sera appelée lorsque l'événement sera déclenché. Nous allons avoir plusieurs boutons "+", "-" ou "supprimer". Nous ne pouvons donc pas récupérer un id. Et chaque bouton doit fonctionner. Le plus pratique serait de leur donner une classe commune (par exemple `btn-panier-add`) et de récupérer tous les boutons qui ont cette classe. Pour cela, vous devez utiliser la méthode `querySelectorAll` de l'objet `document` et lui passer en paramètre le sélecteur CSS qui permet de récupérer tous les boutons qui ont la classe `btn-panier-add`. Ensuite, vous devez parcourir tous les boutons récupérés et ajouter un écouteur d'événement sur chacun d'eux. Pour cela, vous devez utiliser la méthode `forEach` de l'objet `NodeList` et lui passer en paramètre une fonction qui sera appelée pour chaque élément de la liste. Dans cette fonction, vous devez ajouter un écouteur d'événement sur le bouton en cours de traitement. Pour cela, vous devez utiliser la méthode `addEventListener` de l'objet `Element` et lui passer en paramètre le nom de l'événement à écouter (ici `click`) et une fonction qui sera appelée lorsque l'événement sera déclenché. Exemple de code : ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#exercice) Exercice Ajoutez un écouteur d'événement sur chacun des boutons du panier et affichez un message dans la console pour vérifier que l'écouteur fonctionne. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#etape-2-modification-de-la-quantite-dun-produit) Étape 2 : Modification de la quantité d'un produit Dans cette étape, nous allons modifier la quantité d'un produit dans le panier en fonction du bouton cliqué ("+" ou "-"). Plusieurs solutions sont possibles. * Vous pouvez récupérer un "id" pour le produit et rechercher dans les données Json le prix unitaire du produit pour recalculer les éléments. * Vous pouvez essayer de récupérer le contenu de la colonne "prix unitaire" sur la ligne de votre produit en parcourant le dom du tableau * On peut ajouter un attribut "data" sur la ligne du produit, ou sur les boutons pour stocker le prix unitaire du produit On va utiliser cette dernière solution, car c'est la plus "rapide" à mettre en place. Néanmoins, il est préférable de stocker les données dans un objet JavaScript plutôt que dans le DOM. Pour cela, vous devez ajouter un attribut `data-price` sur les boutons `+` et `-` et lui assigner le prix unitaire du produit. Exemple de code : Pour récupérer le prix unitaire du produit, vous devez utiliser la méthode `dataset` de l'objet `Element` et lui passer en paramètre le nom de l'attribut à récupérer (ici `data-price`). Exemple de code : Dans cet extrait de code `e` correspond à l'événnement déclenché (ici un click), `target` correspond à l'élément qui a déclenché l'événement et `dataset` correspond à l'ensemble des attributs `data` de l'élément. Pour récupérer la nouvelle quantité du produit, selon si vous avez une zone de saisie (un input), ou une zone HTML, vous devez utiliser une méthode différente. Si vous avez une zone de saisie, vous devez utiliser la méthode `value` de l'objet `HTMLInputElement` et lui passer en paramètre la nouvelle valeur. Exemple de code : Cet extrait de code ne fonctionne que si le input et le bouton sont dans le même élément parent (le TD par exemple ou un div). Dans le cas contraire adaptez ce code. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#exercice-1) Exercice Mettre en place ce code pour votre bouton "+" et votre bouton "-". Assurez vous que la quantité est bonne. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#etape-3-mise-a-jour-du-prix-total-du-produit) Étape 3 : Mise à jour du prix total du produit A ce stade, la quantité est la bonne, mais le prix total du produit, et du panier ne sont pas mis à jour. Pour cela, vous devez récupérer la zone HTML qui contient le prix total du produit et lui assigner le nouveau prix total. La aussi, il y a plusieurs solutions possibles. * Pour le prix total du panier, ce dernier est unique, on peut donc affecter un id sur la zone contenant cette valeur. La récupérer et la mettre à jour avec la nouvelle quantité est donc relativement classique. * Pour le prix total de la ligne de notre produit, on ne peut pas définir un id (sauf à la construire en fonction de l'id du produit). Par contre, on sait où se trouve la zone depuis notre bouton. On peut donc récupérer la zone en parcourant le dom depuis le bouton. C'est ce que nous allons faire. On pourrait donc avoir quelque chose comme cela : ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#exercice-2) Exercice Mettre en place ce code pour votre bouton "+" et votre bouton "-". Mettre à jour tous les prix (TTC, HT, TVA) du panier. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#etape-4-suppression-dun-produit) Étape 4 : Suppression d'un produit Dans cette étape, nous allons supprimer un produit du panier. Pour cela, vous devez ajouter un écouteur d'événement sur le bouton "supprimer" et supprimer la ligne du produit. Pour supprimer un élément du dom, vous devez utiliser la méthode `remove` de l'objet `Element`. Exemple de code : Cela va effacer la ligne du produit du panier. Mais le montant total est une nouvelle fois faux. Il faut donc le mettre à jour. Pour cela, avant de supprimer la ligne du produit, vous devez récupérer le prix total du produit et le soustraire au prix total du panier. Vous avez des exemples pour parcourir le dom, on part cette fois du bouton supprimer. ### [hashtag](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#exercice-3) Exercice Mettre en place ce code pour votre bouton "supprimer". Mettre à jour tous les prix (TTC, HT, TVA) du panier. [PreviousSéance 2chevron-left](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-2) [NextSéance 4chevron-right](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-4) Last updated 2 years ago * [Séance 3](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#seance-3) * [Vidéo de démonstration](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#video-de-demonstration) * [Étape 1 : Mise en place des boutons du panier](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#etape-1-mise-en-place-des-boutons-du-panier) * [Exercice](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#exercice) * [Étape 2 : Modification de la quantité d'un produit](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#etape-2-modification-de-la-quantite-dun-produit) * [Exercice](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#exercice-1) * [Étape 3 : Mise à jour du prix total du produit](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#etape-3-mise-a-jour-du-prix-total-du-produit) * [Exercice](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#exercice-2) * [Étape 4 : Suppression d'un produit](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#etape-4-suppression-dun-produit) * [Exercice](https://cours.davidannebicque.fr/mmi-noumea/developpement-front-s3/seance-3#exercice-3) Copy const btns = document.querySelectorAll('.btn-panier-add') btns.forEach(btn => { btn.addEventListener('click', (e) => { console.log('Bouton cliqué') }) }) Copy Copy const btn = e.target const price = btn.dataset.price Copy const input = btn.parentElement.querySelector('input') input.value = parseInt(input.value) + 1 //on augmente la quantité de 1 Copy const totalPrixProduit = e.target.parentElement.parentElement.nextElementSibling totalPrixProduit.innerHTML = `${formatPrice(parseInt(input.value) * parseFloat(price))}` Copy const btn = e.target const row = btn.parentElement.parentElement row.remove() --- # Séance 1 : Introduction & rappel Vue | Vue.js BUT [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#objectifs) 🎯 Objectifs ------------------------------------------------------------------------------------------------------------------------ * Vérifier et réactiver les acquis de BUT2. * Mettre en place un projet clean (environnement, conventions). [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#partie-theorique) 📖 Partie théorique -------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#directives-vue-et-structure-de-projet) Directives Vue et structure de projet #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#directives-vue-de-base) Directives Vue de base Les **directives** sont des attributs spéciaux avec le préfixe `v-` qui appliquent un comportement réactif au DOM. Copy ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#rappel-vue-3-composition-api) Rappel Vue 3 : Composition API #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#ref-reactivite-pour-les-primitives) ref() - Réactivité pour les primitives `ref()` crée une référence réactive pour les valeurs primitives (string, number, boolean). #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#reactive-reactivite-pour-les-objets) reactive() - Réactivité pour les objets `reactive()` rend un objet entièrement réactif, toutes ses propriétés deviennent réactives. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#computed-proprietes-calculees) computed() - Propriétés calculées `computed()` crée des valeurs dérivées qui se mettent à jour automatiquement quand leurs dépendances changent. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#watch-surveillance-des-changements) watch() - Surveillance des changements `watch()` permet d'exécuter du code quand une valeur réactive change. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#cycle-de-vie-des-composants) Cycle de vie des composants Les hooks de cycle de vie permettent d'exécuter du code à des moments précis de la vie du composant. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#props-emits-et-slots) Props, emits et slots #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#props-transmission-de-donnees-du-parent-vers-lenfant) Props - Transmission de données du parent vers l'enfant Les **props** permettent de passer des données du composant parent vers le composant enfant. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#emits-remontee-devenements-de-lenfant-vers-le-parent) Emits - Remontée d'événements de l'enfant vers le parent Les **emits** permettent au composant enfant de notifier le parent d'un événement. #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#slots-injection-de-contenu-personnalise) Slots - Injection de contenu personnalisé Les **slots** permettent de créer des composants avec du contenu personnalisable. Le composant parent peut injecter du HTML/contenu dans des emplacements définis par le composant enfant. **Slot simple :** **Slots nommés :** ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#communication-entre-composants-resume) Communication entre composants - Résumé * **Props** : Parent → Enfant (données descendantes) * **Emits** : Enfant → Parent (événements remontants) * **Slots** : Parent → Enfant (contenu HTML personnalisé) Cette combinaison permet une communication flexible et maintenable entre les composants Vue. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#bonnes-pratiques) Bonnes pratiques #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#organisation-du-code) Organisation du code **Structuration des composants :** #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#conventions-de-nommage) Conventions de nommage #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#performance-et-reactivite) Performance et réactivité #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#gestion-des-erreurs) Gestion des erreurs #### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#accessibilite-et-ux) Accessibilité et UX [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#travaux-pratiques) 📝 Travaux pratiques ---------------------------------------------------------------------------------------------------------------------------------------- ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#objectif) Objectif Créer une application de gestion de tâches simple pour réviser les concepts Vue 3 de base. ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#etape-1-initialisation-du-projet) Étape 1 : Initialisation du projet **Créer un nouveau projet Vue 3 :** **Configuration recommandée lors de la création :** * ✅ TypeScript → Non (pour cette séance) * ✅ JSX → Non * ✅ Vue Router → Non (pour cette séance) * ✅ Pinia → Non (vu plus tard) * ✅ Vitest → Non * ✅ Playwright → Non * ✅ ESLint → Oui circle-info **📋 Aparté : Qu'est-ce qu'ESLint ?** **ESLint** est un outil d'analyse statique de code (linter) pour JavaScript et TypeScript qui permet de : **🎯 Objectifs principaux :** * **Détecter les erreurs** : Variables non déclarées, code mort, erreurs de syntaxe * **Uniformiser le style** : Indentation, quotes, points-virgules, espaces * **Appliquer les bonnes pratiques** : Conventions de nommage, patterns recommandés * **Améliorer la maintenabilité** : Code plus lisible et cohérent en équipe Toutes les informations et règles : https://eslint.org/ **⚙️ Comment ça fonctionne :** **🔧 Exemples de règles ESLint :** * `no-unused-vars` : Signale les variables non utilisées * `no-console` : Interdit les console.log en production * `indent` : Force une indentation cohérente (2 ou 4 espaces) * `quotes` : Impose simple ou double quotes * `semi` : Gère les points-virgules obligatoires/interdits **🎨 Configuration Vue.js :** ESLint pour Vue inclut des règles spécifiques : * `vue/multi-word-component-names` : Noms de composants multi-mots * `vue/no-unused-components` : Composants importés mais non utilisés * `vue/order-in-components` : Ordre des options dans les composants **💡 Intérêt en équipe :** * Code homogène entre développeurs * Réduction des erreurs silencieuses * Facilite la relecture de code (code reviews) * Intégration continue (CI/CD) pour bloquer le code non conforme ### [hashtag](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#etape-test-et-amelioration) Étape : Test et amélioration **Fonctionnalités à tester :** 1. Ajout de nouvelles tâches 2. Validation du formulaire (champs requis) 3. Marquage des tâches comme terminées 4. Suppression des tâches 5. Filtrage par statut 6. Compteurs dynamiques **Améliorations possibles :** * Ajouter une date de création * Permettre l'édition des tâches * Sauvegarder dans le localStorage * Ajouter des animations CSS [PreviousSéance 0 : Présentation de la ressource en BUT3chevron-left](https://cours.davidannebicque.fr/vue.js-but/but3/seance-0-presentation) [NextSéance 2 : Architecture et composableschevron-right](https://cours.davidannebicque.fr/vue.js-but/but3/seance-2-architecture-et-composables) Last updated 4 months ago * [🎯 Objectifs](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#objectifs) * [📖 Partie théorique](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#partie-theorique) * [Directives Vue et structure de projet](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#directives-vue-et-structure-de-projet) * [Rappel Vue 3 : Composition API](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#rappel-vue-3-composition-api) * [Props, emits et slots](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#props-emits-et-slots) * [Communication entre composants - Résumé](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#communication-entre-composants-resume) * [Bonnes pratiques](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#bonnes-pratiques) * [📝 Travaux pratiques](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#travaux-pratiques) * [Objectif](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#objectif) * [Étape 1 : Initialisation du projet](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#etape-1-initialisation-du-projet) * [Étape : Test et amélioration](https://cours.davidannebicque.fr/vue.js-but/but3/seance-1-introduction-rappel-vue#etape-test-et-amelioration) Copy Copy Copy Copy Copy Copy Copy Copy Copy Copy Copy Copy Copy Copy Copy // Variables et fonctions : camelCase const userName = ref('') const isLoggedIn = ref(false) const handleUserLogin = () => {} // Constantes : UPPER_SNAKE_CASE const API_BASE_URL = 'https://api.example.com' const MAX_RETRY_ATTEMPTS = 3 // Composants : PascalCase // TaskCard.vue, UserProfile.vue, NavigationMenu.vue Copy Copy Copy Copy # Créer le projet avec l'outil officiel npm create vue@latest task-manager # Naviguer dans le dossier cd task-manager # Installer les dépendances npm install # Lancer le serveur de développement npm run dev Copy # Vérifier le code npm run lint # Corriger automatiquement ce qui peut l'être npm run lint -- --fix --- # Séance 7 : Routes | Vue.js LP Dans une application web classique, on utilise des URL pour changer le comportement de notre application, et le contenu des pages. Ce mécanisme fonctionne en envoyant une requête au serveur, qui nous retourne une page HTML. Ce mécanisme est intéressant, mais ne permet pas d'avoir des applications dites "SPA" _Single Page Application_, c'est à dire des applications dont on à l'impression que l'intégralité de la page n'est jamais rechargeée, mais seulement une partie. Dans une application monopage (SPA), le JavaScript côté client doit intercepter la navigation, récupérer dynamiquement de nouvelles données, et mettre à jour la page actuelle sans la recharger entièrement. Il en résulte généralement une expérience utilisateur plus rapide, en particulier pour les cas d'utilisation qui ressemblent davantage à des "applications" réelles, où l'utilisateur est censé effectuer de nombreuses interactions sur une longue période de temps. Dans ces SPA, le "routage" est donc effectué côté client, dans le navigateur. Vue.js propose un système de routage nommé [VueRouterarrow-up-right](https://github.com/vuejs/router) , officiellement supporté, qui permet de créer des applications SPA. La documentation officielle se trouve ici : [https://router.vuejs.org/arrow-up-right](https://router.vuejs.org/) . Tout comme dans les frmameworks back, le système de route est très puissant et permet une contrôle précis de vos URL et des actions associés. [hashtag](https://cours.davidannebicque.fr/vue.js/seance-9-composants-et-api#premier-exemple) Premier exemple ------------------------------------------------------------------------------------------------------------------ Tout d'abord, dans notre projet, nous devons installer les routes. Normalement c'est déjà fait, puisque vous avez du le choisir lors de l'installation du projet, dans le cas contraire, il faut l'installer avec la commande suivante : Copier npm install vue-router@4 ou yarn add vue-router@4 Si on souhaite ajouter des liens dans notre application, et définir une partie de notre page qui sera remplacée selon l'URL, on doit utiliser la balise `` (pour les liens) et `` (pour la partie de la page qui sera remplacée). Si on utilisait une balise `` classique, le comportement par défaut du navigateur serait de recharger la page, ce qui n'est pas ce qu'on veut. Copier Copy // src/services/api.js import axios from 'axios' const apiClient = axios.create({ baseURL: 'https://api.example.com', headers: { 'Content-Type': 'application/json' } }) export default { getTasks() { return apiClient.get('/tasks') }, createTask(task) { return apiClient.post('/tasks', task) }, // Autres méthodes... } Copy // src/services/taskService.js import api from './api' export const fetchTasks = async () => { const response = await api.getTasks() return response.data } export const createTask = async (task) => { const response = await api.createTask(task) return response.data } // Autres méthodes... Copy Copy ---