Использовать динамическую генерацию электронной почты в hook_mail () - PullRequest
2 голосов
/ 03 мая 2011

Можно ли динамически генерировать 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;
    }
  }
}

1 Ответ

2 голосов
/ 03 мая 2011

Если вы используете один и тот же базовый «скелет» электронной почты для всех пользователей, которых вы отправляете, и вам просто нужно заменить несколько значений, чтобы они были специфичны для пользователя (имя пользователя, информация о профиле и т. Д.), Вы можете простоиспользуйте токены для выполнения работы.

Взгляните на эти две функции, чтобы понять, что я имею в виду (они расположены рядом в одном файле):

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.

Если вам нужно что-тоболее сложный (т. е. основной текст вашей электронной почты зависит от пользователя), вы все равно можете использовать эту же систему, но делать вызовы в базу данных для получения дополнительной информации.Если вам нужно сохранить другое тело письма для каждого пользователя, сохраните его в таблице базы данных, связанной с идентификатором пользователя, а затем в функциях вашей почты динамически запрашивайте эти данные.

В любом случае вам не нужно иметьиспользовать любое динамическое поведение на уровне оператора PHP switch;вы должны иметь возможность передавать любые динамические значения, которые вам нужны, через массив params, которого ожидает ваша реализация hook_mail.В общем, операторы case для работы с почтой предназначены не для обеспечения динамического поведения для каждого пользователя или для каждого узла, а скорее для управления электронными письмами с очень разным содержанием и использованием.

...