hook_mail を既に持っている場合、hook_mail_alter を使用する意味は何ですか?
たとえば、メール メッセージにフッターを追加するために hook_mail_alter が使用されていることがわかりました。しかしhook_mail()、2 つの関数を使用する代わりに、それを追加するために使用することもできます...何が欠けていますか?
たぶん、他の関数が呼び出された後にフッターを追加するために行われますか?
hook_mail を既に持っている場合、hook_mail_alter を使用する意味は何ですか?
たとえば、メール メッセージにフッターを追加するために hook_mail_alter が使用されていることがわかりました。しかしhook_mail()、2 つの関数を使用する代わりに、それを追加するために使用することもできます...何が欠けていますか?
たぶん、他の関数が呼び出された後にフッターを追加するために行われますか?
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()
2 つのフックが呼び出されるタイミング ( が呼び出さhook_mail_alter()れる前に設定されたメッセージの言語を設定できないhook_mail_alter()) や、それらが取得するパラメーター (hook_mail($key, &$message, $params)に対してhook_mail_alter(&$message)) など、他にも違いがあります。