如果我已经拥有 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()
实现,但它只为调用该函数的模块调用钩子(Hook)。还有其他区别,例如调用两个钩子(Hook)时(
hook_mail_alter()
无法设置消息的语言,这是在调用 hook_mail_alter()
之前设置的),以及它们获得的参数( hook_mail($key, &$message, $params)
与 hook_mail_alter(&$message)
)。关于drupal - 如果我已经拥有 hook_mail,那么拥有 hook_mail_alter 有什么意义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3398503/