![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
Есть программа. Необходимо обеспечить подключение к ней модулей различной направленности. Состоящих не только из одного файла. Какие пути реализации вы видите?
я вижу такой путь: 1. Создается таблица
2. При запуске программы читаются все записи из таблицы modules WHERE status='true' 3. Теперь мы знаем, как называется каталог, в котором лежит модуль. Он называется также, как и modulename из таблицы. 4. Загружаем файл: include("modules/extra/$modulename/conf.php"); Файл conf.php, это файл, который должен обязательно содержать каждый модуль. В нем хранится информация о том, как называется пункт в главное меню программы, который появляется при подключении модуля, версия модуля и может еще что-то... Подключение нового модуля к системе - Загружаем все файлы модуля в каталог: modules/extra/имя_модуля - Делаем запись в таблицу modules о новом модуле. - Подключаем файл install.php Этот файл содержит две функции: 1. install_module 2. uninstall_module - Запускаем функцию install_module, которая создает нужную таблицу, нужные поля в таблица и т.п., а также делает все, что нужно для установки модуля. - По окончании своей работы, если модуль подключен успешно, то она в таблице modules ставит status=true для себя. |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
Нужно очень хорошо продуманная система модульности.
|
|||
|
||||
| Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: 3 Всего: 55 |
А инфу из файла в таблицу зенести нельзя?
|
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
Остается тонкий момент... Что делать, когда один подключаемый модуль должен как-то влиять на другой уже подключенный модуль? Например, добавить ему некоторую функциональность.
имхо это можно реализовать только двумя способами: 1. Подключенный модуль заменит своими некоторые функции прежнего модуля. 2. Если прежний модуль знает о возможности расширения функциональности за счет подключения внешнего модуля, то в нем должна быть организована стыковка с модулем. Например, в тех местах, где требуется выполнить какое-то действие, проверяется по таблице modules наличие такого модуля, и если он там есть, то вызывается с него определенная функция. |
|||
|
||||
| Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: 3 Всего: 55 |
Думаю вызывать через:
Module::method; |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
Какую инфу и из какого файла? Из файла конфига? имхо нет в этом необходимости. Т.к. конфиг модуля будет меняться в моем случае все равно только специалистов, и что будет в этом конфиге хранится, я сам толком еще не знаю.. Может у кого-то есть мысли, что там можно хранить? |
|||
|
||||
| Farik |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 1.2.2005 Репутация: нет Всего: 1 |
всё равно не совсем понятно, зачем разделять инициализацию модуля на два этапа - чтение из базы и чтение из файла
почему бы не хранить настройки в базе? соответсвенни и взаимодействие модулей тоже можно в таком случае сохранять в базе и вызывать не конфигурационный файл, а конфигурационные опции.... |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
Если вышла новая версия модуля, то мне достаточно загрузить новые файлы модуля в нужный каталог. Иначе же мне нужно еще запрос делать к базе, в котором менять версию модуля в базе. К тому же, может будут локальные настройки для модуля, которые только этот подключаемый модуль будет использовать. Их также удобнее хранить в файле. |
|||
|
||||
| AntonioBanderaz |
|
|||
![]() Velichko Anton ![]() ![]() Профиль Группа: Участник Сообщений: 851 Регистрация: 28.4.2005 Где: Санкт-Петербург Репутация: 1 Всего: 18 |
А автозпгрузкой не пробывал?
Он сам будет искать в ТЕКУЩЕМ каталоге, все файлы типа module_траля-ля.php и смотреть нет ли в них класса User, если таковой не определён!!! Это сообщение отредактировал(а) AntonioBanderaz - 4.5.2005, 23:21 -------------------- ГЫ... |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
AntonioBanderaz но тогда, чтобы отключить какой-то модуль, получается мне его надо удалять. А это плохо.
|
|||
|
||||
| Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: 3 Всего: 55 |
Wowa
Это почему удалять? он же подключается только при вызове. |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
а если мне его не надо подключать? Есди этот модуль мне надо отключить? |
|||
|
||||
| AntonioBanderaz |
|
|||
![]() Velichko Anton ![]() ![]() Профиль Группа: Участник Сообщений: 851 Регистрация: 28.4.2005 Где: Санкт-Петербург Репутация: 1 Всего: 18 |
Wowa - логично будет его не вызывать, тогда он и будет отключён....
-------------------- ГЫ... |
|||
|
||||
| AntonioBanderaz |
|
|||
![]() Velichko Anton ![]() ![]() Профиль Группа: Участник Сообщений: 851 Регистрация: 28.4.2005 Где: Санкт-Петербург Репутация: 1 Всего: 18 |
Изменить функцию на проверку из какой-нидь хни и имени модуля, если он там есть - то не подключать, если нет, то подключать....
Т.е.
Вот Тебе и отключение.... Это сообщение отредактировал(а) AntonioBanderaz - 5.5.2005, 15:11 -------------------- ГЫ... |
|||
|
||||
| IZ@TOP |
|
||||||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 1 Всего: 73 |
Я бы делал немного по другому. Представим что у нас есть таблица скилета системы работающей с модулями и т.п. Вот ее SQL структура:
Данная таблица, допустим, будет определять структуру нашего сайта. К разделам можно обращаться несколькими путями - по алиасу или по идентификатору в базе. В данном примере правда эта структура может иметь не более одной вложенности категорий, но при желании это можно изменить. Поле modid ссылается на подключаемый модуль, таблица которого, по моим соображениям, должна быть устроена примерно следующим образом:
Итак, у нас есть таблица модуля предоставляющая нам следующие данные: Имя модуля - оно же может быть каталогом в папке ответственной за храниение модулей. Это зависит уже от ваших настроек. Сорс модуля - исполняемый файл. Может содержать в себе несколько модулей - т.е. мы представляем отдельный файл не как отдельный модуль, а как например хранилище методов класса или функций. Соответственно учитываем тип модуля - класс или функция. Какой метод класса или фуункцию нам нужно инициализировать. Если нам не нужно ничего инициализировать внутри модуля, просто ничего не делаем. Ну и на всякий случай определим уровень доступа, но об этом думайте сами. Представлю на конкретном примере как все это должно работать: Представим что пользователь запршивает страничку с идентификатором 387, к которой привязан модуль с ID 8, этот модуль отвечает за вывод новостей. Вот примерный план действий:
Код не проверял, могут быть ошибки. Но логика должна быть понятна. -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
||||||
|
|||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Для профи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |