Другие ответы отличные, точные, подробные, но я не уверен, что это «простые слова», объясняющие суть концепции, которую искал просящий.
Я думаю о хуках как о точке, в которой код останавливается и выкрикивает: «У кого-нибудь еще есть что добавить? ». Любой модуль может иметь функцию, которая отвечает на это и запускается с соответствующими данными, передаваемыми ему в этот момент кода.
Хороший простой пример - hook_node_delete () . Любой модуль может использовать его, чтобы все происходило каждый раз при удалении узла. Документы сообщают вам, что этот хук передает модулю объект этого удаленного узла для работы и выделяет другую полезную информацию, например, о точном времени, когда он вызывается (например, это происходит до того, как данные узла фактически удаляются из базы данных). и где в коде Drupal вызывается хук (который может быть в нескольких местах).
Вы можете изучить, какие существуют хуки, и узнать, какие данные им передаются, исследуя вещи, начинающиеся с "hook_" в API Drupal .
Хуки работают по соглашениям об именах: используя в hook_node_delete
качестве нашего примера, когда процесс удаления узла достигает точки, где вызывается хук, для каждого модуля с такой функцией, [modulename]_node_delete()
где слово хук в имени хука заменяется именем модуля (например, my_amazing_module_node_delete()
) эти функции вызываются.
Почему? Таким образом, любой модуль может делать все что угодно в этих ключевых моментах: например, вы можете посмотреть на удаленный узел и сделать что-то, если он удовлетворяет определенному условию (скажем, отправить электронное письмо администратору или запустить длительный процесс).
Некоторые хуки позволяют вам изменять вещи, которые были сгенерированы непосредственно перед их обработкой. Например, hook_menu_alter () передает вам текущие пункты меню, которые сгенерировала система. Любой модуль может определить функцию some_modulename_menu_alter () и просмотреть их, при необходимости изменить их (удалить некоторые, добавить некоторые, отсортировать их ...) и передать вновь измененное меню обратно.
Это просто, действительно мощно и лежит в основе того, как Drupal работает как модульная система. Реализации хуков лежат в основе большинства модулей Drupal.
Просматривая код модуля Drupal, вы можете определить, какие функции происходят из ловушек (в отличие от функций, которые просто вызываются из самого кода модуля), так как сообщество Drupal применяет соглашение, согласно которому каждая реализация ловушки имеет комментарий перед ним, как это (обратите внимание на бит "Implements hook _..."):
/**
* Implements hook_some_hook().
*
* Some descriptive summary of what this does
*/
function my_amazing_module_some_hook() {
Некоторые модули, которые действуют как API, определяют свои собственные хуки. Например, Views определяет множество хуков, которые позволяют добавлять, считывать и редактировать данные в различных точках в процессе создания или отображения представления. Вы можете найти информацию о хуках, созданных в пользовательских модулях, из двух мест (при условии, что модуль следует соглашениям и т. Д.):
Начальная загрузка, как объяснили другие, в основном загружается - я не буду дублировать другие хорошие четкие объяснения.