邮件:发送自定义模块和电子邮件模板

Ent*_*thu 1 php prestashop-1.6

我目前正在创建一个模块,以在hookActionProductCancel上执行一组代码。模块运行良好,我想在执行后发送一封电子邮件。

$template_path = $this->local_path . 'mails/';

Mail::Send((int)(Configuration::get('PS_LANG_DEFAULT')),
 'xxx', //need to change the template directory to point to custom module
 'Subject',
 array(
   '{aaa}' => $bbb,
   '{bbb}' => $ccc,
   '{ccc}' => $ddd,
   '{ddd}' => $eee
 ),
 $to,
 null, null, null);
Run Code Online (Sandbox Code Playgroud)

我已经创建了模板并将文件放置如下:

  1. ../mails/zh-CN/xxx.html
  2. ../mails/en/xxx.txt

虽然我了解上述电子邮件模板的默认导航,但如何使用放置在自定义模块目录中的模板?

我创建了一个目录-../modules/custommodule/mails/并放置了两个文件,但指向它均不成功。

任何指导表示赞赏。谢谢。

The*_*rot 5

您可以在Mail :: Send()中指定模板路径。

您会看到第11个参数是,$template_path因此只需指定即可(如果您要从主模块类调用send方法,则可以使用$this->local_path . 'mails/')。该$template_path参数必须是服务器文件路径而不是URI,因为该方法用于file_exists()检查模板是否存在。方法将从您的模块路径中提取出它实际上是一个自定义模块模板。

现在,该方法将首先检查您是否有邮件模板

themes/shop_theme/modules/mymodule/mails/iso_lang/xxx.html

然后在

modules/mymodule/mails/iso_lang/xxx.html

并加载找到的第一个模板。txt文件也是如此。

编辑:

如何正确执行方法:

Mail::Send(
    (int)(Configuration::get('PS_LANG_DEFAULT')),
    'xxx', //need to change the template directory to point to custom module
    'Subject',
    array(
       '{aaa}' => $bbb,
       '{bbb}' => $ccc,
       '{ccc}' => $ddd,
       '{ddd}' => $eee
    ),
    $to,
    null, 
    null, 
    null,
    null,
    null,
    $this->local_path . 'mails/' // 11th parameter is template path
)
Run Code Online (Sandbox Code Playgroud)