2013-07-18 44 views
2

我使用Cake的(2.3)電子郵件類有點困惑。看起來我們能夠定義「模板」,「佈局」和「主題」,而我只理解佈局(位於/ app/View/Layouts/Emails)中的用法。什麼是CakePHP電子郵件組件中的「模板」?

似乎一切都可以在佈局中定義,但模板似乎是必要的(至少是一個空文件),但我不明白的上下文,因爲對我來說似乎並不重要,我把在那裏。

主題的概念更是模糊的我。也許有人可以在這裏給我一個提示。我在一個郵件列表中發現了一個討論,這個郵件列表並不真實。文檔也沒有透露這一點。

http://book.cakephp.org/2.0/en/core-utility-libraries/email.html

-
編輯:固定混亂錯字。
Edit2:CakeEmail直接使用 - 不是組件。

+1

不要使用Email-Component,直接使用CakeEmail更好。不,模板/佈局不是必需的。您也可以發送無模板電子郵件。 – mark

+0

Uups ...我的錯誤使用CakeEmail類 - 將更新。 –

回答

3

模板視圖(普通頁面而言) 佈局電子郵件作爲佈局視圖(普通頁面的條款)

佈局中應包含的標誌和等

你一些共同的要素可以將數據推送到模板像推送數據從控制器以查看

請檢查下面的例子:

從定製EmailComponent

public function restore_password($user_to_send_restore_link) { 
    $email = new CakeEmail('default'); 
    $email->emailFormat('both'); 
    $email->template('restore_password', 'emaillayout'); 

    $email->to(array($user_to_send_restore_link['User']['email'])); 
    $email->from(array(GENERAL_FROM_EMAIL => 'seqrd support team')); 
    $subject = 'Restore password link'; 
    $email->subject($subject); 

    $email_data = array(
     'hash' => $user_to_send_restore_link['User']['hash']); 
    $email->viewVars($email_data); 

    return $email->send(); 
} 

應用程序/查看/電子郵件/ HTML/restore_password.ctp

<p> Please, follow link <?php echo $this->Html->link('restore password link', Router::url(array('controller' => 'users', 'action' => 'restore_password_form', $hash), true)); ?> to restore password</p> 

應用程序/瀏覽/設計/電子郵件/ HTML/emaillayout.ctp

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
<html> 
<head> 
    <title><?php echo $title_for_layout;?></title> 
</head> 
<body> 
    <?php echo $this->fetch('content');?> 

</body> 
</html> 

主題是抽象的下一步,那麼您可以快速更改所有電子郵件的整個樣式,但不能顯着更改代碼。

注:viewVars方法傳遞變量不僅爲模板,但在電子郵件的佈局了。

+0

感謝您的快速響應。但是你現在在哪裏使用你的$ email_data?所以這個過程似乎是'將ViewVarS模板傳遞給模板',然後將模板傳遞給佈局(但是在哪裏定義$ content_for_layout?)。它是否正確? ViewVars是否傳遞給模板和佈局? –

+1

我通過='$ email-> viewVars($ email_data);'$ content_for_layout傳遞變量它是舊版本cakephp約定。現在看來應該使用'echo $ this-> fetch('content');'see here:'app/View/Layouts/Emails/html/default.ctp',但$ content_for_layout仍然有效。是的,viewVars也將參數傳遞給電子郵件佈局。將在幾分鐘內更新答案 – Vadim

+0

K - 再次感謝您的澄清。但現在風格在哪裏發揮作用? –