Хук - PHP функция, которая вызывается при определенных условиях с какой-то конкретной целью.
Хуки имеют вид hook_name()
и состоят из двух частей:
-
hook
- отражает что функция, является хуком. Данное слово в названии функции заменяется на машинное име модуля или темы, которые реализуют данный хук. -
name
- название хука, которое остается неизменным.
Например, если хук имеет название hook_to_rule_them_all()
, а ваш модуль или тема имеет машинное имя my_precious
, то для реализации данного хука, вам необходимо создать функцию my_precious_to_rule_them_all()
.
¶Разновидности хуков
Хуки можно разделить на два типа:
-
Исполняемые хуки — это те хуки, которые вызываются и производят какие-то действия. Они могут как иметь возврат данных при помощи
return
, так и не иметь его. Также, они могут вызываться с передачей аргументов по ссылке. Такие хуки - хуки общего назначения. Их поведение сильно зависит от того, с какой целью они вызываются. Например, Drupal, прежде чем вызвать какой-то шаблон оформления для темы, вызывает соответствующие preprocess хуки, в которых модули и темы могут подготовить переменные для темплейтов, повлиять на входящие и исходящие данные. - Альтер хуки — данные хуки всегда вызываются с одной единственной целью - возможностью повлиять на данные. В них всегда приходят аргументы по ссылке, которые вы можете либо поменять, либо не трогать. Например, Drupal, прежде чем отправить форму, созданную при помощи Form API на обработку и конвертацию в HTML разметку, вызывает соответствующие альтер хуки, чтобы модули могли повлиять на данную форму: добавить новые элементы, удалить или изменить существующие, внедриться в валидацию или отправку, отредактировать принятые данные и т.д.
¶Где писать хуки?
Хуки можно реализовывать как в модулях, так и в темах оформления.
В случае с модулем, хуки обычно реализуют в файле *.module, а в случае темы оформления в файле *.theme.
Хуки можно выносить в отдельные файлы, некоторые хуки поддерживают автоподгрузку файлов по своей группе, но для этого убедитесь, что файл, в котором вы реализуете хук, будет загружен в процессе обработки запроса, иначе хук не будет вызываться.
¶Смотрите также
¶Ссылки
- Drupal 8: hooks (+ YouTube), Niklan, 2018