| [PHP] Делаем поддержку плагинов |
| Author: Blacksilver |
| 05.10.2009 10:51 |
[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>
Тут видно что мы регистируем класс плагина, который выполняет три функции - по одной на метод. Интерфейсы методов жестко заданы - об этом позже. Последняя строка создает экземпляр плагина и добавляет его в массив с плагинами. Ура, плагин подключен. Вызываем код плагинаТепер в скрипте мы ищем места, куда можно было бы подключать плагины. В примере таких мест три: обработка текста перед выводом на экран, список изменений и данные в конце страницы. Каждом таком месте стоило бы: То есть чтобы плагин сработал, он должен иметь метод с именем, указаным сдесь и принимать/отдавать данные так, как от него ожидают и месте вызова плагина. Такая последовательность операций не так уж и удобна, поэтому в большинстве случаев проще воспользоватся одной из функций, которые я дописал в plugins.php: Теперь нам просто подключать и вызывать плагины. ЗаключениеТеперь мы можем чтобы обмениваться дополнениями к PHP скриптам нам не нужно лезть в код. В достаточно скопировать файлы в нужную папку и всё заработает. Да и разрабатывать плагины удобно: не нужно лезть в код в поисках места, куда нужно вставить пару своих строчек - достаточно написать метод, с нужным интерфейсом. Да, и вообще, плагины - это всегда круто. Приятной вам разработки и поменьше секса с кодом. |
| Обновлено 05.10.2009 11:00 |