2015-10-26 10 views
1

Представьте этот сценарий, я таблица под названием «message_templates» со следующей структурой: -
Заменять переменные в электронной почте шаблон тела из базы данных по конкретной информации в CakePHP

id 
subject 
body 

где значение тела : -

<p>ID: ${PROJECT_ID} </p> 
<p>Project's Title: ${PROJECT_TITLE} </p> 

Каков наилучший способ заменить тезисы переменных в CakePHP - я это знаю, CakeEmail имеет параметр конфигурации под названием «шаблон», но его не так, потому что мой шаблон (корпус колонка) приходит из базы данных. Может быть, использовать preg_replace или sprintf перед отправкой?

Кто-нибудь может мне помочь?

+0

preg_replace/str_replace, вероятно, лучший способ сделать это. –

ответ

3

Вам просто нужно использовать str_replace и обеспечивать множество маркеров и массив замен: -

$body = str_replace(
    [ 
     '${PROJECT_ID}', 
     '${PROJECT_TITLE}' 
    ], 
    [ 
     '1', 
     'Foo bar' 
    ], 
    $data['MessageTemplate']['body'] 
); 

Вы можете затем передать $body в CakeEmail и отправить по электронной почте в обычном режиме.

+0

Хорошо. Я попробую. Но иногда у меня не будет всех токенов. Мне нужно проверить, присутствует ли токен в сообщении тела или str_replace, не заботятся об этом? –

+0

Если токен отсутствует в сообщении тела, он просто пропустит его без проблем. Я использую подобный подход для сайта, который я разрабатывал, чтобы позволить клиенту редактировать содержимое писем, отправленных системой, с помощью токенов для информации о клиенте. Он отлично работает. – drmonkeyninja

+1

Ваше решение работает как шарм. ТКС. –

Смежные вопросы