IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend PHP Discussion :

[Conception] Site modulaire


Sujet :

Zend PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Par défaut [Conception] Site modulaire
    Bonjour,

    Je suis en train de redévelopper une sorte de panneau d'administration pour site web. Le principe est simple : le site a une zone admin, où les utilisateurs peuvent accéder, et de laquelle ils peuvent gérer divers "modules" : newser, faq, utilisateurs, etc...

    Jusqu'à maintenant, c'était fait de manière partiellement modulaire, dans le sens où chaque "module" avait un fichier principal (par exemple news.php), qui utilise un composant global pour l'authentification (include auth.inc.php) et qui sinon fait tout le reste "dans son coin". Donc pour ajouter un module, il faut juste modifier le script d'authentification pour qu'il gère les droits relatifs à ce module, ainsi que le module de gestion des utilisateurs, afin à nouveau d'intégrer la gestion des droits à ce nouveau module. Pour l'intégration au "frontend" du site, c'est fait à la main.

    J'aimerais maintenant faire quelque chose d'encore plus simple : un dossier "modules", ou extensions, dans lequel on dépose simplement les modules que l'on souhaite utiliser. Ensuite, les modules sont visibles depuis l'admin mais pas encore installés. Un clic sur un lien installe le module (et effectue les traitement spécifiques au modules : création de tables, dossiers, etc...) et c'est bon !

    La gestion des droits des utilisateurs se fait aussi automatiquement via un module qui gère le tout, et l'authentification est gérée par un gros composant principal, qui "dirige" tous les modules et leur donne accès à la DB, aux fichiers de config, aux données sur l'utilisateur (droits, etc...).

    J'ai quelques idées sur comment faire ça (j'ai un peu regardé divers projets qui me plaisaient et/ou qui ont l'air pas trop mal structurés, comme phpBB, punBB, vanillla, Joomla, etc...) : une classe principale qui s'occupe, comme décrit plus haut, des accès à la DB et de l'authentification, et les modules qui eux implémentent une interface.

    Que pensez-vous de cette approche ? Avez-vous de la lecture à me conseiller, ou des conseils à me donner ?

    J'ai quelques soucis avec cette approche : je ne sais pas comment gérer les fichiers de configuration (des includes ? des fichiers xml à loader ?), ni comment permettre aux modules de "travailler" comme ils veulent tout en ayant accès aux attributs de la "grosse classe" qui gère tout, c'est-à-dire comment faire le lien entre le core et les modules ?

    De plus, j'aimerais bien utiliser un système de templates, afin de séparer le plus possible le traitement de l'affichage, et aussi permettre de changer de layout facilement (thèmes ?). Le problème, c'est que chaque module a ses propres templates, mais aussi devra utiliser des templates "globaux" pour les headers/footers, afin d'assurer une certaine cohérence dans la zone admin. J'ai de la peine à m'y retrouver, surtout avec les différentes paths relatifs et/ou absolus, etc... !

    Bref, grosse tartine, grosse ambition aussi, mais ça me tient à coeur ! Je pense que ça doit être réalisable ! Et j'attends vos commentaires !

  2. #2
    Membre éprouvé Avatar de gd_dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Par défaut
    Bonjour,

    Je pense qu'il serait plus simple de partir de l'existant, il y certainement un CMS pour votre problème. Regardé à www.opensourcecms.com.

    Si vous voulez vraiment le faire vous même, vous pouvez envisager d'utiliser les librairies existante comme.

    http://smarty.php.net/
    http://www.cakephp.org/
    http://www.symfony-project.com/

  3. #3
    Membre éclairé Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Par défaut
    Bonjour,

    Il est vrai que l'utilisation d'un CMS existant est envisageable (Joomla!, Typo3, ?), mais je préférerais la flexibilité que m'apporterai la connaissance intime et profonde de l'outil que j'utilise, d'où l'envie de le développer moi-même ...

    Par contre, l'utilisation d'une ou plusieurs librairies externes pour m'y aider était prévue. J'utilise déjà le moteur de templates de la phplib (je viens de voir qu'il y avait peut-être d'autres modules de cette phplib qui pourrait m'intéresser...), par exemple !

    Le deuxième lien que vous m'avez donné me semble un bon point de départ. Le fait d'utiliser un framework éprouvé et relativement populaire apportera certainement une sécurité et une robustesse bien supérieure à celle obtenue à l'aide d'un framework totalement maison, non ?

    De plus, la communauté de ce CakePHP m'a l'air passablement active et productive ? Quelqu'un a-t-il une expérience avec ce framework ?

    Merci en tous cas !

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Par défaut
    L'avantage de ce qui est fait maison, c'est que la construction n'est connu que de la personne qui le fait ...
    Ainsi, si défaut existe, une librairie public aura plus de tentative d'Hacking, qu'un script que tu aura fait toi même ...

    De plus, comme tout, ce qui est compris, peut être reproduit. Si tu n'es pas capable de reproduire un script tel que phplib (par exemple), c'est que tu ne l'as pas comprit ... (comme si c'était évidant ^_^) Or utiliser quelque chose qu'on ne comprend pas ... C'est pas super intéressant non ?

    C'est pour ça que je préfère, quitte à faire moins bien, mes propres scripts, à ceux pré-existant.

    Et puis, tu programmes pour te faire plaisir ? (>_<) C'est toujours mieux de se dire : J'ai tout compris (et tout fait ) que : Cool ça fonctionne ... j'espère qu'il n'y aura pas de problème sinon j'suis mal ...

    En tout cas, bonne chance à toi .

    P.s : Si j'ai un conseil, c'est celui de tournée ton clavier 7 fois dans ta bouche avant de commencer à coder quelque chose ^_^. Il faut être sur de ce que tu souhaites faire.

  5. #5
    Membre éclairé Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Par défaut
    Citation Envoyé par SpiritOfDoc
    L'avantage de ce qui est fait maison, c'est que la construction n'est connu que de la personne qui le fait ...
    Ainsi, si défaut existe, une librairie public aura plus de tentative d'Hacking, qu'un script que tu aura fait toi même ...
    Je suis d'accord... Mais disons qu'utiliser un framework bas niveau style Cake est difficilement visible du point de vue de l'utilisateur, donc un potentiel hacker aura de la peine à savoir que j'utilise tel script pour en exploiter une faille. Par contre, pour un CMS, c'est autre chose...

    Citation Envoyé par SpiritOfDoc
    De plus, comme tout, ce qui est compris, peut être reproduit. Si tu n'es pas capable de reproduire un script tel que phplib (par exemple), c'est que tu ne l'as pas comprit ... (comme si c'était évidant ^_^) Or utiliser quelque chose qu'on ne comprend pas ... C'est pas super intéressant non ?

    C'est pour ça que je préfère, quitte à faire moins bien, mes propres scripts, à ceux pré-existant.
    Je ne suis pas tout à fait d'accord. Je peux utiliser quelque chose que je n'ai pas fait tout en ayant une bonne idée du fonctionnement général (même si je suis d'accord que je n'aurais pas la même compréhension que si je l'avais fait moi-même...). De plus, pourquoi ré-inventer la roue ? Je n'ai quand même pas le temps de TOUT refaire ! Même si l'envie m'en dirait...

    J'ai par exemple développé un forum (assez basique), afin de voir comment ça fonctionnait, et pour mon plaisir, mais ce n'est pas pour autant que je l'utilise actuellement. Des scripts comme phpBB ou punBB offrent quand même bien plus de fonctionnalités ! Le nombre de gens qui y travaillent aide à avancer plus vite !

    Citation Envoyé par SpiritOfDoc
    Et puis, tu programmes pour te faire plaisir ? (>_<) C'est toujours mieux de se dire : J'ai tout compris (et tout fait ) que : Cool ça fonctionne ... j'espère qu'il n'y aura pas de problème sinon j'suis mal ...
    Programmer est un plaisir, mais en l'occurence ce que je veux développer, c'est pour la petite boîte d'hébergement que j'ai avec des potes... Donc il faut aussi que ce soit fiable ! Et aussi fonctionnel assez rapidement, d'où la volonté d'utiliser des frameworks existants comme base pour accélérer un peu le travail ...

    Citation Envoyé par SpiritOfDoc
    P.s : Si j'ai un conseil, c'est celui de tournée ton clavier 7 fois dans ta bouche avant de commencer à coder quelque chose ^_^. Il faut être sur de ce que tu souhaites faire.
    Je suis d'accord, il ne faut pas se lancer dans la prog tête baissée ! C'est bien pour ça que je suis sur ce forum à discuter ! Je cherche des avis/conseils sur la conception d'un site de manière modulaire, afin de voir un peu comment je pourrais faire, et quels sont les outils que je pourrais utiliser. Ensuite, je commencerai à coder !

    Merci pour ton intervention en tous cas !

  6. #6
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Pédagogiquement je m'orienterais vers la conception "from scratch" afin de monter en compétence dans plusieurs domaines : analyse, conception, prototypage, tests unitaires, ... et php.
    Businessement parlant (aka si des sous/temps sont en jeux derrière) je m'orienterais plutôt vers des framework prêt à l'emploi, avec une préfezrence vers symphony.

    Sinon pour répondre à une de tes questions, une solution et l'utilisation d'évenements. Chaque modules écoutent une série d'évenements, et le coeur de l'appli lance des évenements au fil de son execution. Seuls les modules qui écoutent un évenement particulier sont réveillés.
    Prenons un exemple : l'interface d'administration des modules. Tu veux pouvoir afficher la liste des modules installés et leur description. Normalement seul le module connait sa propre description.
    Ainsi dans le coeur de l'appli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    send_event('afficher_info_module');
    Et pour chaque module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class Forum extends Module {
       function afficher_info_module() {
          echo '<h2>Forum</h2>';
          echo '<p>Ce module est un forum...</p>';
       }
       ...
    }
     
    class Agenda extends Module {
       function afficher_info_module() {
          echo '<h2>Agenda</h2>';
          echo '<em>Version Beta</em>';
          echo '<p>Ce module est un agenda...</p>';
       }
       ...
    }
    L'idée est la suivante : l'application ignore tout de comment fonctionne les modules, qu'est ce qui les compose. Elle lance seulement quelques évenements qui ne réveilleront que les modules qui sont concernés.

  7. #7
    Membre éclairé Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Par défaut
    Je suis d'accord avec l'aspect pédagogique... C'était bien mon intention initiale que de commencer "from scratch", c'est juste que j'ai quelques soucis sur la manière d'aborder le problème ! Mais, avec votre aide éclairée, j'en suis sûr, je vais arriver à coder quelque chose de potable ! Comme je n'ai pas d'impératif de temps, je vais penser à mon épanouissement personnel et tout faire moi-même (à part peut-être le système de templates) !

    Mr. N., merci pour ton explication. Ca rejoint un peu ce que ce je pensais au départ, à savoir une interface pour les modules, et l'appli principale qui appellera certaines méthodes à certains moments, sachant quelle action cela provoquera mais ignorant tout de la manière dont ce sera fait.

    Pourrais-tu développer le concept d'événements, auquel je n'avais pas pensé ? Comment peut-on gérer ça ? Par exemple, certains modules auront des événements spécifiques à eux-même (genre "add_user" pour le module de gestion des utilisateurs). Comment s'enregistrent-ils auprès de l'application ?

    Je verrais quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class Core {
      private $eventHandlers = array();
     
      function registerEventHandler($event, $module) {
        if (!array_key_exists($event, $eventHandlers))
          $eventHandlers[$event] = array();
     
        array_push($eventHandlers[$event], $module);
      }
     
      function fireEvent($event) {
        foreach ($m in $eventHandlers[$event])
          $m->eventFired($event);
      }
    }
    Mais je ne sais pas si cette manière de faire est adaptée à mon problème ? Qu'est-ce qu'on peut considérer comme un événement ? La transmission d'un formulaire ? Le clic sur un bouton ?

    En fait, je pense voir comment faire, et surtout comment utiliser cette notion d'événements pour permettre aux modules d'utiliser le template global et d'afficher leur propre contenu à un certain endroit ! Je peux imaginer des événements "prepare_menu", "prepare_page", etc...

    Merci ! La discussion reste ouverte, si vous avez d'autres conseils/réactions ....

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/03/2007, 10h11
  2. [Conception] Site multilingue : problème avec les liens
    Par dinbougre dans le forum Langage
    Réponses: 10
    Dernier message: 02/02/2007, 11h59
  3. [Conception] Site en UTF-8 + enregistrements dans la db
    Par ToxiZz dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 20/06/2006, 19h49
  4. [Conception] Site Web et base de données -> quel stratégie adoptez-vous
    Par snipes dans le forum Général Conception Web
    Réponses: 5
    Dernier message: 30/04/2006, 01h51
  5. [Sécurité] Conception site web marchand
    Par ultrakas dans le forum Langage
    Réponses: 2
    Dernier message: 30/11/2005, 12h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo