в качестве вступления
Собираюсь разрабатывать модуль (может не один) для drupal. ПОстараюсь изложить эту технику в процессе изучения.
В начале, в основном, будет перевод документации, затем - собственные выводы и догадки. Перевод вольный в плане близости к тексту; где я посчитаю более понятным отойти от оригинала, там буду это делать.
Введение
При разработке drupal ставилась цель сделать систему настолько модульной, на сколько это возможно. Модульная структура позволяет сделать систему гибкой, легко настраиваемой и обратно совместимой. В итоге это позволяет пользователю создать сайт в соответствии с его потребностями.
Модуль drupal - это файл, содержащий набор функций на языке php. Если модуль используется (включён в админской секции), его код выполняется в контексте сайта. Это значит, что код модуля может использовать функции, переменные и структуры движка. Действительно, модуль - ничто иное, как обычный php файл. Такая организация обеспечивает простую модель разработки. Модульность лучше всего подходит для проектов с открытой лицензией, позволяет многим людям работать над проектом параллельно, без риска помешать друг другу.
Идея - предоставить возможность выполнять нужный код в определённые моменты работы движка. Этот код, в свою очередь, и должен расширять функциональность. Участки кода (функции), выполняемые в определённые моменты называются хуками (hooks); они должны иметь фиксированный интерфейс (должны именоваться по определённым правилам).
Это делается просмотром директории, где должны размещаться все используемые модули. Пусть модуль называется foo (т.е. modules/foo.module). Если существует хук bar, движок будет вызывать foo_bar(), если таковой был экспортирован вашим модулем.
Дальше предлагается почитать обзор хуков модуля, чем и займёмся.
Хуки позволяют модулю взаимодействовать с ядром drupal'а. Система модулей drupal'а основана на концепции хуков. Хук - php функция с названием (пример) foo_bar. Здесь foo - имя модуля (полное имя модуля - foo.module), а bar - имя хука. Каждый хук имеет определённый набор параметров и определённый тип результата (возвращаемого значения). Для расширения возможностей drupal модуль всего лишь должен предоставлять хуки. Когда drupal'у требуется функциональность модуля, определяется какие модули предоставляют хуки (соответствующие данной ситуации). Найденные хуки вызываются во всех модулях, которые соответствующие хуки предоставили.
Дальше дана табличка с хуками, существующими в drupal.
Ссылка: http://drupaldocs.org/api/head/group/hooks.
Наиболее уместным продолжением мне показался раздел Creating modules - a tutorial.
Руководство по созданию модулей
Модули - коллекции функций. Модули связываются с drupal и предоставляют дополнительную функциональность. После прочтения этой части у вас появится возможность писать простые модули-блоки и использовать их как шаблоны для более сложных модулей и модулей-нодов. Эта часть не расскажет всего о создании модулей. Она также не затрагивает задач кэширования, качественной реализации механизмов разрешений и безопасности. Используйте это руководство как начальные сведения, изучайте дальше по другим модулям, по руководству drupal, см. также "стандарты программирования" (coding standarts).
Это руководство предполагает, что вы знаете следующее:
- Язык php, включая синтаксис и концепцию объектов php
- Базовые знания о таблицах баз данных, полях, записях и структурах запросах SQL
- Установленную систему drupal
- Администраторские права доступа drupal
- Доступ к веб серверу
Руководство не требует знаний о работе модулей drupal; оно также не поясняет, как писать модули для drupal версий ниже 4.5.
Начнём
В этой части мы создадим модуль-блок, показывающий список ссылок на содержимое такое, как записи в дневниках или обсуждения в форуме. Ещё один критерий - содержимое создано неделю назад. Руководство в целом покажет, как создавать содержимое блока, записывать ссылки и получать информацию из нодов drupal.
Начните написание модуля с создания php файла и сохраните его под именем 'onthisdate.module' в директории modules, располагающейся в корне установленной копии drupal.
?>
В соответствии со стандартом программирования, используйте длинную версию тега <?php, а не <? для заключения в него php кода.
Все функции вашего модуля именуются следующим образом: {modulename}_{hook}. Где hook - предопределённая функция-хук.Drupal будет вызывать такие функции для получения определённых данных. Предопределённые имена хуков необходимы, чтобы drupal знал, как получить нужную информацию.