Пишем модуль под Друпал

Главные вкладки

Аватар пользователя olk olk 1 апреля 2010 в 17:32

Может кому будет интересно. Подшивка статей рассчитан на начинающих в программировании под Друпал, но достаточно продвинутых в PHP и SQL.

Начинаю цикл небольших статей, где на конкретном примере будет показано - как сделать свой модуль под Drupal.
Часто у новичков возникает мнение, что свой модуль - это нечто сверхсложное и не достижимое. Хочу развеять этот миф, конечно если вы владеете PHP и основами SQL.
Также желательно хоть немного ознакомится с Drupal API (но в принципе по мере создания модуля, мы «пройдемся» по основным возможностям Drupal api)
Построение модулей для разных целей, описано на официальном сайте, на странице «Module developer's guide», но для тех, у кого трудности с переводом или пониманием, я попробую шаг за шагом пройти с вами процесс построения модуля.
Сразу оговорюсь, мы будем рассматривать построение модуля под версию Друпала 6.x (как наиболее используемую на момент публикации статьи).

Возможно я не буду придерживаться «учебной» последовательности, где то вы не найдете объяснений - как я пришел к этому решению, вполне возможны ошибки и избыточность в коде.
Я не буду показывать создание модуля на выдуманных примерах, просто возьмем конкретную (и возможно полезную задачу) и попробуем ее решить при помощи своего модуля.

Продолжение здесь ...

Ну и цикл в процессе написания Smile так что комментарии, критика, поправки приветствуются ...

Комментарии

Аватар пользователя graker graker 1 апреля 2010 в 17:58

Критика 1: Объяснения "как делать модули" ближе к последним частям практически исчезли, вместо этого появились длинные листинги, не имеющие отношения к объясняемому предмету, это напрягает. Посмотрите как сделан аналогичный учебник на Drupal.org: http://drupal.org/node/206753 - минимум лишнего кода и максимум объяснений, что и зачем делается.

Критика 2: вы объясняете назначение функций типа variable_get(), но при этом практически не рассматриваете устройство хуков. А модуль делается на хуках. Например, часть 2 - где реализация hook_menu(). Читателю для создания модуля необходимо знать, как работать с hook_menu(), но об этом ничего не написано. Вместо этого описания variable_get(), node_get_types() и т.д. Не в тему это.

Критика 3: орфография немножко бросается в глаза Sad

Совет 1: Geshi filter, который вы используете для подсветки, умеет выводить код сразу со ссылками на описание функций на api.drupal.org - это удобно.

Совет 2: рассказывайте в тексте про интересные мелочи. Например - зачем кидать реализацию меню-коллбэков в отдельные inc-файлы (и что нужно эти файлы в hook_menu обозначать). Это интересно.

Аватар пользователя Ch Ch 2 апреля 2010 в 20:15

"graker" wrote:
Например - зачем кидать реализацию меню-коллбэков в отдельные inc-файлы

Интересно, а для чего их нужно выносить в отдельные файлы?

Аватар пользователя graker graker 2 апреля 2010 в 21:22

Ch wrote:
Интересно, а для чего их нужно выносить в отдельные файлы?

Раньше уже обсуждалось. Чтобы подгружать их только когда генерируются соответствующие страницы.

Аватар пользователя orangeudav orangeudav 2 апреля 2010 в 22:36

Ch wrote:

Интересно, а для чего их нужно выносить в отдельные файлы?

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

Аватар пользователя Dеmimurych Dеmimurych 3 апреля 2010 в 0:39

"Ch" wrote:
Интересно, а для чего их нужно выносить в отдельные файлы?

"graker" wrote:
Раньше уже обсуждалось. Чтобы подгружать их только когда генерируются соответствующие страницы.

так же раньше обсуждалось
что при включенном опкеше(APC eAacelerator) подобная практика сводит на нет работу последних.

Аватар пользователя graker graker 3 апреля 2010 в 0:56

Да, я в курсе, там же и обсуждалось. Так же как и то, что не везде акселератор стоит. Только это прямого отношения к архитектуре Друпала не имеет. А устройство хука меню - как раз наоборот.

Аватар пользователя likin likin 3 апреля 2010 в 19:47

Честно. насчёт изложения материала, мне очень понравилось... Все сноски я собрал в мини-ЧАВО.
Это же статья не для полных же newbies?!