2

Cake の (2.3) Email-Class の使い方に少し混乱しています。「テンプレート」、「レイアウト」、「テーマ」を定義できるようですが、私はレイアウト (/app/View/Layouts/Emails にあります) の使用方法しか理解していません。

レイアウトですべてを定義できるようですが、テンプレートが必要なようです (少なくとも空のファイル)。

テーマのコンセプトは、私にはさらに漠然としています。誰かがここでヒントをくれるかもしれません。メーリングリストであまり啓発的ではないディスカッションを見つけました。ドキュメントもこれを明らかにしていません。

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

--
編集: 紛らわしいタイプミスを修正。
Edit2: コンポーネントではなく、CakeEmail が直接使用されます。

4

1 に答える 1

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();
}

app/View/Emails/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>

app/View/Layouts/Emails/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メソッドはテンプレートだけでなく、メール レイアウトにも変数を渡します。

于 2013-07-18T09:20:53.257 に答える