Какой смысл иметь hook_mail_alter, если у меня уже есть hook_mail? - PullRequest
4 голосов
/ 03 августа 2010

Какой смысл иметь hook_mail_alter, если у меня уже есть hook_mail?

Например, я увидел, что hook_mail_alter используется для добавления нижнего колонтитула в мое почтовое сообщение. Но я мог бы использовать hook_mail(), чтобы добавить его, вместо того, чтобы использовать 2 функции ... Чего мне не хватает?

Может быть, это сделано для добавления нижнего колонтитула после вызова какой-либо другой функции?

1 Ответ

8 голосов
/ 03 августа 2010

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)).

...