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.
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.