我正在为PrestaShop 1.5开发模块。
我发送这样的电子邮件(文档真的丢失了,我研究了其他默认组件,这是我到目前为止所做的)
Mail::Send(
$this->context->language->id, //int $id_lang
'template_name',//string $template
//Mail::l('Hello', $this->context->language->id),//string $subject
$this->l('Email subject'),//string $subject
array('{discount}' => $code,
'{firstname}' => $customer['firstname'],
'{lastname}' => $customer['lastname'],
'{img_url}' => $img_url,
'{valid_days}' => $form['days_valid']
),//string $template_vars
$customer['email'],//string $to
implode(' ', array_filter( array( $customer['firstname'], $customer['lastname']) )),
strval( Configuration::get('PS_SHOP_EMAIL') ),//string $from
strval( Configuration::get('PS_SHOP_NAME') ),//string $from_name
/* null,//string $from
null//string $from_name */
null,//array $file_attachment
null,//$mode_smtp
$template_path//string $template_path /*__PS_BASE_URI__.'modules/'.$this->name.'/mails/' */
);
注意我尝试使用
Mail::l('Hello', $this->context->language->id),//string $subject
和
$this->l('Email subject'),//string $subject
作为电子邮件的主题。
我一直在"没有找到主题..."。客户收到的是我在源代码中输入的硬编码字符串。
那么如何摆脱这个错误: 此外,电子邮件以明显随机的语言发送(有时是英语,有时是意大利语)。
答案 0 :(得分:3)
在您的模块中,您必须在subject参数中使用Mail :: l()。 以下是模块的Mail :: Send()示例:
Mail::Send($this->context->language->id,
'test',
Mail::l('test subject', $this->context->language->id),
array(),
$to_email);
此处电子邮件翻译的工作原理如下:
AdminTranslationsController将为模板和“/mails/[lang]/lang.php”中的主题签入“/ modules / [module folder] / mails /”。提交翻译时将创建主题。
如果这不起作用,也许这是文件夹权限的问题。 打开此文件:
/prestashop/mails/it/lang.php
并检查是否有像这样的一行:
$_LANGMAIL['Email subject'] = 'translation in italian';
如果没有,请检查此文件和父文件夹的Web服务器权限。
答案 1 :(得分:2)
我现在遇到了与Prestashop版本1.5.5.0一样的问题。
在某些情况下,getSubjectMail()方法无法识别电子邮件模板,因此无法与主题匹配。重点是,虽然这个方法寻找要翻译的主题,但它将php文件解析为纯文本。因此,所有变量都是未解析的。
在我的情况下,我正在调用Mail:发送模块的控制器,它看起来像:
Mail::Send(
$id_lang,
$template, // <- don't use variable here, rather type email template there directly.
Mail::l('Message from footer contact form'),
$template_vars,
$contact->email,
$contact->name,
($is_email ? $from : Configuration::get('PS_SHOP_EMAIL')),
'',
null, // file attachment
null, // mode smtp
$this->module->_mailpath
);
解析此文件会导致主题来自页脚联系表单的消息与邮件模板“ $ template ”匹配。这显然不存在。
要确保正确识别您的主题,请不要使用变量来传递模板名称。
答案 2 :(得分:1)
Presta中的电子邮件模板(而不仅仅是它们)完全凌乱。自从我安装了自定义主题后,我现在将它们放在6(!!)个不同的位置。
这不会是一个麻烦,但似乎与我一样困惑。它从一个位置获取模板进行编辑,将它们依次保存到另一个位置,并在实际创建邮件时从第三个位置(对于模块)获取它们。
因此,我可以编辑一次模板,但保存后,它似乎已恢复,因为它实际上已保存到另一个位置。
所以我做的是:我从默认主题文件夹中删除了模块的模板(&#34; mailalerts&#34;)(文件夹&#39;邮件&#39;和模块/ mailalerts /邮件&#39;)和我的自定义主题。
如果您这样做 - 只需在删除之前保留一份副本,因为您可能会丢失已经在那里制作的一些翻译。
决定您想要保留它们的唯一一个位置(对我而言,它是原始邮件&#39; resp&#39;文件夹&#39;文件夹)并稍后再编辑它们一个地方。对于此处提到的位置,您可以选择&#34; Core&#34;来自&#34; Translations&#34;管理页面。