Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drupal 在hook_mail()中使用动态电子邮件生成_Drupal_Drupal 7_Drupal Hooks - Fatal编程技术网

Drupal 在hook_mail()中使用动态电子邮件生成

Drupal 在hook_mail()中使用动态电子邮件生成,drupal,drupal-7,drupal-hooks,Drupal,Drupal 7,Drupal Hooks,是否可以在PHPswitch语句中动态生成cases,如本例中的hook\u mail() 如果您对所有正在发送邮件的用户使用相同的基本电子邮件“骨架”,并且只需要替换一些特定于用户的值(用户名、配置文件信息等),那么您可以使用令牌来完成工作 看看这两个函数,看看我的意思(它们在同一个文件中并排): 当您使用drupal_-mail()时,您可以向传递给它的params数组分配任何想要的值(这与传递给hook_-mail实现的params数组相同)。然后,可以将这些值添加到令牌模块提供的默认

是否可以在PHP
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;
    }
  }
}