2013-05-15 23 views
1

我正在使用CakePHP 1.3和內置電子郵件功能,如documentation中所述。我有位於app/views/elements/email/html/reservation.ctp的模板的html版本,並且按預期工作。未使用主題版本的電子郵件模板

$this->Email->template = 'reservation'; // no '.ctp' 

我也有一個主題設置和大多數主題文件正確覆蓋默認文件。我的問題是從主題網站調用主題電子郵件模板時未使用,它仍然使用默認路徑中的電子郵件模板文件。

缺省值是:應用程序/視圖/元素/電子郵件/ HTML/reservation.ctp

的主題是:應用程序/視圖/主題/的MyTheme /元/電子郵件/ HTML/reservation.ctp

電子郵件模板分配應該自動處理主題而不需要硬編碼路徑,或者是否有其他解決方案?任何人都有這個問題?

+1

你是從發送控制器內的電子郵件?如果是這樣,'view'類是否設置爲'Theme'?電子郵件組件將使用與控制器相同的視圖類,*應該*也使用相同的主題:請參閱源代碼[here](https://github.com/cakephp/cakephp/blob/1.3/cake/libs /controller/components/email.php#L455)。請注意:您正在開發一個* new *項目的項目? CakePHP 1.3真的變老了,並且在CakePHP 2.x中也進行了很多改進(主題上也有改進) – thaJeztah

+0

是的,view被設置爲AppController中的主題。我看到了這個問題。我根據AppController的beforeRender函數中的url設置主題。發送電子郵件永遠不會調用beforeRender函數,因此主題從不設置。創建一個新的函數來設置主題,然後我調用beforeRender中的函數或根據需要。感謝您的評論,幫助我澄清了這個問題。 – user167850

+0

要我發表它作爲答案? – thaJeztah

回答

0

在cakephp當你想創建電子郵件模板。讓我們假設我們想創建一個Html郵件。並配置了電子郵件配置。

查看[文件結構]:

1)變量的內容的電子郵件應設在查看/電子郵件/ HTML [reservation.ctp]
2)您的模板應該位於瀏覽/設計/電子郵件/ HTML [default.thtml中或所做的任何新模板]

控制器:

注:一些人,當你寫一個動作(在控制器),你必須爲它編寫一個觀點認爲。在這種情況下(用於發送電子郵件)是完全錯誤的。只有當你想顯示結果哪個郵件發送成功或沒有,那麼很好。

讓說ReserveController)和sendReservationEmail

function sendReservationEmail($to, $from,$subject ,$template, $variables=array()){ 

     $Email = new CakeEmail(); 
     $Email->config('smtp') 
      ->viewVars($variables) 
      ->emailFormat('html') 
      ->template($template['page'], $template['layout']) //'reservation', 'default' 
      ->from($from)          //'[email protected]' => 'My Site'  
      ->to($to)           //'[email protected]' 
      ->subject($subject) //'Resevation' 
      ->send();  
    } 

視圖(查看/電子郵件/ HTML/reservation.ctp):

Dear $this->viewVars['name']; 

Welcome to our restaurant .....