Drupal 在hook_mail()中使用动态电子邮件生成
是否可以在PHPDrupal 在hook_mail()中使用动态电子邮件生成,drupal,drupal-7,drupal-hooks,Drupal,Drupal 7,Drupal Hooks,是否可以在PHPswitch语句中动态生成cases,如本例中的hook\u mail() 如果您对所有正在发送邮件的用户使用相同的基本电子邮件“骨架”,并且只需要替换一些特定于用户的值(用户名、配置文件信息等),那么您可以使用令牌来完成工作 看看这两个函数,看看我的意思(它们在同一个文件中并排): 当您使用drupal_-mail()时,您可以向传递给它的params数组分配任何想要的值(这与传递给hook_-mail实现的params数组相同)。然后,可以将这些值添加到令牌模块提供的默认
switch
语句中动态生成cases
,如本例中的hook\u mail()
如果您对所有正在发送邮件的用户使用相同的基本电子邮件“骨架”,并且只需要替换一些特定于用户的值(用户名、配置文件信息等),那么您可以使用令牌来完成工作 看看这两个函数,看看我的意思(它们在同一个文件中并排): 当您使用
drupal_-mail()
时,您可以向传递给它的params
数组分配任何想要的值(这与传递给hook_-mail
实现的params
数组相同)。然后,可以将这些值添加到令牌模块提供的默认邮件令牌中,正如您在第195-198行的hook\u mail
实现中看到的那样
如果您需要更复杂的内容(例如,电子邮件的主要文本取决于用户),您仍然可以使用相同的系统,但可以致电数据库以获取更多信息。如果需要为每个用户存储不同的电子邮件正文,请将其存储在与用户id关联的数据库表中,然后在邮件函数中动态查询该数据
无论如何,您不应该在PHP的
switch
语句级别使用任何类型的动态行为;您应该能够通过params
数组传入所需的任何动态值,而hook\u-mail
的实现需要这些值。一般来说,用于处理邮件的case
语句不是为了提供每个用户或每个节点的动态行为,而是为了管理内容和用途非常不同的电子邮件。您能澄清一下吗?这看起来像是滥用hook_邮件。请解释一下你想要完成什么,以及为什么要把这个放在钩子邮件里。hook_mail用于填充/修改电子邮件。不过,还有很多其他入口点可以启动邮件流程。@David Fells:这更全面:您可能会失去开关,只需询问(strpos('key,'invite')==0)或(preg_match('!invite\d+,$key)),谢谢。。。使用$params(以某种方式)解决了我的问题。。麻烦你看看这个:?干杯
/*
* Implement hook_mail().
*/
function rsvp_mail($key, &$message, $params) {
$guests = rsvp_query();
foreach ($guests as $account) {
switch($key) {
case "invite $account->uid" :
$message['subject'] = "And invitation for $account->name";
$message['body'][] = 'Some body text.';
$message['body'][] = rsvp_get_link($account);
break;
}
}
}