Conseils analyse et conception d'un CMS - PHP - Programmation
Marsh Posté le 18-10-2012 à 12:05:01
Je cherchais à voir ton niveau d'étude en info, d'après ton profil, du prend des cours du soir pour passer ton bac en informatique, c'est bien ça.
Parce que manifestement, ton niveau de connaissance me paraît bien léger pour t'attaquer à la conception d'un CMS, surtout quand on voit ce que sait faire un CMS aujourd'hui (ex : Joomla, Drupal, Spip...). Tu ne sembles pas connaître UML (ou une autre méthode de modélisation comme OMT, Merise...), ce qui va être très problématique pour modéliser l'architecture de ton CMS (classes des objets et la base de données). Une BD mal modélisée, c'est un outil qui marchera pas, tu peux en être sûr.
La prise en mains de framework (vue que t'es parti sur PHP, y'a zend, Symfony, CakePHP...), c'est bien, mais ça demande de l'investissement et en général, avoir déjà coté des applis sans avant pour être capable de bien les utiliser et en voir l'intérêt (entre autre, la mise en oeuvre du MVC).
Concernant Doctrine, pareil, faut déjà savoir modéliser une BD. Sinon, tu vas vite te retrouver bloquer par Doctrine qui ne te permettra pas de requêter comme tu veux, du fait d'une mauvaise modélisation. Quand tu n'utilises pas ce genre d'ORM, tu peux t'en sortir parfois en mixant du SQL + du code PHP pour "rattraper le coup".
Mais déjà, première question : quel genre de CMS veux-tu faire? Un CMS comme :
- SPIP, Joomla, Drupal (pour faire des sites type revue ou institutionnel, ou vitrine)...
- un blog (dotclear, Wordpress)
- un wiki (mediawiki, dokuwiki)
- un e-commerce (magento, prestashop...)
Parce que les fonctionnalités ne sont pas du tout les mêmes (surtout pour du e-commerce), et la nature des données à gérer différent beaucoup également, donc le MCD de ta BD sera très différent.
Concrètement, de quel bagage informatique disposes-tu (qu'as-tu appris qui va te servir)? POO, méthodes de modélisation, bases de données...?
Marsh Posté le 18-10-2012 à 18:58:29
je suis sensé faire ce TFE finger in the noose (ou presque)
vu ma formation est orientée analyse / programmation
le problème c'est que je ne pratique pas bcp (et surtout jamais sur des projets conséquents) et que je ne suis pas développeur au boulot
j'ai eu des cours d'analyse Merise mais c'est tout
autant dire que je dois réapprendre à faire des analyses
je suis donc entrain d'étudier UML et autant dire que c'est pas ma tasse de thé (c'est très abstrait)
Niveau programmation, j'ai du apprendre l'OO tout seul en gros (jai eu des cours d'OO à l'école mais limite anecdotiques) et je commence à bien comprendre les principes de bases (encapsulation, héritage, polymorphisme)
ainsi que les techniques plus avancées (classes abstraites, interfaces, etc.)
en DB je connais un peu PDO (déjà utilisé) mais sans plus
Donc disons que je ne suis pas un débutant total (je capte les principes de l'OO) mais je manque donc à priori juste cruellement de pratique (même si je fais du C# que j'ai déjà utilisé CakePHP en stage ...pendant 3 mois)
Pour les fonctionnalités de mon CMS,
je vais commencer par le basique:
frontend: news, articles, commentaires, et authentification
backend: authenfication, gestion news, articles, menu et thèmes je pense
si déjà j'arrive à faire ca se sera pas mal (même si c'est pas très compliqué à priori)
Marsh Posté le 18-10-2012 à 21:11:33
Donc tu pars sur un CMS type SPIP/Joomla.
Pour info, en informatique, ce qui compte avant tout, c'est la capacité à modéliser un pb puis à trouver une solution satisfaisante. Pas connaître UML/Merise... et avoir de très faibles notions en POO, c'est mal barré
Par ailleurs, connaître PDO, c'est pas faire de la BD. Moi, je parlais bien de modéliser une BD (construire un MCD en respectant la forme 3NF de Codd). Bien entendu, après, savoir la requêter, c'est important aussi.
Par rapport aux questions que tu posais dans ton 1er post, je pense qu'elles sont un peu prématurées et t'as plus urgent à gérer que de savoir quel framework utiliser. Va te falloir acquérir les compétences théoriques sur tout ce qui touche à la modélisation, l'algorithmie, les design pattern... bref, la conception. Pisser du code, tout le monde (ou presque) peut le faire (certes, plus ou moins bien). Mais savoir modéliser une appli, là, y'a moins de monde. Mais c'est pourtant le travail le plus intéressant d'un point de vue intellectuelle, je pense personnellement. Une appli qui est bien conçue sur le papier, bien spécifiée, ça se code tranquille.
En contexte pro, on a coutume de dire que faire les spécs et la conception, c'est 30% à 40% du boulot de fait. Le codage représente 20% d'un projet en général...
Marsh Posté le 25-10-2012 à 21:59:24
Ok merci pour ces précisions rufo
Ceci dit j'ai bien conscience de ne pas avoir le niveau pour être développeur (et encore moins analyste) et je ne compte pas le devenir même si mes études vont en ce sens
Ceci dit j'ai vraiment besoin d'aide pour mon analyse UML
Je cherche surtout à comprendre la différence entre diagramme de séquence et et use case (c'est très flou pour moi, même si j'ai déjà lu des bouquins la dessus)
Marsh Posté le 26-10-2012 à 06:38:31
tompouss a écrit : Ok merci pour ces précisions rufo |
Pourquoi tu fais ça alors ?
Ca m'échappe toujours ce genre de chose...
Pour l'UML ce n'est pas les sîtes qui manquent...
- http://uml.free.fr/
- https://www.google.fr/#hl=fr&safe=o [...] 80&bih=703
Je ne vais pas redire ce que dis Rufo.
Si tu veux pas galérer, commence par des choses simples...
Marsh Posté le 26-10-2012 à 12:11:36
tompouss a écrit : Ok merci pour ces précisions rufo |
Y'a un truc qui m'échappe. Faire un CMS, comme je te l'ai dit, c'est pas facile du tout, surtout si on veut en faire un au niveau de ce qui se fait actuellement. Si j'ai bien compris, tu fais un cursus en informatique. T'as donc eu des cours dans la ou les années précédentes pour acquérir les connaissances nécessaires à la réalisation de ton projet de fin d'étude.
D'où ma question : si tu veux pas bosser dans l'informatique plus tard, que fais-tu dans ce cursus et surtout, si t'arrives pas à avoir une bonne note à ton projet, qu'est-ce que ça peut faire C'est pas pour juger, c'est juste pour comprendre dans quelle logique tu es. Parce qu'en gros, je tiens pas particulièrement à aider qq'un qui, pendant 1 ou plusieurs années, est resté dans le fond de la classe à glander en disant que de toute manière, il ne comprenait rien...et se réveille seulement aujourd'hui en se rendant compte qu'en fait, il aurait peut-être dû bosser avant certaines matières...
En tout cas, c'est pas sur un forum que tu vas pouvoir récupérer 1 ou plusieurs années de cours. Nous, on peut te donner des liens sur de cours (UML ou autre), mais on pourra pas te les faire appendre au mieux, t'expliquer un point ou 2 que tu aurais du mal à comprendre. Pareil pour le reste, on pourra te donner des conseils ou ds propositions mais uniquement à partir d'un travail que tu auras fait avant et que tu posteras ici.
Marsh Posté le 26-10-2012 à 14:47:13
Heu je travaille déjà dans l'informatique, mais dans le support technique, gestion d'infra reseau etc...
j'ai choisi cette voie car programmer 8 heures par jour ne m'intéresse pas(c'est aussi un probleme de concentration)
Avec le recul, je me dis que j'aurais du prendre une orientation systeme et réseau mais bon ce qui est fait est fait
Attention, je ne dis pas que la programmation ne m'intéresse pas (la effectivement il y aurait un probleme), mais je préfère l'aspect technique.
Ne voyez pas de fainéantise de ma part, mais juste un mauvais choix d'orientation
Marsh Posté le 26-10-2012 à 15:14:09
J'y vois plus clair. Cela dit, cf mon précédent post : on pourra pas te faire apprendre les trucs que t'as pas compris. Va sur les sites proposés ou trouves en d'autres et reviens avec des questions plus précise voire, pourquoi pas, avec un premier MCD ou des schémas en UML. On sera mieux en mesure de t'aider.
Marsh Posté le 28-10-2012 à 13:11:43
avec le recul, change tout de suite de voie.
encore plus si c'est une formation payante.
quitte a perdre 1 année, perd la maintenant plutot que de te retrouver bloqué par la suite (ou alors demande a changer de spécialisation si tu vient de quitter le tronc commun)
sinon juste pour info, en SR on code aussi, on a besoin d'un bon bagage technique et on a besoin de savoir se concentrer (c'est meme un pre requis dans tous les domaines ayant trait a l'informatique, surtout la gestion de projets)
en SR tu va aussi t'en tapper des diagrammes de sequence et des modelisations de graphes donc autant faire rapidement la part des choses.
Marsh Posté le 28-10-2012 à 13:14:36
Hello,
Dans UML, pour être honnête, j'utilise le diagramme de classes pour la BD (90%) et le diagramme de cas d'utilisation quand je veux modéliser les interactions au service (5%) et diagramme d'activité quant je veux faire de l'algorithmie façon UML (5%). Le reste c'est quasiment hors propos, sauf si tu as du temps à perdre en modélisation.
Les use case et activity diagrams servent essentiellement à trouver des redondances et des prérequis dans tes processus (genre le user doit être connecté avec tels droits avant d'effectuer telle ou telle chose). Ça peut vaguement être utile pour factoriser, si tu n'a pas les idées claires. Quand on comprend pas, faut faire un dessin.
Pour l'ORM, tu peux facilement en bricoler un avec la classe Reflection (voir la doc). En gros tu instancies une nouvelle classe Reflection en lui donnant une string qui représente le nom d'un objet O (que tu peux récupérer avec get_class($this) quand tu es dans O), et ensuite, tu peux découvrir ton objet en itérant sur ses propriétés. Avec ces données, rien de plus facile que de générer un CREATE TABLE.
Marsh Posté le 05-11-2012 à 15:58:50
Hello
d'abord merci pour tous vos conseils
j'ai avancé dans mon projet, j'ai fait le MCD de mon CMS.
En tout cas ca y ressemble, même si c'est pas fait dans le règles de l'art (ca ressemble trop à un MLD)
Merci de me dire ce que vous en pensez
Par contre j'ai fait ca avec une démo de Power designer qui est en version démo 15 jours (et qui coute la peau des fesses)
Si quelqu'un connait un logiciel gratuit ou avec une période d'essai plus longue
et qui permet de faire du merise fastoche je prends (j'ai essayé DIA mais pas de diagramme Merise)
j'ai testé windesign mais pas convaincu
Marsh Posté le 06-11-2012 à 09:35:42
Pour faire mes MCD, j'utilise Visio. Ca me suffit...
Marsh Posté le 17-03-2013 à 23:16:51
Salut
Je reviens avec mon CMS après quelques mois de recherches
J'ai refait mon MCD, il est correct selon le prof
Des choses à revoir d'après vous ?
merci
Marsh Posté le 18-03-2013 à 09:42:26
Qq remarques :
Tu pourrais fusionner les tables stylesheets, banners et media et utiliser la table multimedia types pour différencier les enregistrements (type "css", "banner", "video", "audio"...).
Dans la table "article", champ published, utiliser plutôt un type datetime plutôt qu'un booléen. NULL -> pas publié, date et heure -> tu sais quand il a été publié ce qui permettra d'implémenter des fonctions liées au moment où l'article a été publié (par ex, pouvoir faire une publication différée).
Table "users", les champs nickename et password sont trop longs (255 caractères !).
Table "categories" : faire une relation qui boucle dessus de manière à pouvoir implémenter une arborescence de catégories. Pour la classification, ça sera bien plus pratique.
Marsh Posté le 18-03-2013 à 09:42:57
Par contre, j'ai pas compris la table "balises" Elle est liée à rien en plus...
Marsh Posté le 19-03-2013 à 00:17:29
balises, c'est pour pouvoir modifier facilement le titre du site (H1)
et <footer>
au lieu d'editer le HTML
C'est plus propre et plus secure je trouve
Mais je me trompe p-e
Marsh Posté le 19-03-2013 à 08:51:09
peut-être alors nommer la table avec un truc du genre "templates" ?
Marsh Posté le 19-03-2013 à 19:21:17
J'ai suivis en diagonal ton topic et d'aprés moi, il y a beaucoup d'approximations...
Rapidement, tu utilises 3 tables pour gérer des "templates" et cela ne semble pas trés puissant...
Pour ta gestion des catégories, cela semble bon, mais le simple fait de rajouter un champs "categorie parent id" à ta table "Catégorie" rendra ton système bcp plus puissant.
En parlant du contenu, ne trouves tu pas que tes tables article et news sont trés similaires ? Une news n'aurai pas droit à un résumé ? D'ailleurs j'aurai plutot imaginer les médias rattachés à des contenu plutôt qu'à une catégorie, mais rien de bien choquant ici.
Pour tes utilisateurs, un petit boolean pour savoir si l'utilisateur à valider son mail (pour éviter les robots spameurs, aujourd'hui c'est obligatoire sous risque de crouler sous le spam).
D'ailleurs je pense que tu va rencontrer des soucis avec ta gestion des droits (ta table "role" ). Idem pour ta table "module" : tu stockes des booleans :s
Bref, quelques petits ajustements à prévoir. Avant de te lancer dans le dev, définis bien la structure de tes fichiers: comment facilement ajouter un template, comment les assets d'un template n'écraseront pas ceux d'un autre template ? comment ajouter un module facilement ? Comment prévoir qu'un module modifie (en partie) le fonctionnement d'un module existant ou natif ?
Commence à installer un wordpress et un joomla pour bien t'imprégner de leur facon de faire. Et bon dev, c'est un super projet
Marsh Posté le 20-03-2013 à 23:39:30
Merci pour vos réponses
pour les templates, il faudrait que je réfléchisse à comment mieux les implémenter: à la base le but était juste de pouvoir changer de bannière, de H1 et le texte du footer à la volée
et pas vraiment de faire une gestion de template plus complète (ca ne m'intéresse pas vraiment, et le temps me manque)
pour le contenu effectivement les table articles et news sont très similaires. Mais le fait que ce soit 2 tables distinctes est justifié par le fait que la table news est considérée comme un module désactivable
Une propriété que Articles n'a pas
j'ai donc cherché à accentuer cette différence en rajoutant des champs dans articles
Les medias sont effectivmeent reliés à articles et news et pas à catégories, erreur de manip de ma part...
Pour le spam, je pensais mettre des capcha avant enregistrement de commentaires pour les éviter justement
Tu pourrais préciser les problemes que je pourrais avoir avec la gestion des droits ?
Marsh Posté le 21-03-2013 à 10:01:34
Tu peux faire une table Article liée à une table type article dans laquelle tu trouveras des valeurs du genre "article" ou "news". Tu pourras ainsi conserver la possibilité d'avoir un comportement différent suivant le type d'article...
Marsh Posté le 21-03-2013 à 16:52:33
J'avais déjà testé le modèle avec une Table Post + type poste qui définissait article ou news
mais comme j'avais eu l'aval du prof pour les 2 tables distinctes (Articles et news) je suis revenu la dessus.
Au boulot on m'a conseillé de faire 2 tables distinctes aussi
quels seraient les avantages de faire une table commune ?
Marsh Posté le 21-03-2013 à 17:19:22
Une table commune + une table définissant le type d'article, c'est plus souple puisque pour prendre en compte un nouveau type d'article ou pour définir des règles de gestion différentes pour un type, y'a qu'à ajouter un type d'article dans al table "type article". Pas de code à ajouter
Si tu fais une table par type d'article, pour en prendre un nouveau en compte, faut créer une nouvelle table et le code pour la prendre en compte. => moins souple.
Edit : si y'en a qui la ramène au sujet qu'une table, avec beaucoup d'articles, ça va faire baisser les perfs, tu leurs parles du partitionnement de MySQL (1 table logique mais x tables physiques, par ex, tu peux partitionner sur le champ TypeArticleID de la table "Article" justement => 1 table physique par type d'article).
Marsh Posté le 21-03-2013 à 17:38:33
Ok mais dans le cas où les tables seraient fusionnées
comment je fais pour marquer leur différences?
en plus à priori, il n'y aura pas de nouveau type d'article
Marsh Posté le 22-03-2013 à 10:12:22
Je viens de te le dire, tu fais une table "type article" qui va contenir les types d'articles donc "article, "news"... et dans la table "Article, t'auras une clé étrangère pointant sur la table "type article".
Marsh Posté le 22-03-2013 à 14:44:04
Je m'explique mal: si je suis ta solution, les champs doivent être identiques pour tous les types articles non ?
Ou alors je comprends mal le principe
Marsh Posté le 25-03-2013 à 11:47:52
Oui, les champs seront les mêmes. Cependant, par logiciel, tu peux masquer/afficher certains champs suivant le type d'article.
Marsh Posté le 12-04-2013 à 01:36:46
Serais-ce une mauvaise idée d'utiliser un type enum pour le type de poste
et donc l'intégrer à la table posts ?
ca m'a l'air pas mal dans mon cas et ca me simplifierait la vie pour les requets sql (jointures en moins à faire)
Marsh Posté le 12-04-2013 à 13:22:55
Oui, tu peux.
Perso, je stocke plutôt un unsigned TINYINT (0->255) dont le libellé correspondant à l'entier est dans une variable de conf de mon appli. Comme ça, pas de pour le multi-langue puisqu'en base, j'ai qu'un entier, son interprétation est ailleurs. Alors qu'avec un enum, tu auras un pb en cas de multi-langue ...
Marsh Posté le 22-04-2013 à 13:17:48
svp tompouss je suis technicien en informatique. j'ais un pfe sous thème la conception d'un cms si vous pouvez m'aider en voi moi ton rapport sur ta conception d'un cms et mercis d'avance. mon email : toufikbenlhaj113@gmail.com
Marsh Posté le 24-04-2013 à 10:12:48
Tu devrais pas laisser ton mail en clair sur un forum, tu vas te faire spammer
Marsh Posté le 24-04-2013 à 20:14:40
nouvelle contrainte: je voudrais gérer des pages statiques
en utilisant la table Posts
le problème c'est que dans ce cas je dois absolument lier la page à une catégorie ce que je trouve un peu absurde (ca n'a aucun intéret)
Pas moyen de mettre la clé étrangère category_id de ma table Posts à NULL évidemment puisque ca viole le principe de clé étrangère
Du coup je vais devoir gérer les pages statiques sur une nouvelle table dédiée je pense
d'autres solutions?
Pour info, voici mon MLD (fais avec Workbench)
Marsh Posté le 25-04-2013 à 10:08:19
Une clé étrangère peut valoir NULL dans le cas d'une relation 0,1.
Marsh Posté le 25-04-2013 à 16:24:26
Ok donc je dois créer une nouvelle table pour les pages statiques
[Update]
Ya moyen de faire autrement :
http://www.developpez.net/forums/d [...] le-resolu/
je vais voir pour modifier la cardinalité dans phpmy admin
Marsh Posté le 14-05-2013 à 01:25:46
Bonsoir,
J'avance et j'ai de nouveau des questions
Mon nouveau MLD
Je me demandais comment utiliser
1. les index => mon prof me dit d'en mettre un sur toutes les clés étrangères mais je ne vois pas trop l'intéret pour des clés qui pointent vers des tables qui contiendront peu d'enregistrement (typiquement GROUPS).
Ou alors j'ai peut etre mal compris le principe des index.
2.les contraintes d'unicités (interdire les entrées dupliquées):
j'ai activé le unique index pour le nom des groupes, le nom des users et les noms des posts.(La ca me semble évident)
je me demandais si je devais en mettre aussi sur des champs comme media_type, category_name ?
Pour la gestion des doublons, apparemment il y a 2 méthodes: soit faire des tests avec PHP (mais j'imagine qu'il faut faire des tests avec requetes SQL), soit utiliser la close CHECK de MYSQL.
J'imagine que le plus rapide en terme de vitesse d'execution est de le faire via MYSQL, et que c'est aussi plus propre.
Dans un autre forum, ils parlaient aussi de l'utilisation de Triggers
http://www.developpez.net/forums/d [...] es-resolu/
Ca pourrait-etre utile dans mon cas?
merci pour vos conseils
Marsh Posté le 14-05-2013 à 09:38:37
Les index accélèrent les recherches. Quand tu vas faire une requête impliquant 2 tables, une grosse et une petite, tu seras bien content d'avoir un index sur la clé étrangère dans la grosse table pour que la requête mette pas 3 plombes trouver les correspondances entres les 2 tables.
Pour les unicités, un index de type UNIQUE est pratique pour des choses "simples". Mais quand l'unicité d'une enregistrement dépend de plusieurs champs, faire la vérif avec PHP a du sens surtout quand ça implique des chaînes de caractères où une simple comparaison binaire ne suffit pas (ex : pas tenir compte d'espaces en trop, d'accès, de la casse...).
Marsh Posté le 20-08-2013 à 11:55:30
Salut !
Mon CMS est en ligne
Du coup j'aurais besoin de vous pour tester la sécurité
adresse du site en mp
J'ai fait des uses cases mais c'est plus pour la forme qu'autre chose
Marsh Posté le 20-08-2013 à 14:50:53
tompouss a écrit : Salut ! |
Jusqu'à quel point on peut la tester ?
Marsh Posté le 20-08-2013 à 15:00:19
Attaques non destructives.
Pas d'attaques DoS
Injection SQL, Javascript etc..
Des tests basiques et classiques quoi
Marsh Posté le 29-08-2013 à 13:46:19
Il me semble qu'il existe une distrib Linux qui permet de tester les failles de sécurité d'appli web...
Marsh Posté le 18-10-2012 à 00:39:39
Bonjour,
je suis en pleine analyse de mon futur CMS, développé dans le cadre de mon TFE (j'ai presque 1 an pour le faire).
pour info il sera fait avec CakePHP2
mais j'avoue être perdu avec UML (qui n'est pas une mince affaire quand on débute)
j'ai donc commencé avec un ami (qui a plus d'expérience que moi)
première question:
j'hésite à faire des uses cases (il me dit que ca n'a pas vraiment d'interêt dans mon cas)
Il m'a parlé de diagrammes de séquences... est-ce obligatoire? Ca m'a l'air tellement abstrait (et chiant)
ensuite il m'a parlé d'aggrégation, de composition et d'association
j'ai tjs pas compris la différence: de nouveau c'est très abstrait pour moi
Enfin, j'ai du mal à définir les fonctionnalités de mon CMS:
le plus compliqué à mon avis sera la gestion des thèmes et des menus
sont-ce des fonctionnalités difficile à mettre en place pour un débutant ?
Niveau technique DB, il me conseille d'utiliser Doctrine
Ca m'a l'air sympa mais c'est encore un concept abstrait et compliqué à comprendre alors que je suis débutant
Vous en pensez quoi?
Merci pour vos réponses et n'hésitez pas à me donner plein de conseils, je souhaiterais commencer sur de bonnes bases (et j'avoue ca me stresse à fond ;-)
Message édité par tompouss le 18-10-2012 à 01:04:14
---------------
collectionneur de pâtes thermiques