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