1

我正在使用 CakePHP 1.3 和文档中描述的内置电子邮件功能。我有位于 app/views/elements/email/html/reservation.ctp 的模板的 html 版本,它按预期工作。

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

我也有一个主题设置,并且大多数主题文件都正确地覆盖了默认文件。我的问题是从主题站点调用时未使用主题电子邮件模板,它仍在使用默认路径中的电子邮件模板文件。

默认位于:app/views/elements/email/html/reservation.ctp

主题位于:app/views/themed/myTheme/elements/email/html/reservation.ctp

电子邮件模板分配是否应该自动使用主题而不需要硬编码路径,还是有其他解决方案?其他人有这个问题吗?

4

1 回答 1

0

当你想创建电子邮件模板时,在 cakephp 中。假设我们要创建一个 Html 电子邮件。并配置了电子邮件配置。

视图[文件结构]:

1) 带有变量的内容电子邮件应位于 View/Emails/html [reservation.ctp]
2) 您的模板应位于 View/Layouts/Emails/html [default.ctp 或您制作的任何新模板]

控制器:

注意:有些人认为当你写一个动作(在控制器中)时,你必须为它写一个视图。在这种情况下(用于发送电子邮件)是完全错误的。仅当您想显示发送成功与否的电子邮件的结果时才可以。

让我们说 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)                                      //'me@example.com' => 'My Site'    
            ->to($to)                                          //'you@example.com'
            ->subject($subject) //'Resevation'
            ->send();       
    }

视图(视图/电子邮件/html/reservation.ctp):

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

Welcome to our restaurant .....
于 2013-11-09T10:44:33.563 回答