2

casesこの例のように、PHPswitchステートメントで 動的に生成することは可能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

メールを送信するすべてのユーザーに同じ基本的な電子メール「スケルトン」を使用していて、いくつかの値をユーザー固有のもの (ユーザー名、プロファイル情報など) に置き換えるだけでよい場合は、トークンを使用して仕事を成し遂げます。

これら 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)。これらの値は、195 ~ 198 行目の実装でわかるように、Token モジュールがすぐに使用できるデフォルトのメール トークンに追加できますhook_mail

もっと複雑なものが必要な場合 (つまり、電子メールの主要なテキストがユーザーによって異なる場合)、これと同じシステムを引き続き使用できますが、データベースを呼び出して詳細情報を得ることができます。ユーザーごとに異なるメール本文を保存する必要がある場合は、それをユーザーの ID に関連付けられたデータベース テーブルに保存してから、メール関数でそのデータを動的にクエリします。

switchいずれにせよ、PHP のステートメントのレベルで動的な動作を使用する必要はありません。paramsの実装がhook_mail期待する配列を介して、必要な動的な値を渡すことができるはずです。一般に、caseメールを処理するためのステートメントは、ユーザーごとまたはノードごとに動的な動作を提供することを意図したものではなく、内容や用途が大きく異なる電子メールを管理することを目的としています。

于 2011-05-03T04:48:20.420 に答える