Если вы используете один и тот же базовый «скелет» электронной почты для всех пользователей, которых вы отправляете, и вам просто нужно заменить несколько значений, чтобы они были специфичны для пользователя (имя пользователя, информация о профиле и т. Д.), Вы можете простоиспользуйте токены для выполнения работы.
Взгляните на эти две функции, чтобы понять, что я имею в виду (они расположены рядом в одном файле):
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
для работы с почтой предназначены не для обеспечения динамического поведения для каждого пользователя или для каждого узла, а скорее для управления электронными письмами с очень разным содержанием и использованием.