2010-06-26 2 views
1

Я писал код, который создает общий блог.Создание моего кода для написания плагинов для

Его функции просты, создают сообщение, редактируют и удаляют сообщение и позволяют оставлять комментарии.

Я пытаюсь написать его так, чтобы писать плагины очень легко, однако я не уверен в наилучшем подходе.
Некоторые из моих идей:

  1. Есть плагин автор написать короткий скрипт, например, «конфигурация», в котором они есть массив, который имеет приложение (например, интерфейс, администратор и т.д.), модуль (например, блог , профиль и т. д.) и действия (например, создавать, редактировать и т. д.), которые влияет на его плагин, а затем включать файлы плагинов при выполнении правильного действия.

    //example array in config.php: 
    array(
        'application' => 'admin', 
        'module'  => 'blog', 
        'action'  => array('create','edit') 
    ); 
    
  2. добавить строки в код таких представлений, как «{форм-статистов}» и есть плагин автор сказать, какая строка там код будет заменить. Затем используйте str_replace, чтобы заменить {xxx} на код плагина.

    #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') 
    ); 
    

Обе эти идеи довольно дрянь и очень ограничены в их использовании, но я изо всех сил, чтобы придумать лучшие идеи.

Я не знаю, как много информации о моем коде людей нужно, но основная структура реж проста, ниже приведен пример:

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 

Вопрос

Кто-нибудь знает любой учебники/статьи о том, как сделать код легко написанным для плагинов, или у кого-нибудь есть какие-либо проверенные методы, которые я мог бы применить?

С уважением

Люк

ответ

4

Перед тем, как начать думать о том, как сделать систему плагинов, вы должны определить, что именно плагин для вашего приложения, какие плагины могут сделать и какие данные плагины смогут получить доступ (например, таблица сообщений, но не таблица пользователей).

Затем, посмотрите на Drupal, я думаю, что это модульная система на основе крючков, действительно мощная и простая в использовании для разработчиков.

В принципе, идея заключается в том, что когда модуль или плагин установлены, все, что вы делаете на своем «ядре», просматриваете, если есть какой-то модуль/плагины, подключенные к этому действию.

Пример:

//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 
} 

Это очень очень Sintetic пример, но должно дать вам идею (и не работает!).

Единственная проблема здесь связана с аргументами, которые вы передаете каждой функции hook_function, которые должны быть документированы очень хорошо, однако документация важна независимо от того, какой путь вы выберете.

Некоторые ссылки: Drupal hooks, hook_insert

+0

Спасибо за пример кода Daniel , было бы жизнеспособной идеей иметь какой-то вызов, как у вас, в ваших циклах foreach в конструкциях классов базовых действий и деструкции? Таким образом, они всегда вызывались в самом начале и в конце любого кода в классе? Спасибо, что нашли время, чтобы написать приведенный выше пример с такой документацией, это очень ясно. – Luke

+0

Мой код - всего лишь пример, это не реальный способ работы крючка drupla (вам действительно нужно дать, чтобы посмотреть на них в документации drupal). Некоторые крючки просто «переопределяют» базовые функции, другие работают как «проверка», если функция hook возвращает true, базовая функция выполняется, в противном случае - нет. Это всего лишь руководство, все зависит от ваших конкретных потребностей. – Strae

+0

Спасибо, Дэниэл, полезные ссылки и комментарии, я копал код Drupal, и это было очень полезно. ура – Luke

2

Что вы ищете пример и/или информацию об архитектуре в плагин. Используя этот термин, Google откроет много ресурсов.

Изучите, как это достигается в существующих установленных приложениях, таких как WordPress, Drupal или Joomla.

Рассмотрим также этот существующий вопрос: Plugin Architecture in PHP

+0

Привет Джон, у меня было посмотреть на эту другую тему, а также на Google, я нашел несколько сообщений на форуме (спасибо за правильное название «плагин архитектуры»), но не хорошие статьи для php, я собираюсь delv в drupal в какой-то момент, чтобы посмотреть, как они это делают, но вы не знаете, какая хорошая статья для php? Cheers Luke – Luke

+1

На самом деле, я просто искал «PHP plugin architecture», нашел этот вопрос при первых результатах, и я думаю, что это отстой, если кто-то просто говорит, чтобы сделать поиск Google для этого. – MOnsDaR

Смежные вопросы