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