par
Luigi_home » 30 avr. 2010, 06:03
Salut,
Je vais le dire en premier : Je ne poste pas pour faire partie de ton projet (un topic décrivant mon projet est d'ailleurs disponible sur ce forum). Je suis déjà bien occupé avec le mien, il serait idiot de me saturer encore plus :p !
Cependant, je bâti moi aussi un espèce de framework / CMS, je peux donc t'apporter quelques conseils si tu me le permets. Parce que j'ai passé par là et que tu sembles plus ou moins à l'aise avec le combo PHP / MySQL. Je pense que tu te lances dans un tel projet sans t'être posé les bonnes questions.
Un CMS, c'est complexe à l'intérieur
Avant même de penser à faire un système de news ou un espace membre, il faut monter le coeur de notre CMS. Sans ce coeur, on ne pourra pas avoir de coordination entre nos différents modules et extensions. Il est donc important de le bâtir pour qu'il soit le plus flexible possible.
Le coeur d'un CMS, comme on l'a dit précédemment, c'est la gestion des modules et extensions. Mais c'est une définition très large. En réalité, il s'agit plutôt de donner à ton CMS des outils de base où viendront par la suite se greffé les différents modules. Il faut prévoir un moteur de template (même si on se sert de PHP, il faut quand même le prévoir), implémenter une méthode de fonctionnement pour les modules (la meilleure que j'ai trouvé étant le MVC), charger les différentes fonctions primaires du CMS (la gestion des erreurs, la gestion de MySQL, etc.), charger les extensions utilisable (Uploads, BBCode, etc.), et selon la taille du CMS, il peut se rajouter plusieurs autres choses.
Ça, c'est le rôle que doit jouer le coeur d'un CMS. Sans ce coeur, il est impensable de monter quelque chose qui tienne vraiment la route. En théorie, on peut coder un CMS n'importe comment et ça va fonctionner. Par contre, si on veut quelque chose qui puisse être lisible, flexible, rapide, léger et intuitif, il faut un architecture primaire spécialement conçu.
Comment construire un module ?
On ne se penchera pas sur la question de code, mais plutôt sur la question d'organisation. C'est quoi un module ? Ça peut sembler bête, mais j'ai vue que tu prenais à tord qu'un système d'administration était un module. Un espace membre est un module, un système de news en est tout autant. Par contre, un système d'administration n'apporte rien de concret : Qu'est-ce que tu veux administrer ?
Un module, ça se doit d'être visible à tous. Si je crée un module de membres, les visiteurs du site en bénéficie. Si je crée un système de news, les visiteurs sont dorénavant au courant de l'actualité du site. Un module doit apporté quelque chose de concret à ceux qui consulte un site. Comme je le disais plus tôt, un espace d'administration ne répond pas à cet exigence. Pense toujours que du point de vue CMS, un module peut être désactivé par l'utilisateur. S'il désactive l'espace d'administration, on a un problème : il ne pourra plus administrer son CMS.
Pour palier à ce problème, on va coller les administrations aux modules. Quand tu créeras un système de news, tu créeras aussi les fonctions Ajouter, Modifier, Supprimer. À partir de ces fonctions, tu pourras créer un espace d'administration complet qui sera greffé au module. Si on désactive le système de news, on désactive par le fait même son panel d'administration.
Si on doit avoir un administration pour le CMS, il ne faut pas que ce dernier soit sous forme de module, mais plutôt sous forme d'obligation. Je l'ai dis plus haut : Un module doit être désactivable. On ne peut pas permettre à l'utilisateur de désactivé l'administration du CMS, car il se trouvera le bec à l'eau

! On va préférer l'incorporé directement dans le CMS. Une fois fait, on ne peut plus le désactivé et le CMS garde toute sa logique.
Un cahier des charges, ça remet les idées claires
Un cahier des charges, ça permet au chef de projet de mettre en mot toutes ses idées. Qu'est-ce que ce CMS saura faire ou ne pas faire ? Quelles seront les modules et extensions ? etc. On doit répondre avec le plus de précision possible à ces questions avant même de mettre la main à la patte. Après sa rédaction, on en saura un peu plus sur la charge de travaille à accomplir et sur le délais qu'on doit prévoir.
Tantôt, j'ai posé la question "Quelles seront les modules et extensions ?", mais c'était une question un peu trop vaste. En effet, il faudra bien plus qu'énuméré ce qu'on souhaite avoir. Il faudra les décrire. Pour commencer, on doit lister ses fonctions (ex: Ajouter une news, Modifier une news, Supprimer une news). Ensuite, on détaille un peu plus ses fonctions en décrivant ses contraintes, ses particularités, ses obligations, etc. Attention, on ne doit jamais résoudre un problème dans un cahier des charges. Par exemple, si je dis "Pour ajouter une news, le membre devra être connecté. Pour ça, on vérifie si les variables $_SESSION['pseudo'] et $_SESSION['password'] existent.", c'est une erreur. Le développeur se chargera lui-même de déduire que pour savoir si un membre est connecté, il devra vérifier l'existence de ceux deux variables. Au lieu, on peut juste écrire "Pour ajouter une news, le membre devra être connecté.".
Pour te donner une meilleure idée, je vais te donner un aperçu d'une partie d'un cahier des charges qui décrira la fonction "Ajouter une news" :
=== Ajouter une news ===
Une news sera un bloc de texte rapportant une nouvelle d’actualité sur le site ou le sujet traité. Le processus de création de news se devra d’être convivial et puissant afin de permettre à l’utilisateur de mettre en forme sa news comme bon lui semble. Une poignée d’outils seront mis à sa disposition afin de ne pas dépendre d’un système extérieur.
1. Modules / Extensions pouvant être utilisé :
• Extension « Uploads » facultatif
• Modules « Membres » nécessaire
• Extension « BBCode » facultatif
• Extension « CKEditor » facultatif
2. Fonctionnalités :
• Une news pourra contenir les informations suivantes :
o Un titre
o Un auteur
o Un état (En ligne ou hors ligne)
o Un texte
o Être placé dans plusieurs catégories à la fois
• L’utilisateur pourra aussi envoyer des fichiers via un système d’upload
3. Restrictions :
• Le membre doit être connecté
• Il doit posséder les droits de gérer entièrement les news
o S’il ne possède pas ces droits, il peut posséder le droit de proposer une news, ça lui enlève le droit de choisir l’état et les catégories
• Pour travailler sur les fichiers, l’extension « Uploads » est nécessaire
4. Description du template :
• Titre « Créer une news »
• Courte présentation de l’utilité d’une news
• Proposer le formulaire suivant :
o Titre de la news
o Auteur de la news
o État de la news (s’il y a lieu)
o Le texte
o Choix des catégories (s’il y a lieu)
o Upload de plusieurs fichiers
o Bouton afin d’envoyer la news
Je l'ai écris en fichier texte, mais je te conseil vivement de te munir d'un traitement de texte afin d'organiser tes paragraphes et de te monter une mise en page clair et précise. Mais au moins, tu as un exemple concret de la description d'un module.
Salut,
Je vais le dire en premier : Je ne poste pas pour faire partie de ton projet (un topic décrivant mon projet est d'ailleurs disponible sur ce forum). Je suis déjà bien occupé avec le mien, il serait idiot de me saturer encore plus :p !
Cependant, je bâti moi aussi un espèce de framework / CMS, je peux donc t'apporter quelques conseils si tu me le permets. Parce que j'ai passé par là et que tu sembles plus ou moins à l'aise avec le combo PHP / MySQL. Je pense que tu te lances dans un tel projet sans t'être posé les bonnes questions.
[size=150]Un CMS, c'est complexe à l'intérieur[/size]
Avant même de penser à faire un système de news ou un espace membre, il faut monter le coeur de notre CMS. Sans ce coeur, on ne pourra pas avoir de coordination entre nos différents modules et extensions. Il est donc important de le bâtir pour qu'il soit le plus flexible possible.
Le coeur d'un CMS, comme on l'a dit précédemment, c'est la gestion des modules et extensions. Mais c'est une définition très large. En réalité, il s'agit plutôt de donner à ton CMS des outils de base où viendront par la suite se greffé les différents modules. Il faut prévoir un moteur de template (même si on se sert de PHP, il faut quand même le prévoir), implémenter une méthode de fonctionnement pour les modules (la meilleure que j'ai trouvé étant le MVC), charger les différentes fonctions primaires du CMS (la gestion des erreurs, la gestion de MySQL, etc.), charger les extensions utilisable (Uploads, BBCode, etc.), et selon la taille du CMS, il peut se rajouter plusieurs autres choses.
Ça, c'est le rôle que doit jouer le coeur d'un CMS. Sans ce coeur, il est impensable de monter quelque chose qui tienne vraiment la route. En théorie, on peut coder un CMS n'importe comment et ça va fonctionner. Par contre, si on veut quelque chose qui puisse être lisible, flexible, rapide, léger et intuitif, il faut un architecture primaire spécialement conçu.
[size=150]Comment construire un module ?[/size]
On ne se penchera pas sur la question de code, mais plutôt sur la question d'organisation. C'est quoi un module ? Ça peut sembler bête, mais j'ai vue que tu prenais à tord qu'un système d'administration était un module. Un espace membre est un module, un système de news en est tout autant. Par contre, un système d'administration n'apporte rien de concret : Qu'est-ce que tu veux administrer ?
Un module, ça se doit d'être visible à tous. Si je crée un module de membres, les visiteurs du site en bénéficie. Si je crée un système de news, les visiteurs sont dorénavant au courant de l'actualité du site. Un module doit apporté quelque chose de concret à ceux qui consulte un site. Comme je le disais plus tôt, un espace d'administration ne répond pas à cet exigence. Pense toujours que du point de vue CMS, un module peut être désactivé par l'utilisateur. S'il désactive l'espace d'administration, on a un problème : il ne pourra plus administrer son CMS.
Pour palier à ce problème, on va coller les administrations aux modules. Quand tu créeras un système de news, tu créeras aussi les fonctions Ajouter, Modifier, Supprimer. À partir de ces fonctions, tu pourras créer un espace d'administration complet qui sera greffé au module. Si on désactive le système de news, on désactive par le fait même son panel d'administration.
Si on doit avoir un administration pour le CMS, il ne faut pas que ce dernier soit sous forme de module, mais plutôt sous forme d'obligation. Je l'ai dis plus haut : Un module doit être désactivable. On ne peut pas permettre à l'utilisateur de désactivé l'administration du CMS, car il se trouvera le bec à l'eau :D ! On va préférer l'incorporé directement dans le CMS. Une fois fait, on ne peut plus le désactivé et le CMS garde toute sa logique.
[size=150]Un cahier des charges, ça remet les idées claires[/size]
Un cahier des charges, ça permet au chef de projet de mettre en mot toutes ses idées. Qu'est-ce que ce CMS saura faire ou ne pas faire ? Quelles seront les modules et extensions ? etc. On doit répondre avec le plus de précision possible à ces questions avant même de mettre la main à la patte. Après sa rédaction, on en saura un peu plus sur la charge de travaille à accomplir et sur le délais qu'on doit prévoir.
Tantôt, j'ai posé la question "Quelles seront les modules et extensions ?", mais c'était une question un peu trop vaste. En effet, il faudra bien plus qu'énuméré ce qu'on souhaite avoir. Il faudra les décrire. Pour commencer, on doit lister ses fonctions (ex: Ajouter une news, Modifier une news, Supprimer une news). Ensuite, on détaille un peu plus ses fonctions en décrivant ses contraintes, ses particularités, ses obligations, etc. Attention, on ne doit jamais résoudre un problème dans un cahier des charges. Par exemple, si je dis "Pour ajouter une news, le membre devra être connecté. Pour ça, on vérifie si les variables $_SESSION['pseudo'] et $_SESSION['password'] existent.", c'est une erreur. Le développeur se chargera lui-même de déduire que pour savoir si un membre est connecté, il devra vérifier l'existence de ceux deux variables. Au lieu, on peut juste écrire "Pour ajouter une news, le membre devra être connecté.".
Pour te donner une meilleure idée, je vais te donner un aperçu d'une partie d'un cahier des charges qui décrira la fonction "Ajouter une news" :
[quote]=== Ajouter une news ===
Une news sera un bloc de texte rapportant une nouvelle d’actualité sur le site ou le sujet traité. Le processus de création de news se devra d’être convivial et puissant afin de permettre à l’utilisateur de mettre en forme sa news comme bon lui semble. Une poignée d’outils seront mis à sa disposition afin de ne pas dépendre d’un système extérieur.
1. Modules / Extensions pouvant être utilisé :
• Extension « Uploads » facultatif
• Modules « Membres » nécessaire
• Extension « BBCode » facultatif
• Extension « CKEditor » facultatif
2. Fonctionnalités :
• Une news pourra contenir les informations suivantes :
o Un titre
o Un auteur
o Un état (En ligne ou hors ligne)
o Un texte
o Être placé dans plusieurs catégories à la fois
• L’utilisateur pourra aussi envoyer des fichiers via un système d’upload
3. Restrictions :
• Le membre doit être connecté
• Il doit posséder les droits de gérer entièrement les news
o S’il ne possède pas ces droits, il peut posséder le droit de proposer une news, ça lui enlève le droit de choisir l’état et les catégories
• Pour travailler sur les fichiers, l’extension « Uploads » est nécessaire
4. Description du template :
• Titre « Créer une news »
• Courte présentation de l’utilité d’une news
• Proposer le formulaire suivant :
o Titre de la news
o Auteur de la news
o État de la news (s’il y a lieu)
o Le texte
o Choix des catégories (s’il y a lieu)
o Upload de plusieurs fichiers
o Bouton afin d’envoyer la news[/quote]
Je l'ai écris en fichier texte, mais je te conseil vivement de te munir d'un traitement de texte afin d'organiser tes paragraphes et de te monter une mise en page clair et précise. Mais au moins, tu as un exemple concret de la description d'un module.