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