drupal - 如果我已经有了 hook_mail,那么还有 hook_mail_alter 有什么意义呢?

标签 drupal drupal-6 drupal-hooks

如果我已经有了 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/

相关文章:

javascript - Drupal Bootstrap 滚动与 Readmore 插件冲突

drupal - FFMPEG - 将任何类型的文件转换为与 IOS 和 Flash 兼容的 Mp4

php - Drupal 表单重定向到片段

drupal - 在购物车中的同一行项目中合并同类产品

php - 多次调用通配符加载器函数 (_load)

drupal::订购完整的钩子(Hook)并升级用户权限/角色

php - hook_form_alter 根据用户角色取消设置字段

drupal - 如果 View 为空,则隐藏指向 View View 的链接

drupal-6 - Google Analytics,跟踪非广告网络广告

drupal-6 - Drupal 不保存管理设置中的任何更改