2017-05-11 256 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