Consulter un tutoriel

Gérer le versionnement des textes

2020-04-06 08:51:30 par François Parisien

Contexte

Comment Wikipédia fonctionne pour être capable d’afficher l’historique des modifications de ses articles ? C’est tellement pratique lorsque plusieurs peuvent modifier un texte.

Ici, on verra comment mettre en place un versionnement de texte.

Description du besoin

Nous allons mettre en place un système qui permettra de revenir en arrière, à tout moment. Ainsi, si une erreur se glisse, il sera possible de revenir à la version précédente du texte.

Il faudra, non seulement mettre en place la sauvegarde de l’historique des modifications, mais aussi mettre en place un système permettant de revenir à une version précédente.

Requis technique

  • PHP >= 7
  • MySQL >= 5.6

Connaissances requises

  • Lire, écrire et supprimer des données dans une base de données SQL;
  • Écrire et traiter des formulaires;
  • Lire des paramètres passé dans les URLs.

Description du fonctionnement

Prenant comme exemple que nous avons une section bêtement appelé « page » sur notre site. Cette section ne sera qu’un prétexte pour ce tutoriel. Elle aura pour vocation d’afficher du texte qu’on aura saisie depuis un formulaire.

Il y aura donc un titre et un texte principal. Comme dans tout bonne page de contenu traditionnelle.

L’idée sera d’entreposer le texte et le titre dans une table dédié à eux. Ainsi, la table qui contiendra la liste des pages créés devra faire un lien avec le texte stocké dans l’autre table.

La table contenant les textes pourra ensuite servir d’historique puisqu’elle contiendra toutes les itérations des textes sauvegardés.

Les étapes à faire

  • Il faudra créer une table SQL pour nos textes. Elle aura ces champs-là :
    • Id : l’Id unique du texte;
    • Page Id : l’Id de la page associé à ce texte (voir la prochaine table);
    • Date de sauvegarde : la date à laquelle le texte a été sauvegardé;
    • Titre : Le titre du contenu;
    • Content : le texte. Notre contenu principale.
  • Une seconde table SQL devra être créée. Elle contiendra la liste des pages crées :
    • Id : l’Id unique de la page;
    • Date de publication : Date à laquelle la page fût créée;
    • Date de modification : Date de la dernière modification;
    • Revision Id : l’Id de la précédente table. Cette Id sera le texte qui sera affiché.
  • Un formulaire devra être bâti afin de créer une nouvelle page. Ce formulaire contiendra un champ pour le titre et un autre pour le contenu
    • Lorsqu’on soumettra le formulaire, il faudra d’abord insérer le texte dans la table des textes.
    • On récupèrera ensuite l’Id de l’entrée inséré.
    • On insèrera ensuite l’information dans la table des pages.
  • Le même formulaire devra être bâti pour modifier une page.
    • Pour récupérer le contenu, on va récupérer l’Id contenu dans le champ « Revision Id » et on va récupérer le contenu associé à cette Id dans la table des textes;
    • Lorsque le formulaire sera envoyé, on va insérer une nouvelle ligne dans la table des textes.
    • On va récupérer la nouvelle Id de la ligne insérée et on va modifier le champ « Revision Id » de notre table de page afin d’y mettre cette nouvelle Id.
  • Dans la page de modification, une section pourra être affiché dans le bas permettant de revenir à une version antérieur
    • Il faudra faire une requête dans la table des textes afin de récupérer tous les textes dont le champ « Page Id » correspond à la page en cours de modification;
    • Chaque ligne récupéré aura un lien pour revenir à cette version. Le lien devra avoir en paramètre l’Id du texte;
    • Une fois qu’on clique sur le lien, le processus viendra modifier le champ « Revision Id » pour l’Id du texte sélectionné pour la page en cours de modification.
  • Une page listant les pages crées devra contenir ce processus :
    • On liste les pages en faisant une requête sur la table des pages;
    • Le champ « Revision Id » contenant l’Id du texte à afficher, on s’en sert pour récupérer les textes dans la tables qui les contient;
    • Chaque page devra avoir un URL qui aura en paramètre l’Id de la page.
  • Une page d’affichage devra être créés pour afficher le contenu d’une page en base de données
    • En paramètre d’URL, l’Id de la page sera passé;
    • On se servira de ce paramètre pour récupérer les informations dans la table des pages;
    • Le champ « Revision Id » faisant référence aux textes à afficher, on récupérera les informations relatifs a cette Id dans la table des textes;
    • On affichera le titre et le contenu principal récupéré

Aller plus loin

  • Une page pourrait être créée afin de visualiser le contenu du texte avant de revenir à une version antérieur. Un bouton pourrait être exposé sur cette page pour approuver son choix ou pour annuler le processus;
  • Visualiser les différences entre 2 versions. L’idée est simple : On prend le contenu de deux versions et on analyse, ligne par ligne, les différences. Cela demandera de comparer si la ligne du texte 1 est pareil à celle du texte 2, et ainsi de suite. On pourrait y aller plus granulairement en comparant les caractères de ces lignes. Par exemple, est-ce que le 2ième caractères du texte 1 est le même que celui du texte 2;

Code Source

Base de données

Table "pages_textes"
La table qui contiendra les textes
Table "pages"
La table qui contiendra les pages

Code PHP

Fichier "ajouter-page.php"
Fichier contenant le formulaire pour ajouter une page dans la base de données
Fichier "modifier-page.php"
Fichier contenant le formulaire pour modifier une page dans la base de données
Fichier "liste-pages.php"
Fichier listant les pages
Fichier "voir-page.php"
Fichier pour visualiser une page

À propos de l'auteur

François Parisien

Développeur PHP de métier, mais développeur PHP surtout par passion. Au début de mon adolescence, je découvre ce langage alors que j'avais soif de faire mon propre site web. C'était au tournant des années 2000. Depuis, je n'ai cessé d'apprendre. Avec le temps, j'ai touché à plusieurs outils : Wordpress, Drupal, Joomla, Symfony, Magento 1 et Magento 2. Cela m'a apporté une plus large connaissance encore. Connaissance que je vais tenter de transmettre ici.


Scroll to Top