Construction d'un CMS

Nous allons décrire pas à pas comment construire un système de gestion de contenu, qui utilise PHP comme langage de programmation, et XML ou MySQL pour stocker les données. Ce n'est pas un simple tutoriel, mais un projet concret pour construire un outil utilisable en production.

Pourquoi construire un CMS?

Des centaines de CMS gratuit sont disponibles, alors pourquoi en construire un autre?
Ce projet est différent parce que nous voulons à la fois construire un outil et expliquer comment l'outil peut être construit. Nous croyons que les applications Web vont commencer à remplacer celles qui fonctionnent localement et aussi remplacer les sites web classiques constitués de pages rédigées sur un éditeur HTML. Maintenant les sites web tendent à être de plus en plus élaborés et sont faits de technologies évoluées aussi devront nous connaître comment ces outils fonctionnent.
Le remplacement des logiciels du bureau par les applications web ne signifie pas que l'on travaillera en ligne à l'avenir, mais que nous utiliseront des applications qui sont construites pour le web: elle peuvent fonctionner localement aussi.
Une autre raison de connaître comment se construit un CMS est que les outils offerts actuellement sont conçus uniquement pour publier des documents, si nous voulons accomplir des traitements particuliers sur les données avant de les publier, il nous faut notre propre logiciel.

Intérêts du CMS final

Une fois achevé, ce CMS permettra à tout utilisateur d'ajouter du contenu au site sans aucune connaissance des technologies utilisées pour le faire fonctionner. Des contributeurs pourront écrire des articles avec un éditeur wysiwyg (pas en infâme bbCode), et le webmestre pourra gérer les articles, les commentaires, les nouvelles, etc.. sans avoir besoin non plus de plus de connaissances.

Pré-requis

L'outil requiert pour le programmeur:
- un hébergement supportant PHP pour tester les démos,
- un éditeur HTML,
- le compilateur Scriptol pour générer les plus gros morceaux de code PHP,
- et optionnellement des bibliothèques sous licence LGPL pour étendre le CMS (avec un forum par exemple).
Le webmestre du site lui aura besoin uniquement d'un hébergement PHP et MySQL pour installer le CMS final.

Comment construire le CMS: la conception

Nous avons démarré un projet qui est à la fois un tutoriel et un outils réellement fonctionnel. Nous allons ajouter outil après outil et chacun viendra avec un tutoriel expliquant comme il est réalisé, comment il fonctionne et comment étendre ses possibilités.
Le CMS final sera constitué d'un ensemble de modules qui assumerons ces fonctionnalités:
- L'édition des articles se fait avec un éditeur wysiwyg d'origine externe.
- Les échanges avec le serveur se feront en Ajax (pas une surprise!).
- On utiliser CSS pour la présentation et les templates du CMS.
- Les textes sont traités pour remplir le template, puis enregistrés directement en fichiers HTML, et non dans une base de données.
- Les informations de gestion sont stockées en XML ou JSON.
- Les informations utilisateur devraient être stockées en XML encodé, ou dans une base de données.
- Les lecteurs pourront ajouter des commentaires à chaque article. Ils peuvent être intégrés dans la page HTML (avec un affichage dynamique à la demande) ou enregistrés dans un fichier XML additionnel.
- Les contributeurs pourront aussi proposer des articles. Ces derniers seront d'abord stockés dans une catégorie "proposés"..
- RSS, forum / FAQ, news et annuaires seront ajoutés en tant qu'extensions.

Construction d'un Blog

Techniquement, un blog est une page web contenant une liste de billets en ordre chronologiquement inversé. La principale différence avec le site portail est que plusieurs textes s'affichent sur une même page, mais si nous pouvons définir le nombre de billets sur une page, il nous suffit de mettre ce nombre à 1 pour convertir un blog en portail, pourvu que soit affiché à coté sur la page principale une partie permanente décrive et lie au contenu du site.
Un blog doit aussi avoir des outils spéciaux pour retrouver les textes et la possibilité pour les visiteurs d'ajouter des commentaires, chose que nous avons l'intention d'inclure dans notre CMS.

Détails des composants

Les plupart de ces composantes sont indépendantes et pourraient être traitées dans n'importe quel ordre.

Ajout d'un éditeur wysiwyg pour créer des pages

Nous devons pouvoir composer des articles avec un éditeur, sur n'importe quel ordinateur en ligne, une fois qu'un mot de passe a été donné.
Les pages ne sont pas stockées directement mais sont traitées par un interpréteur qui remplit un template avec le texte que le webmestre ou contributeur a entré.

Gestion des menus

Les pages créées ne doivent pas rester orphelines. Un lien doit être créé sur le fichier. Nous devons pouvoir créer des menus avec catégories et sous-catégories et y ajouter un lien pour chaque nouvelle page venant sur le site.
Le nom de la catégorie est donné lorsque le texte est entré, et l'on aura aussi la possibilité d'éditer le menu.

Authentification des contributeurs

Un formulaire permettra d'entrer un nom d'utilisateur et un mot de passe avant de pouvoir ajouter du contenu au site. Si le site permet des contributeurs multiples, le gestionnaire accorder des permissions et sauvegarder les profils. Ceci utiliserait de préférence MySQL.

Permettre les commentaires sur les articles

Les lecteurs pourront placer des commentaires et ajouter des réponses aux commentaires d'autres internautes. Cela transforme le site en forum et nécessitera quelque gestion. L'administrateur doit pouvoir effacer des commentaires. Il nous faut construire un système pour stocker les commentaires, les afficher sous forme de liste ou d'arborescence qui peut être ouverte ou refermée (comme les répertoires). XML convient bien pour ce genre de structure.

Administration

Il nous faut concevoir un panel d'administration pour pouvoir gérer le système:
- créer ou éditer des articles,
- effacer des articles ou des commentaires,
- gérer les utilisateurs,
- configurer le système.

RSS

Un flux RSS doit pouvoir être créé pour une sélection de pages ou les derniers articles ajoutés au site. Il fonctionnera comme liste premier entré premier sorti, les titres les plus anciens étant supprimés pour faire de la place aux plus récents.

Sitemap

Une carte de site sera générée automatiquement. Idéalement, la carte sera mise à jour dès qu'un nouvel article est créé. En fait puisque la sitemap standard est un fichier XML, le gestionnaire d'articles qui est accessible à partir du panel d'administration pourrait utiliser directement ce fichier XML pour stocker la liste des articles.

Le code

Forum

Construire un CMS, passionnant ...

09-09-2009 19:41:21

gwinru

Passionnant ces articles sur construire un CMS. J'ai utilisé avec bonheur une partie des conseils. Que c'est simple, à coté des monstres du marché, de pouvoir éditer une page existante avec FckEditor bien paramétré. Peut-on espérer la suite ?
09-09-2009 20:30:17

webmaster

Et bien, la prochaine étape, c'est l'utilisation de Tiny MCE que l'on va interfacer avec des pages HTML statiques ou avec une base MySQL. Cela permettra de disposer d'un éditeur en ligne, et dans la foulée de pouvoir mettre à jour sitemap, flux RSS et autres automatiquement.
09-09-2009 23:06:46

gwinru

J'attends ça avec impatience. Bravo encore pour le site.