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