Grégory Bourguin
SysReIC - LISIC - ULCO
TP 04 (Formulaires et Données)

Magic Store

Le but de ce TP va être de créer un "magasin" (store) de carte Magic permettant aux visiteurs de regarder (browse) les cartes disponibles, et aux clients (connectés) de sélectionner des cartes pour les mettre dans leur panier (cart).

Version 1

Dans cette 1ère version, vous allez vous focaliser sur les bases du site avec une page d'accueil (index) et une page de "visite" simple (browse) des cartes du magasin.

  • Créez un template (une classe magic\Template.php) qui intégrera votre header.php et footer.php, ainsi que vos CSS.
    Les images utilisées sont MagicBG2.jpg et MagicLogo4.png.
    La font Google utilisée est Pirata One.
  • Utilisez le template pour créer la page index.php.
    NB: on peut y accéder en cliquant sur Magic Store.
  • Utilisez le template pour créer la page browse.php (click sur Browse).
    NB: browse.php utilise la classe magic\Browser qui contient :
Magic Store V1 : cliquez sur "agrandir" pour mieux voir ---------------------->

Version 2

La 2ème version du site permet à un utilisateur de se logger/dé-logger.

Pour simplifier nous n'aurons ici qu'un seul utilisateur dont les informations de connexion seront inscrites en dur dans le code PHP (login: gandalf, pwd: youshallnotpass).

  • Créez une page login.php à laquelle on accède en cliquant sur login.
    La page login.php utilise la classe magic\Logger (une adaptation du JarvisLogger).
  • La page login.php s'appelle en boucle tant que le login/pwd n'est pas bon.
    (en affichant un message d'erreur au besoin).
  • Lorsque l'utilisateur (gandalf) est correctement authentifié :
    • login.php stocke les informations de session (le 'login') et redirige automatiquement l'utilisateur vers index.php dans lequel le message a évolué (on affiche maintenant en plus le "Hi login")
    • Le bouton Browse est remplacé par un bouton Shop qui mène à la page shop.php (très simple pour l'instant).
    • le bouton login est remplacé par un menu (Bootstrap) qui affiche le login, et qui permet de se déconnecter avec logout : appelle le script logout.php.
  • Le script logout.php détruit la session de l'utilisateur et le redirige automatiquement vers index.php.
Magic Store V2 : cliquez sur "agrandir" pour mieux voir ---------------------->

Version 3

La 3ème version du site n'est "visible" que lorsque l'utilisateur est connecté.

Dans cette version, on rend fonctionnel le magasin et on ajoute un panier permettant à l'utilisateur de voir la liste des cartes qu'il a sélectionnées.

  • Étoffez shop.php avec la classe magic\Shop (similaire à magic\Browser) qui possède :
    • un constructeur qui charge data/cards.json
    • la méthode generateShop() qui génère le form de sélection des cartes (chaque carte est associée à un input de type checkbox, la value de chaque input correspond à l'id de la carte associée)
    • Le formulaire est soumis (méthode POST) en cliquant sur Add to Cart ce qui déclenche l'action add_to_cart.php
  • L'action add_to_cart.php utilise la classe magic\Cart (cf. ci-dessous) en faisant appel à sa méthode add(array $selection) (la selection correspond aux cartes reçues du formulaire dans $_POST), puis redirige automatiquement l'utilisateur vers la page cart.php.
  • La page cart.php utilise la classe magic\Cart en faisant appel à sa méthode render pour afficher le contenu du panier. La page cart.php peut (aussi) être affichée en cliquant sur le nouvel icône ajouté à gauche du login.
  • La classe magic\Cart possède :
    • un attribut $content qui représente le contenu du panier sous la forme d'un array avec des paires clé/valeur : les clés correspondent aux id des cartes qui ont été ajoutées au panier, les valeurs correspondent au nombre de fois où une carte a été ajoutée au panier.
    • la méthode add(array $selection): void (appelée dans l'action add_to_cart.php) qui stocke les cartes des la $selection dans $content, et enregistre $content dans les informations de session (dans la variable $_SESSION['cart']).
    • un constructeur qui charge le contenu de $_SESSION['cart'] dans l'attribut $content (ré-initialise le panier avec la session).
    • la méthode render():void qui génère une représentation du panier : chaque carte apparait avec son 'total'. Le coût du panier est calculé dynamiquement par un Javascript en considérant que chaque carte vaut 0,25$.
Magic Store V3 : cliquez sur "agrandir" pour mieux voir ---------------------->

Version 4

La 4ème version du site permet d'éditer le panier.

  • Le panier généré par render est maintenant un form avec une méthode POST qui appelle l'action update_cart.php.
  • Le nombre associé à chaque carte du panier est un input.
    Pour avoir les bonnes informations dans $_POST, le name de chaque input correspond à l'id de la carte, et la value au nombre d'exemplaires de cette carte.
  • Quand l'utilisateur change un des input, le montant total du panier est mis à jour et le bouton (submit du formulaire) nommé UPDATE CART apparait : le tout en Javascript.
  • L'action update_cart.php appelle une nouvelle méthode de magic\Cart nommée update(array $cart): void qui met à jour son attribut $content et la variable de session $_SESSION['cart'], puis redirige automatiquement l'utilisateur vers la page cart.php.
Magic Store V4 : cliquez sur "agrandir" pour mieux voir ---------------------->

Corrections

Les corrections se trouvent ICI

Pour tester une version, je vous conseille d'utiliser une console, de vous mettre dans le dossier de la version que vous voulez tester, et de lancer un serveur Web local avec php -S localhost:8080.