如果我已经拥有hook_mail,那么拥有hook_mail_alter有什么意义呢?

时间:2010-08-03 16:19:11

标签: drupal drupal-6 drupal-hooks

如果我已经拥有hook_mail,那么拥有hook_mail_alter是什么意思?

例如,我看到hook_mail_alter用于在我的邮件消息中添加页脚。但我可以使用hook_mail()添加它,而不是使用2个函数......我缺少什么?

在调用其他一些函数之后,可能会添加页脚吗?

1 个答案:

答案 0 :(得分:8)

应该从模块中使用

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()之前设置),以及它们获得的参数({ {1}}与hook_mail($key, &$message, $params))。