Локализация электронной почты 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

в качестве темы письма.

И я продолжаю получать "Тема не найдена для...". Клиент получает жестко закодированную строку, которую я поместил в исходный код.

Итак, как избавиться от этой ошибки: введите описание изображения здесьКроме того, электронные письма отправляются на случайном языке (иногда английский, иногда итальянский).


person max4ever    schedule 18.01.2013    source источник


Ответы (3)


В вашем модуле вы должны использовать Mail::l() в параметре subject. Вот пример Mail::Send() для модуля:

Mail::Send($this->context->language->id,
    'test',
    Mail::l('test subject', $this->context->language->id),
    array(),
    $to_email);

Вот как работает перевод электронной почты:

AdminTranslationsController проверит "/modules/[папка модуля]/mails/" для шаблонов и "/mails/[lang]/lang.php" для тем. Темы будут созданы при отправке переводов.


Если это не работает, возможно, это проблема с правами на папку. Откройте этот файл:

/prestashop/mails/it/lang.php

И проверьте, есть ли такая строка:

$_LANGMAIL['Email subject'] = 'translation in italian';

Если нет, проверьте права веб-сервера на этот файл и родительские папки.

person SJousse    schedule 18.01.2013
comment
но мне нужно, чтобы это делалось автоматически при установке компонента и таким образом, чтобы он не удалялся, если пользователь изменит какую-либо метку - person max4ever; 21.01.2013
comment
это делается автоматически, если вы используете Mail::l('Email subject', $this->context->language->id) в параметре темы Mail::Send. - person SJousse; 21.01.2013
comment
я расширяю модуль, а вы говорите о контроллерах, что-то не так - person max4ever; 22.01.2013
comment
Я просто говорю об AdminTranslationsController, который управляет переводами, чтобы объяснить, как выполняется его работа. Для вашего модуля достаточно прочитать 1-й абзац. - person SJousse; 22.01.2013

Теперь я столкнулся с той же проблемой, работая с Prestashop версии 1.5.5.0.

В некоторых случаях метод getSubjectMail() не распознает шаблон электронной почты, поэтому его нельзя сопоставить с темой. Все дело в том, что пока этот метод ищет темы для перевода, он анализирует php-файлы как обычный текст. Поэтому все переменные анализируются неразрешенными.

В моем случае я вызываю Mail:Send из контроллера модуля, и это выглядит так:

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". Которого явно не существует.

Чтобы убедиться, что ваша тема будет распознана правильно, не используйте переменную для передачи имени шаблона.

person Michael Kubovic    schedule 23.10.2013
comment
Главное не использовать переменную!! Удивительно плохой дизайн от PrestaShop и непонятные ограничения. - person mcdado; 22.09.2016

Шаблоны писем (и не только они) в Presta совершенно беспорядочны. Поскольку я установил пользовательскую тему, они теперь у меня в 6 (!!) разных местах.

Не было бы такой беды, но, похоже, заморачивается так же, как и я. Он берет шаблоны из одного места для их редактирования, сохраняет их, в свою очередь, в другом месте и берет их из третьего места (для модуля) при фактическом создании почты.

В результате я смог один раз отредактировать шаблон, но после его сохранения он оказался восстановленным, потому что на самом деле он был сохранен в другом месте.

Итак, что я сделал: я удалил шаблоны для модуля («mailalerts») из папки темы по умолчанию (как папки «mails», так и «modules/mailalerts/mails») и из моей пользовательской темы.

Если вы это сделаете, просто сохраните копию, прежде чем удалять их, потому что вы, вероятно, потеряете некоторые из уже сделанных вами переводов.

Выберите одно и только одно место, где вы хотите их хранить (для меня это были исходные папки «почта» или «модули»), и отредактируйте их позже только из этого одного места. Для упомянутых здесь местоположений вы выбираете опцию «Основное» в раскрывающемся списке на странице администрирования «Переводы».

person imagiro    schedule 17.05.2014