是否可以在PHP cases
语句中动态生成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;
}
}
}
答案 0 :(得分: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模块提供的开箱即用的默认邮件令牌中,如我在第195-198行的hook_mail
实现中所见。
如果您需要更复杂的内容(即电子邮件的主要文本取决于用户),您仍然可以使用同一系统,但可以调用数据库以获取更多信息。如果您需要为每个用户存储不同的电子邮件正文,请将其存储在与用户ID相关联的数据库表中,然后在您的邮件函数中动态查询该数据。
无论如何,您不必在PHP的switch
语句级别使用任何类型的动态行为;您应该能够通过params
实现的hook_mail
数组传递您需要的任何动态值。通常,用于处理邮件的case
语句并不是为了在每个用户或每个节点上提供动态行为,而是用于管理具有非常不同内容和用途的电子邮件。