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