fichier variable

Transcription

fichier variable
Sites Web de grandes tailles
Templates ou patrons de pages
 Gestion des pages types et charte graphique
Systèmes de navigation générés automatiquement
Pages à contenus dynamiques
(le contenu est dans une BD)
Pages générées (popup, correction de saisie, …)
Système d'Information
1
Solutions avec le PHP
 Inclusion d'un document dans un autre
 Utilisation de bases de données :
Ex biblio : navigation par "auteurs"
• Gestion de contenu : BD => catalogue en ligne
•
 Création de pages "variables" :
Envoie de variables à des pages
• Pages vues comme des fonctions
•
Liste des livres d’un auteur (var=auid)
Correction/confirmation d’un formulaire (var=valeurs saisies)
Système d'Information
2
Gérer des pages types en PHP
Charte graphique ou éléments en commun
partagés par un groupe de pages
Parties communes
=> patron de page
Parties changeantes
=> "trous" du patron
=> parties variables du patron
Système d'Information
3
Gestion des "trous" en PHP
 On utilise la fonction include(fichier) :
fichier = nom du fichier (+ chemin relatif)
• le fichier est inclus à la place de la fonction include()
• le fichier ne doit pas contenir <HTML>, …
•
<?
include("fichier.html");
if ($num > 1 && $num < 10)) {
include("articles/document$num.php");
}
?>
Système d'Information
4
Gestion des parties communes
 Créer une page HTML statique type
 Repérer les parties qui sont identiques à toutes les pages du site (ou à un grand nombre de pages)
 Les copier dans des petits fichiers HTML séparés
(on peut penser à les ranger dans un sous­dossier)
 Transformer la page statique en fichier PHP
 Remplacer les parties communes par des "include()"
Système d'Information
5
Exemple 1 : entêtes et pieds de page
Titre
Reste du texte de la page
blablabla
Créé par Machin Truc
Système d'Information
6
Exemple 1 : parties communes
 header.html
<TABLE><TR>
<TD><IMG SRC="logo.gif" WIDTH…></TD>
<TD><H3>Titre</H3></TD>
</TR><TABLE>
 footer.html
<HR NOSHADE WIDTH="80%">
<FONT …>Crée par Machin Truc</FONT>
Système d'Information
7
Exemple 1 : pages du site
 Tous les fichiers du site ont la forme de "page.php":
<HTML>…
<BODY>
<? include("header.html"); ?>
reste du texte de la page
blablabla
<? include("footer.html"); ?>
</BODY>
</HTML>
Système d'Information
8
Exemple 2 : mise en page à trous
fichier "titrehaut.html"
fichier "menu.html"
fichier "galeriecentre.php"
fichier "footer.html"
Système d'Information
9
Exemple 2 : pages du site
<HTML>
<TABLE WITH="90%">
<TR COLSPAN=2><TD>
<? include("titrehaut.html"); ?>
</TD></TR>
<TR><TD>
<? include("menu.php"); ?>
</TD><TD>
<? include("galeriecentre.php"); ?>
</TD></TR>
<TR … <? include("footer.html"); ?> …
</TABLE></HTML>
Système d'Information
10
Pages types à contenu variable
Gestion des parties communes : OK, mais => un fichier PHP pour chaque page utilisant le patron
Pages différentes = variation / version des trous
=> comme pour une fonction : valeurs des paramètres
=> solution : donner des paramètres à une page
=> envoyer des données au serveur Web
Système d'Information
11
Fournir des variables à une page
 On peut "passer" des variables sur l'URL (GET) :
fichier.php?variable=valeur
http://serveur/dossier/fichier.php?
var1=val1&var2=val2&…&varN=valN
• l'URL doit correspondre à un fichier PHP
• ne pas utiliser de caractères spéciaux ou espaces
 Dans les scripts du fichier PHP, les variables correspondantes sont dans le tableau $_GET[]
Système d'Information
12
Exemple 3 : "trous" variables
 Les pages types contiennent un trou variable
 Le trou doit être rempli par un fichier HTML
 Le paramètre peut être le nom du fichier à insérer
 On donne des valeurs au paramètres avec des liens :
<A HREF="pagetype.php?doc=a.html">
Document sur les a</A>
<A HREF="pagetype.php?doc=b.html">
Document sur les b</A>
Système d'Information
13
Exemple 3 : mise en page à trous
fichier "titrehaut.html"
fichier "menu.html"
=
liens définissant $doc
fichier variable ($doc)
fichier "footer.html"
Système d'Information
14
Exemple 3 : pagetype.php
<HTML>
<TABLE WITH="90%">
<… titrehaut.html …>
<TR><TD>
<? include("menugauche.php"); ?>
</TD><TD>
<? include("$doc"); ?>
</TD></TR>
<… footer.html … ></TABLE></HTML>
Système d'Information
15
Exemple 3 : compléments
 Si on ouvre l'URL du lien suivant :
< A HREF="pagetype.php">Lien simple</A>
• Le paramètre n'est pas fourni :
=> la variable ne sera pas définie dans "page.php"
< A HREF="pagetype.php?var">Lien vide</A>
• Le paramètre est fourni sans valeur :
=> la variable sera vide dans "page.php"
 il convient de tester cette variable
si elle n'est pas définie on inclut un autre fichier
Système d'Information
16
Exemple 3 : compléments
<TD>
<?
if (isset($_GET["doc"])
&& !empty($_GET["doc"])) {
$doc=$_GET["doc"];
} else {
$doc = "doc_par_defaut.html";
}
include($doc)
?>
</TD>
Système d'Information
17
Pages variables : autres paramètres
 Le paramètre d'une page peut être une variable permettant de générer le contenu.
 En général c'est une références dans une base de données :
• valeur de clé primaire => détail d'une entité
• valeur de clé étrangère => listes d'entité référencées
 Exemple : la page générée doit afficher un livre paramètre = ISBN du livre
• le détail à afficher est extrait de la table livre
•
Système d'Information
18
Exemple 4 : détail d'un livre
 La page générant le détail est appelée avec l'URL :
detail_livre.php?varisbn=456
 Le fichier "detail_livre.php" utilise la variable $varisbn :
$c = pg_connect("...");
$r = pg_exec($c,"SELECT * FROM LIVRES
WHERE isbn=$varisbn;");
list($i,$t,$p,$ed) = pg_fetch_row($r,0);
print("$i <B>$t</B> $p € (chez $ed)");
Système d'Information
19
Exemple 4 : le menu
 C'est une liste de livre dont on peut voir le détail
 On donne des valeurs au paramètres avec des liens :
<A HREF="detail_livre.php?varisbn=456">
Livres n° 456</A>
<A HREF="detail_livre.php?varisbn=387">
Livres n° 387</A>
Système d'Information
20
Exemple 4 : compléments
 Il faudrait tester $varisbn :
 Si le paramétre n'est pas défini ou vide => pas de détail
if (isset($varisbn) && !empty($doc)) {
$c = pg_connect("...");
$r = pg_exec($c,"…");
list($i,$t,$p,$ed) = ...;
print("…");
}
else {
print("Aucun livre sélectionné");
}
Système d'Information
21
Exemple 4 : compléments
 Si l'ISBN n'existe pas => pas de détail
if (isset($varisbn)) {
$c = pg_connect("...");
$r = pg_exec($c,"…");
if (pg_numrows($r) > 0) {
list($i,$t,$p,$ed) = ...;
print("…"); }
else { print("Référence incorrecte"); }
}
else { print("Aucun …"); }
Système d'Information
22
Systèmes de navigation généré
On peut généré automatiquement un système de menu
Les éléments du menu sont issus d'une BD
Chaque item est affiché comme un lien avec des variable
Les cibles sont des pages types variables
Système d'Information
23
Système de navigation simple

Il faut une table
• On peut ajouter une clé primaire pour l'unicité du paramètre

Exemple : table menu {titre,document}

Le menu est fabriqué à partir de la table

Le trou variable sera rempli par le paramètre "fichier.html"
Les animaux d'Afrique
afrique.html
Les animaux d'Asie
asie.html
Les animaux d'Europe
europe.html
Système d'Information
24
Exemple 5 : le menu
 Le fichier "menu.php" :
$c = pg_connect("...");
$r = pg_exec("SELECT * FROM Menu;");
for ($i=0;$i<pg_numrows($r);$i++) {
list($t,$d) = pg_fetch_row($r,$i);
print("<A HREF='page.php?doc=$d'>
$t</A><BR>");
}
Système d'Information
25
Exemple 5 : une page type variable
 Si le menu "ouvre" un nouveau document :
•
la page type peut être un popup à contenu variable
 Si le menu doit être sur la même page :
la page type inclut le menu et le document
• les liens sont des liens vers la page type
• à la première visite (pas de clic sur le menu)
=> le paramètre n'est pas défini
• paramètre défini => menu avec test
•
Système d'Information
26
Exemple 5 : une page type globale
<HTML><TABLE WITH="90%">
<TR COLSPAN=2><TD>
<? include("titrehaut.html"); ?>
</TD></TR>
<TR><TD>
<? include("menu.php"); ?>
</TD><TD>
<? include("$doc"); ?> // + test ex3
</TD></TR>
</TABLE></HTML>
Système d'Information
27
Exemple 5 : un menu variable
 Dans cette organisation le paramètre $doc est aussi défini dans le fichier inclus "menu.php"
 On peut l'utiliser pour "agrémenter" l'affichage du menu
 Ex : on veut coloré le menu sélectionné (celui correspondant au détail affiché à droite)
 Dans la boucle affichant le menu, on teste si le lien correspond au paramètre $doc
Système d'Information
28
Exemple 5 : le menu corrigé
for ($i=0;$i<pg_numrows($r);$i++) {
list($t,$d) = pg_fetch_row($r,$i);
if (isset($doc) && $d == $doc)
print("<FONT COLOR='red'>");
else
print ("<FONT COLOR='blue'>");
print("<A HREF='page.php?doc=$d'>
$t</A>");
print("</FONT><BR>");
}
Système d'Information
29
Système de navigation par relation
 Il faut 2 tables en relation 1 à plusieurs •
ex : livres / editeurs
 On souhaite visualiser les livres par éditeurs
•
la navigation doit utiliser le coté 1 de la relation
 Créer une page variable avec la clé : edid
•
cette page affiche les livres de l'éditeur indiqué
 On crée un menu à partir de la table Editeurs :
•
pour chaque edid : un lien avec la valeur
Système d'Information
30
Exemple 6 : le menu
 Le fichier "menu_editeurs.php" :
$c = pg_connect("...");
$r = pg_exec("SELECT edid,nom
FROM Editeurs;");
for ($i=0;$i<pg_numrows($r);$i++) {
list($id,$n) = pg_fetch_row($r,$i);
print("<A HREF='livres.php?varid=$id'>
$n</A><BR>");
}
Système d'Information
31
Exemple 6 : les livres
 Le fichier livres.php :
$c = pg_connect("...");
$r = pg_exec("SELECT titre FROM
Livres WHERE edid=$varid;");
for ($i=0;$i<pg_numrows($r);$i++) {
list($t) = pg_fetch_row($r,$i);
print("<TR><TD>$t</TD><TR>");
}
Système d'Information
32
Exemple 6 : les deux sur une page
 On peut utiliser des pages à "trous"
 Un fichier PHP "navigediteur.php"
 C'est la page globale qui doit recevoir la variable
 La page est formée d'une table avec 2 trous :
Le menu : include("menu_editeurs.php");
• Le détail des livres : include("livres.php");
•
 La variable reçue est définie dans tous les scripts inclus
Système d'Information
33
Exemple 6 : les corrections à faire
 Les liens du menu doivent être sur la page globale :
print("<A HREF='navigediteur.php
?varid=$id'>$n</A><BR>");
 A la première visite la variable "$varid" n'est pas définie
 Il faut tester dans "livres.php" :
if (isset($varid)) {
// include("livres.php"); }
else {
// inclure("accueil.html"); }
Système d'Information
34
Exemple 6 : la totale
<HTML><TABLE WITH="90%"><TR>
<TD><? include("menu_edit.html"); ?
></TD>
<TD>
<?
if (isset($varid)) {
// include("livres.php"); }
else {
// inclure("accueil.html"); }
?>
</TD>
</TR></TABLE><HTML>
Système d'Information
35