Créer un wiki simple avec les fichiers

Formation

En Semi-présenciel Paris

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En semi-présentiel

  • Lieu

    Paris

Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Les sites et dates disponibles

Lieu

Date de début

Paris ((75) Paris)
Voir plan
7 Cité Paradis, 75010

Date de début

Consulter

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours

Bienvenue à tous dans ce tutoriel. :)

Au cours de celui-ci, je vais vous apprendre à créer un système de pages « wiki » (pages éditables par tout le monde) incluant bon nombre de fonctionnalités agréables.

Sachez que tout repose sur les fichiers ; nous n'avons pas besoin de base de données. Cet aspect facilite grandement la portabilité du code, notamment dans le cas où vous souhaitez le partager avec des amis. ;)

Niveau :6/10 - Intermédiaire.

Un système qui fonctionne avec les fichiers ?

Dans un premier temps, je vais vous décrire précisément le fonctionnement des scripts, et ce que je n'inclurai pas dans le tutoriel.

Comme dit dans l'introduction, nous n'utiliserons pas de base de données. Il s'agit d'un plus sur certains points, mais cela peut aussi compliquer la tâche du codeur.

L'atout principal des fichiers est qu'ils garantissent une bonne organisation grâce à la création de sous-dossiers. :)

Le problème des fichiers

Je dois vous avertir : l'utilisation des fichiers implique un souci de taille. En effet, il faut assigner certains droits au script pour qu'il puisse créer des fichiers.

Chez certains hébergeurs, le problème ne se pose pas puisqu'aucune manipulation n'est à faire, mais en général il faut que vous modifiiez le CHMOD du fichier pour lui donner la valeur 777 (tous les droits). Si vous ne savez pas comment procéder, une petite exploration sur un moteur de recherche s'impose. ;)

Lorsque nous aurons créé les fichiers, il faudra donc que vous changiez leur CHMOD, en particulier pour les pages amenées à créer ou modifier des fichiers. ;)

Le fonctionnement

Je vais vous décrire plus en détail le fonctionnement des scripts.

Nous allons tout d'abord créer un dossier nommé lib, qui contiendra toutes les fonctions qui seront utilisées.

Ensuite, nous créerons trois pages différentes :

  • view.php (à la racine, et non dans le dossier lib), qui s'occupera d'afficher la page ;

  • edit.php, qui servira à la modification d'une page ;

  • restauration.php, qui en permettra la restauration (comme l'indique le nom du fichier ! :-° ).

Euh... restauration de la page ? Que veux-tu dire par là ?

Concrètement, à chaque modification (dont la création) d'une page, une sauvegarde sera créée. L'énorme avantage consiste, si un internaute mal intentionné efface la totalité du contenu, à pouvoir en deux clics restaurer la page telle qu'elle était avant ! :)

Enfin, la dernière page, index.php, s'occupera d'afficher la liste des pages créées.

Je ne parlerai pas...

Dans ce mini-tuto, je n'évoquerai volontairement pas toutes les fonctions existantes en matière de wiki.
On peut déjà citer la possibilité de diviser une page en plusieurs parties (tel un tutoriel sur le SdZ) ; c'est faisable, mais relativement difficile avec les fichiers.

Ensuite, la mise à la corbeille. Beaucoup d'entre vous connaissent certainement l'interface ZAP, développée par bluestorm.
Cette interface intègre notamment la fonction servant à supprimer mettre à la poubelle un document (tutoriel, news, etc.). Il s'agit d'une fonctionnalité essentielle permettant de virer de la liste les documents inutiles. :)

Mais je n'en parlerai pas ici : le but de ce tutoriel est de vous aider à concevoir un système de pages wiki simple, et non quelque chose de super-sophistiqué.

Je suis désolé, mais j'ai dû faire ce choix afin de ne pas écrire un tutoriel de trente pages qui ennuierait le lecteur...

Enfin, une chose que beaucoup aimeraient pouvoir créer (mais qui ne sera pas présentée dans ce tutoriel) : une interface permettant l'insertion de balises comme le zCode.
Une fois de plus, ce choix est justifié, un tutoriel très bien réalisé (par madmac) existant déjà : Parser du XML - L'exemple du zCode.

Voilà, j'espère n'avoir pas déçu trop de monde. Cela dit, rassurez-vous, ce que je vais vous apprendre sera pour vous une excellente base. Libre à vous de rajouter par la suite pleins de fonctions superflues ! :p

La page d'accueil

Concevons la page d'accueil.

Dans un premier temps, nous allons créer dans le dossier lib un fichier intitulé liste_pages.php.
Il est censé contenir la fonction qui permet de lister toutes les pages existantes. :)

Tout d'abord, déclarons la fonction et une variable utile :

<?php function liste_pages() { GLOBAL $donnees; // Cette variable sera renseignée à la fin du script $repertoire = "pages"; ?>

Comme vous pouvez le constater, il n'y a rien de bien compliqué à cela.

Maintenant, nous allons récupérer tous les dossiers du répertoire pages (vous devez créer ce dossier ;) ) :

<?php $dossiers = glob($repertoire.'/*'); asort($dossiers); // On classe les noms de dossiers afin qu'ils soient affichés par ordre alphabétique / croissant ?>

Nous allons déclarer trois variables, dont deux tableaux.
Le premier tableau contiendra les noms des pages, le deuxième leur id (identifiant) et la troisième variable sera un compteur pour le foreach qui suit. ;)

<?php $noms = array(); $ids = array(); $compteur = 0; ?>

Nous pouvons maintenant ajouter le foreach qui va placer le nom et l'id de la page dans les deux tableaux que nous avons créés précédemment. :)

<?php foreach($dossiers as $adresse) // On va lister tout ça { if(is_dir($adresse)) // On vérifie qu'il s'agit bien d'un dossier que l'on traite, et non un fichier ! { $id = explode('/', $adresse); $ids[$compteur] = $id[1]; // Nom du dossier = id de la page :) $ouverture_titre = fopen($adresse.'/titre.txt', 'r'); // On ouvre le fichier contenant le titre de la page $lecture_titre = fread($ouverture_titre, filesize($adresse.'/titre.txt')); // On lit le fichier - filesize retourne la taille du fichier :) $noms[$compteur] = $lecture_titre; // On met le titre dans le tableau qui contient les titres des pages $compteur++; // On incrémente le compteur } } ?>

Vous souvenez-vous que j'ai déclaré comme « globale » la variable $donnees ? Eh bien, nous allons la renseigner ; elle va contenir un tableau :

<?php $donnees = array('Noms' => $noms, 'Id' => $ids); ?>

Voilà ! Nous disposons à présent de notre fichier liste_pages.php, qui contient la fonction pour lister les pages.
Il ne nous reste plus qu'à afficher tout cela sur la page index.php :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>Accueil du Wiki</title> </head> <body> <p> <?php require('lib/liste_pages.php'); // On va lister les pages ! liste_pages(); $compteur = 0; foreach($donnees['Noms'] as $nom) // On explore le tableau { echo '<a href="view.php?id='.$donnees['Id'][$compteur].'">'.$nom.'</a> [<a href="edit.php?id='.$donnees['Id'][$compteur].'">Editer</a>]<br />'; // On affiche le nom avec un lien pour l'édition $compteur++; } echo '<br /><a href="creer.php">Créer une page</a><br />'; ?> </p> </body> </html>

La page d'accueil est maintenant terminée. :) Au passage, vous remarquerez que tous les liens visibles sur cette page ne vous sont pas très utiles ; on va régler cela dans les parties suivantes. ;)

Créer et modifier une page

Bon, on va enfin pouvoir attaquer les pages les plus importantes. :)

Dans un premier temps, on va élaborer la page creer.php, qui aura pour but de créer une page.
Ensuite, ce sera au tour de edit.php, qui permettra d'en modifier.

Créer une page

Encore une fois, on va créer une page qui appellera le fichier creer_page.php (qui se trouve dans le dossier lib). ;)
Si je sépare les fichiers comme cela, c'est pour que la modification des scripts soit plus aisée : ainsi, on ne se retrouve pas avec des fichiers de 300 lignes. :p

Commençons par déclarer la fonction :

<?php function creer_page($type, $titre, $contenu) { GLOBAL $id_a_creer; ?>

Pour information, sachez ceci :
$type contiendra normal ou protege. Si la valeur est protege, on concevra un système pour bloquer l'édition de la page. :)
$id_a_creer contiendra l'id de la page créée. ;)

Maintenant, on va utiliser la fonction glob(), qui dresse dans un tableau la liste des fichiers et dossiers du répertoire passé en paramètre. :)

<?php $liste_dossiers = glob($repertoire.'/*'); // On va lister tous les dossiers, en sachant que le nom du dossier == l'id de la page $ids; // Cette variable contiendra les id de toutes les pages $compteur = 0; // Compteur qui servira au foreach ?>

Nous pouvons maintenant démarrer le foreach, afin qu'il nous trouve l'id de la dernière page créée. La méthode employée est très simple ; je vous laisse regarder :

<?php foreach($liste_dossiers as $nom) { if(is_dir($nom)) { $id = explode('/', $nom); // On va séparer les parties de $nom pour avoir la dernière : l'id du dossier $ids[$compteur] = $id[1]; // On stocke l'id dans le tableau $compteur++; } } $id_a_creer = max($ids); // Grâce à la fonction max, on récupère le plus grand id du tableau ?>

À présent, on va augmenter de 1 la variable $id_a_creer, pour qu'elle contienne le nouvel id.
Ensuite, nous allons créer le dossier qui aura pour nom cet id, et déclarer la variable $repertoire qui va nous servir pour toutes les actions sur les fichiers qui suivront. :)

<?php $id_a_creer++; $creer_dossier = mkdir($repertoire.'/'.$id_a_creer); // On crée le dossier $repertoire = $repertoire.'/'.$id_a_creer; ?>

Si $type (pour rappel, il s'agit de l'un des paramètres de la fonction) est égal à protege, on crée un fichier de plus :

<?php if($type == "protege") { $creer_fichier_protect = fopen($repertoire.'/protect', 'w+'); fclose($creer_fichier_protect); } ?>

Ce fichier sera vide, mais il va exister, et il suffira de vérifier si ce fichier existe pour savoir si l'édition est interdite ou non. ;)

Rien de bien compliqué. :) Petit rappel à propos de fopen : il faut lui indiquer comment ouvrir le fichier (lecture, écriture, etc.). Toutes ces façons d'ouvrir le fichier sont disponibles ici : DOC PHP.
Dans notre cas, le moyen utilisé est « en écriture, on crée le fichier s'il n'existe pas » (= w+).

À présent, on va créer les fichiers qui contiendront le titre et le contenu :

<?php file_put_contents($repertoire.'/titre.txt', $titre); // On écrit le titre dans le fichier file_put_contents($repertoire.'/contenu.txt', $contenu); // On inscrit le contenu dans le fichier ?>

Il nous reste une dernière étape à effectuer ; elle concerne l'historique de la page : dans ce cas-ci, il faut sauvegarder à un autre endroit le titre et le contenu pour qu'il soit possible, après une modification non désirée, de remettre cette version à la place de celle qui est en ligne. ;)

<?php ###################################################### ## Partie pour les sauvegardes, pour la restauration ## ###################################################### $timestamp_actuel = time(); // On récupère le timestamp actuel pour dater la sauvegarde $creer_dossier_sav = mkdir($repertoire.'/save'); // On crée le dossier qui va contenir toutes les sauvegardes de la page $creer_dossier_time = mkdir($repertoire.'/save/'.$timestamp_actuel); // On crée le dossier qui va contenir le titre et le contenu pour pouvoir restaurer après ! $repertoire = $repertoire.'/save/'.$timestamp_actuel; // On change le répertoire de traitement ## Même étape que précédemment file_put_contents($repertoire.'/titre.txt', $titre); file_put_contents($repertoire.'/contenu.txt', $contenu); ############################################# ## Fin de la partie pour les restaurations ## ############################################# ?>

Et voilà ! :)

Il faut maintenant que l'on constitue la page creer.php (ne se trouvant pas dans le dossier lib) qui affichera le formulaire. ;)

Étant donné que le code est très simple, j'ai jugé inutile de vous en détailler le contenu. Le voici :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>Wiki</title> </head> <body> <?php if(!empty($_POST['titre']) && !empty($_POST['contenu'])) // Si le formulaire a été validé et qu'il n'est pas vide { $titre = htmlspecialchars($_POST['titre']); // La variable contenant le titre $contenu = nl2br(htmlspecialchars($_POST['contenu'])); // Le contenu require('lib/creer_page.php'); // On récupère la fonction pour créer la page if(isset($_POST['1'])) // Si on crée la page normalement creer_page('normal', $titre, $contenu); // On appelle la fonction pour créer la page if(isset($_POST['2'])) // Si on veut rendre l'édition impossible creer_page('protege', $titre, $contenu); // On appelle la fonction pour créer la page echo 'Votre page a bien été créée !<br /> Vous pouvez la voir ici : <a href="view.php?id='.$id_a_creer.'">voir ma page</a>.'; } else // on n'a pas validé le formulaire, alors on l'affiche ! { echo '<form method="post" action="creer.php"> <p><label for="titre">Titre de votre page : </label><br /> <input type="text" name="titre" id="titre" /><br /> <label for="contenu">Contenu de votre page : </label><br /> <textarea name="contenu" id="contenu" cols="100" rows="10"></textarea><br /> <input type="submit" name="1" value="Créer ma page !" /><input type="submit" name="2" value="Créer et rendre impossible l\'édition" /></p></form>'; } ?> </body> </html>

Faites bien attention à la partie qui...

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Créer un wiki simple avec les fichiers

Prix sur demande