2

cases是否可以在 PHP语句中动态生成switch,就像在这个例子中一样 hook_mail()

/*
 * 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;
    }
  }
}
4

1 回答 1

2

如果您为所有要邮寄的用户使用相同的基本电子邮件“骨架”,并且您只需替换一些值以成为特定于用户的值(用户名、个人资料信息等),您可以只使用令牌来把事做好。

看看这两个函数以了解我的意思(它们在同一个文件中并排):

https://github.com/semperos/drupal-simple-subs/blob/master/simple_subs.module#L180

https://github.com/semperos/drupal-simple-subs/blob/master/simple_subs.module#L191

当您使用 时drupal_mail(),您可以将您想要的任何值分配给params您传递给它的数组(这与params传递给您的实现的数组相同hook_mail)。然后可以将这些值添加到 Token 模块提供的开箱即用的默认邮件令牌中,正如您在我的hook_mail第 195-198 行的实现中看到的那样。

如果您需要更复杂的内容(即电子邮件的主要文本取决于用户),您仍然可以使用相同的系统,但需要调用数据库以获取更多信息。如果您需要为每个用户存储不同的电子邮件正文,请将其存储在与用户 ID 关联的数据库表中,然后在您的邮件函数中动态查询该数据。

无论如何,您不应该在 PHPswitch语句级别使用任何类型的动态行为;您应该能够通过params您的实现所hook_mail期望的数组传递您需要的任何动态值。一般来说,case处理邮件的语句并不意味着提供基于每个用户或每个节点的动态行为,而是用于管理具有非常不同的内容和用途的电子邮件。

于 2011-05-03T04:48:20.420 回答