[PHP] Делаем поддержку плагинов
В паблике лежит большое количество php-скриптов, которые делают почти всё, что нам надо. Это такой закон подлости - всё равно нужно что-то дописать, а вон там что-то поменять - и всё будет хорошо. Такие скрипты, бывает, можно скачать по множестве всяких вариантов. Или можно найти дополнения, инструкция по установке которых выглядит примерно так: "В таком-то файле найдите такую-то строку и вставьте после неё вот это".
Чтобы избежать таких неудобств в свои скрипты стоит добавлять поддержку плагинов. Это просто, вот пример - "Hello world" с поддержкой плагинов. Рассмотрим его поподробнее.
Добавляем плагины
В начале файла plugins.php есть такие строки:
// Массив с обьектами плагинов $plugins = array(); // Подключаем все файлы .php в папке plugins if ($handle = opendir('plugins')) { while (false !== ($file = readdir($handle))) { if ( eregi('\.php$', $file) ) include_once 'plugins/'.$file; } closedir($handle); }
То есть мы лазим по папке plugins и подключаем все .php файлы, которые в ней найдем. Подключением плагинов пусть они сами и занимаются - так проще.
Пишем плагин
Посмотрим на файл с плагином silencer.
class plugin_silencer { function process_text( $text ) { return str_replace( '!', '.', $text ); } function show_ender() { echo '<p>Плагин silencer копирайт улюлю.'; } function show_text_change() { return 'Восклицательные знаки заменены на точки.'; } } // Регистрируем плагин $plugins[] = new plugin_silencer();</p>
Тут видно что мы регистируем класс плагина, который выполняет три функции - по одной на метод. Интерфейсы методов жестко заданы - об этом позже. Последняя строка создает экземпляр плагина и добавляет его в массив с плагинами. Ура, плагин подключен.
Вызываем код плагина
Тепер в скрипте мы ищем места, куда можно было бы подключать плагины. В примере таких мест три: обработка текста перед выводом на экран, список изменений и данные в конце страницы. Каждом таком месте стоило бы:
1. Пройтись циклом по всем плагинам.
2. Посмотреть стоит ли вызывать данный плагин. Тут мы смотрим, есть ли у плагина данный метод.
3. Вызвать искомый метод.
То есть чтобы плагин сработал, он должен иметь метод с именем, указаным сдесь и принимать/отдавать данные так, как от него ожидают и месте вызова плагина.
Такая последовательность операций не так уж и удобна, поэтому в большинстве случаев проще воспользоватся одной из функций, которые я дописал в plugins.php:
Теперь нам просто подключать и вызывать плагины.
Заключение
Теперь мы можем чтобы обмениваться дополнениями к PHP скриптам нам не нужно лезть в код. В достаточно скопировать файлы в нужную папку и всё заработает. Да и разрабатывать плагины удобно: не нужно лезть в код в поисках места, куда нужно вставить пару своих строчек - достаточно написать метод, с нужным интерфейсом. Да, и вообще, плагины - это всегда круто. Приятной вам разработки и поменьше секса с кодом.
Обновлено 07.05.2011 23:44
