Première page en PHP

Présentation

But

Réaliser une 1ere page en PHP destinée à générer automatiquement la liste des ponts à chaque ajout de nouvelles pages.

Connaissances de base

Revoir le cours sur le PHP

Activité

Il va falloir :

Déterminer les différentes pages (décrivant un pont) placées sur notre site.

Trouver pour chaque page le pont concerné.

La liste des ponts et le fichier associé sera placé dans un tableau qui sera trié dans l'ordre alphabétique

Afficher la liste triée sur la page

Connaissances supplémentaires

Il existe de nombreuses bibliothèques PHP contenant des fonctions utiles aux différentes tâches à réaliser. Voir sur Références PHP le détail des différentes fonctions ci-dessous grâce a son moteur de recherche.

Le système de fichier

Le système de fichier correspond à l'arborescence des adresses URL (dossier(s) / fichier). Le dossier courant se représente par un point '.' et le dossier parent par '..'. Il comporte 2 parties : Une table qui se compose : du nom du fichier/dossier, de pointeurs (dossier parent, fichier suivant, espace de donnée utilisé ...) et des informations de gestion). Un espace de données qui contient le contenue utile des fichiers.

Il est nécessaire de :

Pointer sur le dossier courant (ou sont enregistrées nos pages) : opendir()

Lire les fichiers qui s'y trouvent : readdir()

Conserver ceux qui contiennent du HTML sauf index.html : pathinfos()

Coup de pouce

// Définir une variable pointant sur notre site (la position de la page courante est symbolisée par un point) // Opendir fourni un pointeur sur un dossier et sélectionne son 1er fichier. $site = opendir("."); // lire tout les fichiers les un après les autres (réponse false si tous les fichiers ont été lus) // readdir fourni le pointeur sur le fichier courant du dossier et sélectionne suivant sinon "false". while (($fichier = readdir($site)) != false) { // ne conserver que les fichiers d'extension HTML // pathinfos fourni dans un tableau des informations sur un fichier dont l'extension et le nom de base $info = pathinfo($fichier); if ($info["extension"] == "html") { // ne pas conserver le fichier index.html s'il existe if ($info["basename"] != "index.html") { ... } } }

Le contenu d'un fichier HTML

le HTML est un langage de balisage issu du XML. Il existe des fonctions prédéfinies pour en récupérer le contenu.

Il faut :

Ouvrir chaque fichier HTML : SimpleXMLElement()

Récupérer le nom du pont contenu dans la balise <h2> du corps (<body>) du fichier

Coup de pouce

// Ouvre le fichier pour en lire le contenu ($page = contenue de la balise HTML) $page = new SimpleXMLElement('./' . $fichier, NULL, TRUE); // Récupère le nom du pont dans la balise body->h2 $pont = $page->body->h2;

Les tableaux

Un tableau est une liste de clé->valeur. Une fois le tableau créé, je peux ajouter de nouvelle clé->valeur ou en lire le contenue. Les clés (série de nombres débutant à 0 ou série de mots uniques dans la liste) permettent d'accéder aux différentes valeurs. Les tableaux peuvent être “multidimensionnel” (la valeur est elle même un tableau). Ils peuvent aussi être parcourus de manière itérative.

Il faut :

Créer un tableau pour contenir la liste (avant d'accéder au système de fichier) : array()

Ajouter un élément (fichier->pont) pour chaque fichier HTML valide

Trier la liste lorsque tous les fichiers ont étés lus : asort()

Coup de pouce

// Créer un tableau vide $liste = array(); ... // Ajouter un élément clé->valeur (nom_du_fichier -> nom_du_pont) $liste[$info["basename"]] = $pont; ... // Trier la liste à partir des valeurs (nom_du_pont) asort($liste);

Affichage de chaînes de caractères

Nous avons vu que 2 chaînes de caractères pouvaient être concaténées grâce à l'opérateur '.' mais il existe aussi de nombreuses fonctions comme : chercher la position d'une sous chaîne, extraire une sous chaîne, convertir la chaîne (minuscule/majuscule ...), remplacer une partie de chaîne, formater une chaîne ... Concernant l'affichage d'un résultat, c'est sa mise en forme qui nous importe le plus.

Indiquer le nombre de pont de la liste : count()

Créer une boucle pour traiter tous les éléments de la liste des ponts : foreach()

Afficher chaque élément de la liste de manière formatée : printf()

Coup de pouce

// Afficher le nombre de pont echo "La collection possède " . count($liste) . " ponts :\n"; // Début de liste et parcourir la liste des ponts echo "<ul>\n"; foreach ($liste as $key => $value) // créer les balises HTML pour mettre en place chaque élément de la liste de liens utiles printf("<li><a href='%s'>%s</a></li>\n", $key, $value); // Fin de la liste echo "</ul>\n";

Améliorations

Cette 1ere page PHP nous permet de ne plus modifier notre page “index” à chaque ajout de nouveau pont.

Pour aller plus loin avec le PHP, il faut des compétences en base de données SQL et formulaire HTML. La base de donnée nous permettra de stocker toutes les informations des ponts et le formulaire de transmettre les informations de chaque pont à la base de données.
Au lieu d'un fichier index et d'autant de pages que de ponts, notre site pourra fonctionner avec seulement 3 : un fichier index (qui en plus de la liste pourra utiliser un moteur de recherche grâce à la base de donnée), un fichier formulaire (pour ajouter les nouveaux ponts) et un fichier d'affichage (valable pour tous les ponts).

Le PHP (ou les autres langages web) ont permis la génération automatisée de page et le développement des sites marchands et autres.