2017-05-11 164 views
0

我正在寻找一种方法来创建一个将数据推送到电子邮件模板的好系统。创建动态电子邮件模板

我有DATAS一个数组(这取决于在电子邮件区域数量数据更数),以及一个简单的HTML邮件模板:

DATAS:

$mailDatas = array("mail title", "mail body", "mail footer"); 

和一个非常一个什么样的模板应该看起来简单的例子:

<div id="mail-container"> 
    <div id="mail-header">{data}</div> 

    <img id="some design elements"> 


    <div id="mail-body">{data}</div> 

    <div id="mail-footer">{data}</div> 
</div> 

我需要的是我的阵列的第一数据替换第一个{data}(这是一个字符串),第二个{data}$mailDatas[1]

这样做的最佳方法是什么?我正在构建一个使用模板生成邮件正文的函数。

回答

0

你需要运行一个foreach和里面,你需要用的maildatas可变

像这样

foreach ($maildatas as $maildata) { ?> 
    <div id="mail-body"><?= $maildata; ?></div> 
<?php } ?> 
+0

不,我希望从我的数据阵列 –

+0

替换每个{}数据与行非环路将在阵列上运行从数据库返回您查询后, .. HTML创建逻辑将不会改变..只是现在阵列将具有来自数据库的动态内容 –

1

您可以使用CakePHP创建HTML内置的电子邮件库。您可以声明模板,声明视图并将变量传递给它。

例如,你可以把你的模板中的src /模板/布局/电子邮件/ HTML/default.thtml中,你将src /模板/电子邮件视图/ HTML/welcome.ctp,然后调用:

$email = new Email(); 
$email 
    ->emailFormat('Html') 
    ->template('welcome','default') 
    ->to('[email protected]') 
    ->viewVars($arrayOfVariables); 
$email->send(); 

查看瓦尔正在完全按照“正常”的观点,因此,如果你声明你的阵列,如:

$arrayOfVariables = ['varOne' => 'some text', 'varTwo' => 'other text']; 

您可以使用它,鉴于这样的:

<span><?= $varOne ?></span> 

欲了解更多信息,请阅读文档:https://book.cakephp.org/3.0/en/core-libraries/email.html

+0

这就是想法,但我不想用我的变量的键,只有多个{数据}。但我用preg_replace_callback发现了一个解决方案:) –

+0

@ThomasRbt根据外部输入声音的顺序,就像一个非常容易出错的解决方案。 – ndm