Какой смысл иметь hook_mail_alter, если у меня уже есть hook_mail?
Какой смысл иметь hook_mail_alter, если у меня уже есть hook_mail?
Например, я увидел, что hook_mail_alter используется для добавления нижнего колонтитула в мое почтовое сообщение. Но я мог бы использовать hook_mail()
добавить его, вместо того, чтобы использовать 2 функции... Чего мне не хватает?
Может быть, это сделано, чтобы добавить нижний колонтитул после вызова какой-либо другой функции?
1 ответ
hook_mail()
следует использовать из модуля для изменения своего собственного почтового сообщения, в то время как hook_mail_alter()
должен использоваться из модуля для изменения сообщения, отправленного другими модулями.
Это ясно из следующего кода, взятого из drupal_mail()
:
// Build the e-mail (get subject and body, allow additional headers) by
// invoking hook_mail() on this module. We cannot use module_invoke() as
// we need to have $message by reference in hook_mail().
if (function_exists($function = $module .'_mail')) {
$function($key, $message, $params);
}
// Invoke hook_mail_alter() to allow all modules to alter the resulting e-mail.
drupal_alter('mail', $message);
$module
это первый параметр, переданный drupal_mail()
,
Ясно, что функция не вызывает реализацию hook_mail()
каждого реализующего его модуля, но он вызывает хук только для модуля, вызывающего функцию.
Существуют и другие различия, например, когда вызываются два хука (hook_mail_alter()
невозможно установить язык для сообщения, установленного ранее hook_mail_alter()
вызывается), и параметры они получают (hook_mail($key, &$message, $params)
против hook_mail_alter(&$message)
).