2010-06-26 9 views
1

J'ai écrit du code qui crée un blog générique.Rendre mon code facile à écrire des plugins pour

Ses caractéristiques sont simples, créer un message, modifier et supprimer le message et autoriser les commentaires.

J'essaie de l'écrire pour qu'il soit très facile d'écrire des plugins, mais je ne suis pas sûr de la meilleure approche.
Certaines de mes idées:

  1. Demandez à l'auteur du plugin écrire un script court appelé par exemple « config » dans lequel ils ont un tableau qui a l'application (par exemple frontend, admin, etc.), le module (par exemple le blog , profil, etc) et les actions (par exemple créer, éditer, etc) que leur plugin affecte, puis inclure les fichiers plugin lorsque l'action correcte est exécutée.

    //example array in config.php: 
    array(
        'application' => 'admin', 
        'module'  => 'blog', 
        'action'  => array('create','edit') 
    ); 
    
  2. ajouter des chaînes dans le code de vues telles que « {form-extras} » et que l'auteur du plugin dire quelle chaîne il le code remplacera. Ensuite, utilisez str_replace pour remplacer le {xxx} par le code du plugin.

    #example code in blog_form.php 
    <input type="text" name="blog_title" /> 
    <input type="text" name="blog_text" /> 
    {form-extras} 
    
    #example code in plugins config.php 
    array(
        'replace' => array('form-extras') 
    ); 
    

Ces deux idées sont assez nul et très limités dans leur utilisation, mais je me bats pour trouver une meilleure idée.

Je ne suis pas sûr combien d'informations au sujet de mon peuple de code ont besoin, mais la structure de répertoire de base est simple, voici un exemple:

apps //applications 
    frontend //app name 
    modules 
     blog 
     views 
      index.php //list blogs 
      new.php //create new blog post 
     actions.class.php 
    admin 
    modules 
     blog 
     views 
      index.php //list blogs 
      new.php //create new blog post 
     actions.class.php 
lib //library of classes like database class 
plugins //where plugins will hopefully be installed 
web //where the site runs e.g index.php, all the css and js 

La question

Est-ce que quelqu'un sait de tout tutoriels/articles sur comment rendre le code facile à écrire pour les plugins, ou est-ce que quelqu'un a des méthodes testées que je pourrais appliquer?

Cordialement

Luc

Répondre

4

Avant de commencer à réfléchir sur la façon de rendre le système de plugins, vous devez définir ce qu'est exactement un plug-in est pour votre application, ce que les plug-ins peuvent faire et les données les plugins seront en mesure d'accéder (par exemple, la table des messages mais pas la table des utilisateurs). Ensuite, jetez un oeil à Drupal, je suppose que son système de module basé sur des crochets est vraiment puissant et «simple» à utiliser pour les développeurs. Fondamentalement, l'idée est que lorsqu'un module ou un plugin est installé, tout ce que vous faites sur votre code 'core', cherchez s'il y a des modules/plugins liés à cette action.

Exemple:

//your code 
$modules_enabled = array('foo', 'bar'); 
//example action, lets say insert a new blog post. Obviously, nothings prevent you 
//to do that in OOP style (i'd never really understood why drupal is almost all procedural). 
function create_new_post($modules_enabled, $other_args){ 
    //looks if some modules need to be called before create the blog post 
    foreach($modules_enables AS $module){ 
     if(function_exists("after_create_new_post_$module")){ 
      $func = "before_create_new_post_$module"; 
      $func($params); 
     } 
    } 
    //do your stuff here 
    //looks if some modules need to be called after the post is been created 
    foreach($modules_enables AS $module){ 
     if(function_exists("after_create_new_post_$module")){ 
      $func = "after_create_new_post_$module"; 
      $func($params); 
     } 
    } 
} 

//the module file should look like $hooks_name . $module_name: 
function after_create_new_post_foo($args){ 
    //do your job 
} 

Ceci est un exemple très très synthetique, mais devrait vous donner l'idée (et ne fonctionne pas!).

Le seul problème ici vient avec les args que vous passez à chaque hook_function, qui doivent être documentés vraiment bien, mais la documentation est importante quel que soit le chemin que vous choisirez.

Quelques références: Drupal hooks, hook_insert

+0

Merci pour l'exemple de code Daniel , serait-ce une idée viable d'avoir une sorte d'appel comme vous avez dans vos boucles foreach dans les fonctions de construction et de destruction des classes d'actions de base? De cette façon, ils seraient toujours appelés au tout début et à la fin de tout code dans la classe? Merci d'avoir pris le temps d'écrire l'exemple ci-dessus avec autant de documentation, c'est très clair. – Luke

+0

Mon code est juste un exemple, n'est pas la vraie façon dont le crochet de drupla fonctionne (vous devez vraiment donner à les regarder dans la documentation drupal). Certains hooks «remplacent» simplement les fonctions de base, d'autres fonctionnent comme une «vérification», si la fonction hook renvoie true, la fonction de base est exécutée, sinon, pas. Ceci est juste une ligne directrice, tout dépend de vos besoins spécifiques. – Strae

+0

Merci Daniel, des références et des commentaires utiles, j'ai été creuser à travers le code Drupal et son été très utile. À votre santé – Luke

2

Ce que vous cherchez est un exemple et/ou des informations sur une architecture de plug-in . En utilisant ce terme et Google révélera de nombreuses ressources.

Examinez comment cela est possible dans les applications existantes telles que WordPress, Drupal ou Joomla.

Pensez également à cette question existante: Plugin Architecture in PHP

+0

Salut Jon, j'ai eu un coup d'œil à cet autre sujet et sur Google, j'ai trouvé quelques messages du forum (merci pour le nom correct « architecture de plug-in »), mais pas de bons articles pour php, je vais aller en drupal à un moment donné pour voir comment ils le font, mais vous ne connaissez peut-être pas un bon article spécifique à PHP, vous? Bravo Luke – Luke

+1

En fait, je viens de googler pour 'architecture de plugin PHP', trouvé cette question aux premiers résultats et je pense qu'il est nul si quelqu'un dit juste de faire une recherche Google pour cela .. – MOnsDaR

Questions connexes