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

ane*_*yzm 4 drupal drupal-6 drupal-hooks

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

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

也许在调用其他函数后添加页脚?

kia*_*uno 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);
Run Code Online (Sandbox Code Playgroud)

$module是传递给的第一个参数drupal_mail().
很明显,该函数不会调用hook_mail()实现它的每个模块的实现,但它仅为调用该函数的模块调用钩子.

有其他方面的差异,例如,当两个钩被调用(hook_mail_alter()不能设置该消息,这是之前设置的语言hook_mail_alter()被调用),和参数他们得到(hook_mail($key, &$message, $params)对hook_mail_alter(&$message)).