CodeIgniter : Tp4 Bd I - PRELIMINAIRE - Belsunce-Shop
Transcription
CodeIgniter : Tp4 Bd I - PRELIMINAIRE - Belsunce-Shop
CodeIgniter : Tp4 Bd I - PRELIMINAIRE Prendre la MV avec WampServer. 1. Créer un dossier sous www/CodeIgniter/tp4. Dézipper le contenu de l’archive de CodeIgniter dans ce dossier. 2. Supprimer licence.txt et user_guide. 3. Configurer le fichier application/config/config.php : Modifier le langage ($config['language'] = "french";) et installer le dossier french dans application/language Modifier la ligne : $config['base_url']= 'http://localhost/CodeIgniter/tp4/'; 4. Positionner la feuille de style style.css dans le dossier tp4/css à créer. 5. Ouvrir le fichier application/config /autoload.php. Charger les librairise suivantes : Charger les helper ‘url’, ‘html’ et ‘form’ : Sauvegarder et fermer ce fichier. 6. Créer la base lafleur2 avec le script lafleur2.sql 7. Ouvrir le fichier database.php et mettre les valeurs suivantes : 8. Ouvrir le fichier application/config/routes.php. Modifier la ligne $route['default_controller'] en changeant le controleur par défaut : $route['default_controller'] = « controleurTp4 » ; SIO2 SLAM5 CodeIgniter Tp4 1 9. Créer le controleur application/controllers/controleurTp4.php : <?php class ControleurTp4 extends CI_Controller { function __construct() { parent:: __construct(); } function index() { $this->load->view('vue1Tp4'); } } Sauvegarder le controleur. 10. Créer la vue application/views/vue1Tp4.php : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <link rel='stylesheet' href="<?php echo base_url(); ?>/css/style.css" /> <title>Mavue</title> </head> <body> <div id="pagewidth" > <div id="header"><h1>Codeigniter-Tp4-BD-MVC</h1></div> <div id="maincol"><h2>Utilisation des bases de donnees & du modele de conception MVC</h2> L'objectif de ce Tp est d'apprendre a utiliser : <?php echo ul(array('Select','Cbo dynamiques','Liens dynamiques')); ?> </div> <div id="leftcol"> <h2>Menu</h2> <?php echo anchor('controleurTp4','Accueil','Retour à l\'accueil'); echo br(); echo anchor('controleurTp4/listetable','Select','Lister une table'); echo br(); ?> </div> </div> </body> </html> SIO2 SLAM5 CodeIgniter Tp4 2 11. Tester : II- APPLICATION 1 - Lister une table (Select) Créer un modèle application/models/tp4_model.php : L’objectif est de récupérer le contenu de la table produit. Deux solutions sont proposées (lignes 15 et 17 plus classique). Le résultat de la requête est un jeu d’enegistrements (RecordSet) $rs. Ouvrir le fichier autoload.php pour charger ce modele : Dans le controleur, on va définir une méthode listetable() qui va récupérer ce résultat et l’afficher dans une vue vue2Tp4Select. public function listetable() { $tab['result']=$this->tp4_model->readall(); $this->load->view('vue2Tp4Select',$tab); } SIO2 SLAM5 CodeIgniter Tp4 3 Créer cette vue application/views/vue2Tp4Select.php : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <link rel='stylesheet' href="<?php echo base_url(); ?>/css/style.css" /> <title>Mavue</title> </head> <body> <div id="pagewidth" > <div id="header"><h1>Codeigniter-Tp4-BD-MVC</h1></div> <div id="maincol"><h2>Affichage du resultat d'une requete</h2> <?php for($i=0;$i<=count($result)-1;$i++) { echo $result[$i][‘libpdt’]; echo br(); } ?> </div> <div id="leftcol"> <h2>Menu</h2> <?php echo anchor(''controleurTp4'/index','Accueil','Retour à l\'accueil'); echo br(); echo anchor(''controleurTp4'/listetable','Select','Lister une table'); echo br(); ?> </div> </div> </body> </html> Tester : SIO2 SLAM5 CodeIgniter Tp4 4 Affichage de ce résultat dans un tableau. On va utiliser la librairie table et mettre des entêtes de colonnes (vue2Tp4Select) : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <link rel='stylesheet' href="<?php echo base_url(); ?>/css/style.css" /> <title>Mavue</title> </head> <body> <div id="pagewidth" > <div id="header"><h1>Codeigniter-Tp4-BD-MVC</h1></div> <div id="maincol"><h2>Affichage du resultat d'une requete</h2> <?php // // // // // // for($i=0;$i<=count($result)-1;$i++) { echo $result[$i][libpdt]; echo br(); } affichage dans un tableau $this->table->set_heading('Code', 'Designation', 'Prix', 'Image', 'CodeCategorie'); echo $this->table->generate($result); ?> </div> ... </html> Tester : On va afficher l’image correspondant au produit. Transformer le code ainsi : SIO2 SLAM5 CodeIgniter Tp4 5 L20 : on enlève la catégorie L21 on crée un tableau rempli à partir d’une boucle L24 création du chemin d’accès aux images (créer un dossier images sous la racine tp4 avec les fichiers jpeg) Tester : 2 – Liste déroulante dynamique On va mettre en place une liste déroulante dynamique (liste des catégories) pour choisir un élément et afficher dans un formulaire le résultat (les fleurs correspondantes). Ajouter dans le menu à gauche des pages (vue1Tp4 et vue2Tp4Select) un nouvel item : echo anchor('controleurTp4/choixformdyn','ListeDyn','Lister une table'); echo br(); Définir la nouvelle méthode choixformdyn() dans le controleur : public function choixformdyn() { $tab['result']=$this->tp4_model->readallcat(); $this->load->view('vue3Tp4choixformdyn',$tab); } Cette méthode appelle une méthode du modèle readallcat() pour obtenir toutes les catégories et charge la vue vue3Tp4choixformdyn pour afficher le contenu de la liste déroulante. SIO2 SLAM5 CodeIgniter Tp4 6 Dans le modèle, rajouter la méthode readallcat() : public function readallcat() { // $rs=$this->db->get('categorie'); ou $rs=$this->db->query('select * from categorie'); return $rs->result_array() ; } Créer la vue vue3Tp4choixformdyn.php : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <link rel='stylesheet' href="<?php echo base_url(); ?>/css/style.css" /> <title>Mavue</title> </head> <body> <div id="pagewidth" > <div id="header"><h1>Codeigniter-Tp4-BD-MVC</h1></div> <div id="maincol"><h2>Formulaire avec contrôle cbo dynamique</h2> <?php echo form_open('controleurTp4/listeform'); echo form_label('Catégorie : '); $options = array(); for($i=0;$i<=count($result)-1;$i++) { $cle = $result[$i]['codecat']; $options[$cle] = $result[$i]['libcat']; } echo form_dropdown('lstcat', $options); echo br(2); echo form_submit('cmdvalider','Valider'); echo form_reset('cmdAnnuler','Annuler'); echo form_close(); ?> </div> <div id="leftcol"> <h2>Menu</h2> <?php echo anchor('controleurTp4/index','Accueil','Retour à l\'accueil'); echo br(); echo anchor('controleurTp4/listetable','Select','Lister une table'); echo br(); echo anchor('controleurTp4/choixformdyn','ListeDyn','Lister une table'); echo br(); ?> </div> </div> SIO2 SLAM5 CodeIgniter Tp4 7 </body> </html> Mise en place d’un formulaire avec la liste déroulante et deux boutons de commande. Il reste à définir la méthode listeform() dans le contrôleur : public function listeform() { $lst = $this->input->post('lstcat'); // récupération de la valeur choisie dans la LD $tab['result']=$this->tp4_model->rechpdts($this->input->post('lstcat')); // recherche des produits correspondants à la catégorie $this->load->view('vue2Tp4Select',$tab); } Et enfin définir la méthode rechpdts() paramétrée par le code catégorie dans le modèle : public function rechpdts($cat) { $rs = $this->db->get_where('produit', array('catpdt' => $cat)); // ou $rs=$this->db->query('select * from produit where catpdt=\'' . $cat . '\''); return $rs->result_array(); } Tester : Valider : SIO2 SLAM5 CodeIgniter Tp4 8 3 – Lien hypertexte dynamique Ajouter un nouvel item dans le menu à gauche dans chaque vue : echo anchor('controleurTp4/liendyn','Lien Dyn','Lister une table'); echo br(); Définir la méthode liendyn() dans le controleur : public function liendyn() { $tab['result']=$this->tp4_model->readall(); $this->load->view('vue4Tp4liendyn',$tab); } Cette méthode récupère l’ensemble des produits, puis charge la vue vue4Tp4liendyn pour afficher un lien hypettexte pour chaque produit. Créer la vue vue4Tp4liendyn.php : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <link rel='stylesheet' href="<?php echo base_url(); ?>/css/style.css" /> <title>Mavue</title> </head> <body> <div id="pagewidth" > <div id="header"><h1>Codeigniter-Tp4-BD-MVC</h1></div> <div id="maincol"><h2>Affichage du resultat d'une requete : Lien dynamique</h2> <?php $data = array(); for($i=0;$i<=count($result)-1;$i++) { $data[] = anchor('controleurTp4/modification',$result[$i]['libpdt']); } echo ul($data); ?> </div> <div id="leftcol"> <h2>Menu</h2> <?php echo anchor('controleurTp4/index','Accueil','Retour à l\'accueil'); echo br(); ... </html> Le tableau $data est construit à partir des produits, ses éléments sont des liens hypertextes (désignation du produit) affichés dans une liste à puce (non ordonnée : ul). SIO2 SLAM5 CodeIgniter Tp4 9 Tester : Définir la méthode modification() dans le controleur. Cette méthode va rechercher les caractéristiques du produit sélectionné et les afficher dans une nouvelle vue : public function modification() { $tab['produit']=$this->tp4_model->rechpdt(); $this->load->view('vue5Tp4formModif',$tab); } La méthode rechpdt() permet de retrouver les caractéristiques d’un produit passé en paramètre, mais lequel ? (voir plus loin) Ecrire la méthode rechpdt() dans le modèle : public function rechpdt($id) { $rs = $this->db->get_where('produit', array('codepdt' => $id)); //$rs=$this->db->query('select * from produit where codepdt=\'' . $id . '\''); return $rs->row_array(); // Et non, result_array car une seule ligne de résultat } Le paramètre formel est $id. Tester en sélectionnant un lien, en bas apparait une uri : …/Tp4/index.php/controleurTp4/modification mais sans paramètre SIO2 SLAM5 CodeIgniter Tp4 10 Il faut passer la valeur du code du produit sélectionné à la méthode rechpdt(). Dans la vue vue4Tp4liendyn.php, compléter ainsi le lien : $data[] = anchor('controleurTp4/modification/'.$result[$i]['codepdt'],$result[$i]['libpdt']); En testant à nouveau, la valeur du code produit apparait dans l’uri (3ième segment de l’uri en partant de la racine tp4) : Modifier la méthode modification dans le controleur : $tab['produit']=$this->tp4_model->rechpdt($this->uri->segment('3')); Créer la vue vue5Tp4formModif.php : Tester : SIO2 SLAM5 CodeIgniter Tp4 11