[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Модульная система (разработка)
kronos1026
Здравствуйте, при изучении php задался вопросом написания своей модульной системы, но не знаю с чего подойти.

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

Очень нравится реализация модульности в CMS Drupal, которая основана на hook.

Вопросы:
1) с чего начать разработку своей модульной системы?
2) какие способы, методы существуют при разработке подобных систем?
3) какие технологии используются в данном подходе?
4) есть ли у кого небольшие разработки подобного рода систем в которых новичку было-бы не очень сложно разобраться?

Прошу строго не судить )
p.s. Надеюсь многим данная тема будет интересна.



Спустя 14 минут, 18 секунд (27.04.2012 - 14:21) Michael написал(а):
Цитата (kronos1026 @ 27.04.2012 - 14:07)
Очень нравится реализация модульности в CMS Drupal, которая основана на hook.

ну так и сделай так как в друпале

Спустя 10 минут, 3 секунды (27.04.2012 - 14:31) kronos1026 написал(а):
Цитата (Michael @ 27.04.2012 - 12:21)
Цитата (kronos1026 @ 27.04.2012 - 14:07)
Очень нравится реализация модульности в CMS Drupal, которая основана на hook.

ну так и сделай так как в друпале


Все бы здорово, но я не представляю как реализовываются подобного рода системы, Drupal довольно сложный движок, если в его ядре копаться начать. Мне бы хотелось узнать с чего начинают разработчики модульных систем. Ведь должен быть некий план такой системы и самые основы ядра.

Спустя 10 минут, 24 секунды (27.04.2012 - 14:42) Игорь_Vasinsky написал(а):
неа. плана не надо. тупо - начал, 100500 раз переделал - пока не остался доволен - тока не бросать на середине - а то всё - финита.

Спустя 24 минуты, 45 секунд (27.04.2012 - 15:07) kronos1026 написал(а):
Цитата (Игорь_Vasinsky @ 27.04.2012 - 12:42)
неа. плана не надо. тупо - начал, 100500 раз переделал - пока не остался доволен - тока не бросать на середине - а то всё - финита.

И это ответ уважаемого программиста, который на форуме уже 2 с лишним года? Возможно ваш совет и несет некий смысл, могли бы вы перефразировать свой ответ, если это не некая издевка или банальный флуд в теме.

Спустя 11 минут, 46 секунд (27.04.2012 - 15:18) Zerstoren написал(а):
Цитата (kronos1026 @ 27.04.2012 - 13:07)
Цитата (Игорь_Vasinsky @ 27.04.2012 - 12:42)
неа. плана не надо. тупо - начал, 100500 раз переделал - пока не остался доволен - тока не бросать на середине - а то всё - финита.

И это ответ уважаемого программиста, который на форуме уже 2 с лишним года? Возможно ваш совет и несет некий смысл, могли бы вы перефразировать свой ответ, если это не некая издевка или банальный флуд в теме.

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

Наступая на свои грабли, получаешь много опыта. А используя чужие или смотря на чужие, не так много.

Спустя 8 минут, 2 секунды (27.04.2012 - 15:26) johniek_comp написал(а):
kronos1026
с первого раза не напишешь, он правильно сказал, 100500 раз все равно будешь переделовать

Спустя 34 минуты, 6 секунд (27.04.2012 - 16:01) stomp написал(а):
kronos1026, а зачем создавать своё? для чего?

Спустя 43 минуты, 37 секунд (27.04.2012 - 16:44) Игорь_Vasinsky написал(а):
Цитата
Он хотел сказать, что нужно наступать сначала на свои грабли, а не почитать про чужие грабли, а потом начать обходить свои, что в конечном итоге будет мало полезным.


в яблочко!

я вообще не понимаю людей заходящих на форум и спрашивающих план чего либо,

а самим не интересно в качестве главного почувствовать????

опыт - коллосальный.

Спустя 2 часа, 19 минут, 58 секунд (27.04.2012 - 19:04) Michael написал(а):
Цитата (kronos1026)
Все бы здорово, но я не представляю как реализовываются подобного рода системы, Drupal довольно сложный движок, если в его ядре копаться начать

изучи тогда движок полегче, разбери что там и как делается. А потом сделай похожее но только сам, по своему.
Вот как хуки в друпале вызываются:
_http://api.drupal.org/api/drupal/includes!module.inc/function/module_invoke/6
_http://api.drupal.org/api/drupal/includes!module.inc/function/module_invoke_all/6
для тебя это сложный код?
Цитата (stomp)
kronos1026, а зачем создавать своё? для чего?

для того, чтобы понимать как на самом деле все происходит, понимая - контролировать и принимать правильные профессиональные решения т.е. в итоге - быть профессиональным web-программистом.

Спустя 30 минут, 26 секунд (27.04.2012 - 19:35) Guest написал(а):
Цитата (Michael @ 27.04.2012 - 17:04)
изучи тогда движок полегче, разбери что там и как делается. А потом сделай похожее но только сам, по своему.
Вот как хуки в друпале вызываются:
_http://api.drupal.org/api/drupal/includes!module.inc/function/module_invoke/6
_http://api.drupal.org/api/drupal/includes!module.inc/function/module_invoke_all/6
для тебя это сложный код?


тут происходит лишь вызов хука, этого достаточно чтобы написать модуль, но проблема в том что я не понимаю самого принципа построения модульной системы, как ее строить? Как дать возможность своему ядру использовать модули?

Все вышесказанное конечно интересно и поучительно, но ответы немного не в то русло уходят. Меня интересует сама возможность модулей, как она реализуется? за счет каких технологий php.

Вопросов касательно - "зачем изобретать свой велосипец, когда куча гоночных машин уже изобретено"
Ответ на него - поскольку я довольно долга разбирался и писал всякие простенькие вещи типа модулей для Drupal, каких-то своих скриптов, меня заинтересовала сама мысль того как же работает ядро, как ему удается вызывать эти модули. Не стоит рассказывать мне про систему хуков, но что в ядре их вызывает в определенные моменты. Интересна сама сложность программирования ядра, с точки зрения модульности.

Спустя 10 часов, 52 минуты, 53 секунды (28.04.2012 - 06:27) Michael написал(а):
Цитата
Все вышесказанное конечно интересно и поучительно, но ответы немного не в то русло уходят. Меня интересует сама возможность модулей, как она реализуется? за счет каких технологий php.

1)Когда заходишь на страницу модулей, система просматривает подходящие каталоги на наличие модулей.
2)Чекбоксами предлагает их сделать включенными.
3)Когда сохраняешь страницу модулей, включенные модули оказываются в таблице system.
4)Главные файлы включенных модулей инклудятся при начальной загрузке
5)Теперь, в момент наступления любого предопределенного события ядра, друпал с помощью хуков опрашивает все включенные модули на предмет получения от них информации или предоставляет им возможность настроить поведение системы.

Спустя 23 минуты, 22 секунды (28.04.2012 - 06:51) kronos1026 написал(а):
Цитата (Michael @ 28.04.2012 - 04:27)
1)Когда заходишь на страницу модулей, система просматривает подходящие каталоги на наличие модулей.
2)Чекбоксами предлагает их сделать включенными.
3)Когда сохраняешь страницу модулей, включенные модули оказываются в таблице system.
4)Главные файлы включенных модулей инклудятся при начальной загрузке
5)Теперь, в момент наступления любого предопределенного события ядра, друпал с помощью хуков опрашивает все включенные модули на предмет получения от них информации или предоставляет им возможность настроить поведение системы.


Вот уже ближе к истине, теперь по пунктам:
1)тут все понятно, надо просматривать каталоги и в каталогах смотреть наличие "главных" файлов модуля, если условия выполняются выводи в таблицу модулей
2)тут тоже все логично
3)тут тоже все понятно
4)здесь обычный инклуд массива главных файлов модулей при начальной загрузке системы?
5)а вот тут можно поподробнее? как создается данное событие?

т.е. получили следующее
/ - корневой каталог (пусть здесь лежат файлы ядра)
/modules - каталог с модулями системы
/modules/module_1 - каталог нашего модуля
/modules/module_1/main.php - главный файл модуля

главный файл состоит из функций вида hook_menu, где hook - заменяется на имя модуля в нашем случае module_1, menu это событие которое возникает в ядре системы, когда происходит данное событие.

Теперь вопрос, как ядру программно вызывать hook_menu и определить что такого виды события есть в модулях? (если можно, то с программным кодом =))

Спустя 31 минута, 10 секунд (28.04.2012 - 07:22) Michael написал(а):
Цитата
здесь обычный инклуд массива главных файлов модулей при начальной загрузке системы?

в таблице system друпала можешь глянуть для type=='module' в столбце filename лежит путь к главному файлу, который инклудится.
Цитата
лавный файл состоит из функций вида hook_menu, где hook - заменяется на имя модуля в нашем случае module_1,

нет. Хук состоит из имени модуля и названия хука. Типа mymodule1_hook1

Цитата
Теперь вопрос, как ядру программно вызывать hook_menu и определить что такого виды события есть в модулях? (если можно, то с программным кодом =))

на это я уже отвечал, ты видно не понял smile.gif :
Смотри, функция вызова всех хуков:
_http://api.drupal.org/api/drupal/includes!module.inc/function/module_invoke_all/6
в нем $function = $module . '_' . $hook; - определяется функция хука.
Существует ли хук - function_exists

Спустя 40 минут, 17 секунд (28.04.2012 - 08:02) Dagot написал(а):
Тоже интересна данная тема, только я сам начал писать, даже не гуглил как там и чо должно быть...

только вот вопросик:
Как выводить данные которые возвращает модуль, без правки в ядре?

я сделал по типу

<div id=""sideLeft>
<?php
$this->loadModule(); ?>
</div>


потом в контролере для модулей ищется в базе данных активные модули которые должны быть выполнены для sideLeft'a. Но если возникнет ситуация что необходимо чтобы модуль был в определенном месте страницы, тогда как загрузить его в определенный участок страницы?

я думаю что без конкретного указания в нужном месте loadModule('nameModule'); никак не ообойтись.

Спустя 2 минуты, 58 секунд (28.04.2012 - 08:05) sergeiss написал(а):
Цитата (kronos1026 @ 27.04.2012 - 16:31)
Мне бы хотелось узнать с чего начинают разработчики модульных систем. Ведь должен быть некий план такой системы и самые основы ядра.

Я так думаю, что сначала они пишут скрипт "Хелло, Ворд!" wink.gif Затем, как было верно замечено, бегают по большим полям из граблей. После чего понимают, что же им надо. Делают. Переделывают мильён раз. Затем наконец-то пишут ТЗ. Всё переделывают (или делают с нуля) по ТЗ. Затем опять всё переделывают, потому что понимают, что можно было сделать лучше... И так далее, по кругу, давая каждому циклу разработки номер версии - чтобы никто не догадался об истинных причинах переделок smile.gif smile.gif smile.gif

А вообще, если более серьёзно, то надо исходить не из "а напишу-ка я что-нибудь", а из "мне надо то-то и то-то, как это можно реализовать". Зная цель, ты уже можешь думать о том, какие средства использовать для её достижения. Иначе получается как у подростка-хулигана: энергии много, а куда её приложить - не понятно. И начинает пробовать применять её там и сям.

Спустя 3 часа, 52 минуты, 33 секунды (28.04.2012 - 11:58) Michael написал(а):
Dagot, то о чем ты пишешь, больше похоже не о системе модулей, а о системе блоков сайта.
Нужно реализовать такой интерфейс, что блоки:
1) создаются модулями
2) создаются из админки

А размещаться в нужную область сайта они должны методом Drag&Drop
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.