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)
) など、他にも違いがあります。