PHP TinyMCE 中的 foreach
PHP foreach in TinyMCE
我有一个从数据库加载的电子邮件 (html) 模板,其中包含 foreach
循环(或者可能是其他一些 PHP 操作),以动态地 load/process API 回复的内容。
$content = html_entity_decode($template); //$template loaded from db
$内容的html
<p style="text-align:center">Hi {name},</p>
<p style="text-align:center">This is header</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Qty</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<?php foreach($response as $item){ ?>
<tr>
<td><img src="<?php echo $item['img']; ?>" atl="<?php echo $item['name']; ?>" /></td>
<td><?php echo $item['name']; ?></td>
<td><?php echo $item['qty']; ?></td>
<td><?php echo $item['price']; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
API
的回应
$response = array(
0 => array(
'name' => 'abc',
'img' => 'linkToImg',
'price'=> '12',
'qty' => 10
),
1 => array(
'name' => 'xyz',
'img' => 'linkToImg',
'price'=> '15',
'qty' => 2
),
);
在发送电子邮件之前,我使用 str_replace('{name}', $name, $content);
替换了令牌,但我不知道如何执行 $ 的 foreach
(或者可能是其他一些 PHP 操作)内容填充 $response 的所有动态数据,然后发送电子邮件。
我的尝试
我也尝试对 $response 使用令牌,但是,如果我需要 $template 的多个设计和 API 的多个响应(用于其他目的的电子邮件),这种方法并不好。例如,在这个模板,我有 Table 用于产品,但在其他模板中我需要 <ul> <li>
和内联 style
用于列出一些功能等
请建议我如何实现这一目标。
PS: 我在前端使用 TinyMCE 设计电子邮件模板并存储在数据库中。
据我了解,您想向电子邮件模板中添加更多 information/data。
解决方案 #1
假设“$content”与您要包含在模板中的消息相同,您可以这样做:
<?php
$content = " Thank You!!!"; // some data
foreach($response as $item){ ?>
<tr>
<td><img src="<?php echo $item['img']; ?>" atl="<?php echo $item['name']; ?>" /></td>
<td><?php echo $item['name']; ?></td>
<td><?php echo $item['qty']; ?></td>
<td><?php echo $item['price']; ?></td>
<td><?php echo $content; ?></td> // just add the variable.
</tr>
<?php } ?>
解决方案 #2:假设 $content 本身是一个数组,那么您可能想使用 :
foreach (array_combine($courses, $sections) as $course => $section)
查看 post 以获取有关多个数组上的 foreach 循环的更多详细信息:Multiple index variables in PHP foreach loop
希望对你有帮助
我找到了解决方案。
简而言之,我需要使用 Output Buffering 例如ob_start();
说明
第 1 步:我将模板存储在 .html
文件中。
第 2 步:在 API 的回复后,输入 ob_start();
第 3 步:使用 include('path/to/file.html')
包含模板
第 4 步:获取缓冲区的输出并作为电子邮件消息发送。
我的代码
//Consider HTML template in question is saved as template.html
//Response from API
$response = array(
0 => array(
'name' => 'abc',
'img' => 'linkToImg',
'price'=> '12',
'qty' => 10
),
1 => array(
'name' => 'xyz',
'img' => 'linkToImg',
'price'=> '15',
'qty' => 2
),
);
ob_start();
include('path/to/template.html');
$message = ob_get_clearn();
//now use $message in sending email
$this->emnail->message($message);
ob_start()
会打开Buffer并保存HTML的输出,执行里面的PHP然后ob_get_clean()
return输出到$message 并清理缓冲区。
好处
通过这种方法,我可以在 sendEmail()
中使用 any html 模板。我只需要设计Email Templates,剩下的事情交给Output Buffer
我有一个从数据库加载的电子邮件 (html) 模板,其中包含 foreach
循环(或者可能是其他一些 PHP 操作),以动态地 load/process API 回复的内容。
$content = html_entity_decode($template); //$template loaded from db
$内容的html
<p style="text-align:center">Hi {name},</p>
<p style="text-align:center">This is header</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Qty</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<?php foreach($response as $item){ ?>
<tr>
<td><img src="<?php echo $item['img']; ?>" atl="<?php echo $item['name']; ?>" /></td>
<td><?php echo $item['name']; ?></td>
<td><?php echo $item['qty']; ?></td>
<td><?php echo $item['price']; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
API
的回应$response = array(
0 => array(
'name' => 'abc',
'img' => 'linkToImg',
'price'=> '12',
'qty' => 10
),
1 => array(
'name' => 'xyz',
'img' => 'linkToImg',
'price'=> '15',
'qty' => 2
),
);
在发送电子邮件之前,我使用 str_replace('{name}', $name, $content);
替换了令牌,但我不知道如何执行 $ 的 foreach
(或者可能是其他一些 PHP 操作)内容填充 $response 的所有动态数据,然后发送电子邮件。
我的尝试
我也尝试对 $response 使用令牌,但是,如果我需要 $template 的多个设计和 API 的多个响应(用于其他目的的电子邮件),这种方法并不好。例如,在这个模板,我有 Table 用于产品,但在其他模板中我需要 <ul> <li>
和内联 style
用于列出一些功能等
请建议我如何实现这一目标。
PS: 我在前端使用 TinyMCE 设计电子邮件模板并存储在数据库中。
据我了解,您想向电子邮件模板中添加更多 information/data。
解决方案 #1 假设“$content”与您要包含在模板中的消息相同,您可以这样做:
<?php
$content = " Thank You!!!"; // some data
foreach($response as $item){ ?>
<tr>
<td><img src="<?php echo $item['img']; ?>" atl="<?php echo $item['name']; ?>" /></td>
<td><?php echo $item['name']; ?></td>
<td><?php echo $item['qty']; ?></td>
<td><?php echo $item['price']; ?></td>
<td><?php echo $content; ?></td> // just add the variable.
</tr>
<?php } ?>
解决方案 #2:假设 $content 本身是一个数组,那么您可能想使用 :
foreach (array_combine($courses, $sections) as $course => $section)
查看 post 以获取有关多个数组上的 foreach 循环的更多详细信息:Multiple index variables in PHP foreach loop 希望对你有帮助
我找到了解决方案。
简而言之,我需要使用 Output Buffering 例如ob_start();
说明
第 1 步:我将模板存储在 .html
文件中。
第 2 步:在 API 的回复后,输入 ob_start();
第 3 步:使用 include('path/to/file.html')
第 4 步:获取缓冲区的输出并作为电子邮件消息发送。
我的代码
//Consider HTML template in question is saved as template.html
//Response from API
$response = array(
0 => array(
'name' => 'abc',
'img' => 'linkToImg',
'price'=> '12',
'qty' => 10
),
1 => array(
'name' => 'xyz',
'img' => 'linkToImg',
'price'=> '15',
'qty' => 2
),
);
ob_start();
include('path/to/template.html');
$message = ob_get_clearn();
//now use $message in sending email
$this->emnail->message($message);
ob_start()
会打开Buffer并保存HTML的输出,执行里面的PHP然后ob_get_clean()
return输出到$message 并清理缓冲区。
好处
通过这种方法,我可以在 sendEmail()
中使用 any html 模板。我只需要设计Email Templates,剩下的事情交给Output Buffer