PrestaShop电子邮件本地化

时间:2013-01-18 16:05:21

标签: prestashop

我正在为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

作为电子邮件的主题。

我一直在"没有找到主题..."。客户收到的是我在源代码中输入的硬编码字符串。

那么如何摆脱这个错误: enter image description here 此外,电子邮件以明显随机的语言发送(有时是英语,有时是意大利语)。

3 个答案:

答案 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;管理页面。