У меня есть около 50 различных шаблонов электронной почты, текст которых изменяется динамически в зависимости от того, кто является получателем. Вместо того, чтобы создавать разные шаблоны для каждого возможного случая и включать аналогичную логику для десятков различных файлов контроллера, я хочу включить некоторые переключения в каждом шаблоне и применить переменную, определяющую регистр, к каждому письму.
Например, типичный шаблон может выглядеть так:
<? if ($case) { ?>
<p> text variation 1 </p>
<? } else { ?>
<p> text variation 2 </p>
<? } ?>
$case
будет установлен функцией beforeEmail($to_address)
это делает все вычисления для случаев, основанных на электронной почте получателей. Эти расчеты одинаковы для каждого письма. Как я могу получить beforeEmail()
звонить каждый раз при отправке электронного письма? Или точнее, где я должен положить beforeEmail()
функционировать?
Обычно я вставляю этот вид кода в контроллер файлов представления, но у файлов представления электронной почты нет контроллера. Я играл с созданием beforeEmail()
статическая функция где-то и вызывать ее в каждом файле представления, но это просто кажется грязным и неправильным (это оставляет мне вызовы функций внутри файлов представления и дублирующий код в более чем 50 файлах).
Изменить: я также попытался установить $case
переменная в файле макета, но оказывается, что макеты загружаются ПОСЛЕ файла представления электронной почты, поэтому переменные, установленные внутри макета, нельзя использовать в файле представления.
В случае, если у кого-то есть подобная проблема, я заканчивал тем, что модифицировал основной метод send () библиотек CakeEmail. Хотя это и не идеально, это был единственный способ получить желаемое поведение (без повсеместного создания дубликата кода).
Вещи, которые не работают:
-Обратные вызовы / события — класс CakeEmail не предлагает обратных вызовов.
-Создание собственного транспорта — Транспорты называются после электронная почта предоставлена
-Помещение кода в общий файл макета — макеты отображаются после файл представления электронной почты отображается.
Других решений пока нет …