6

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

メールの件名として。

そして、「...の件名が見つかりませんでした」というメッセージが表示され続けます。お客様が受け取るのは、私がソース コードに入れたハードコードされた文字列です。

このエラーを取り除く方法: ここに画像の説明を入力 さらに、メールは明らかにランダムな言語 (英語の場合もあればイタリア語の場合もあります) で送信されます。

4

3 に答える 3

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は、テンプレートの場合は「/ modules/[モジュールフォルダー]/mails /」をチェックインし、件名の場合は「/mails/[lang]/lang.php」をチェックインします。主題は、翻訳を提出するときに作成されます。


それがうまくいかない場合は、フォルダの権限に問題がある可能性があります。このファイルを開きます:

/prestashop/mails/it/lang.php

そして、このような行があるかどうかを確認してください:

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

そうでない場合は、このファイルと親フォルダーに対するWebサーバーの権限を確認してください。

于 2013-01-18T18:47:30.223 に答える
2

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
);

このファイルを解析すると、一致する件名Message from footer contact formがメール テンプレート " $template " になります。これは明らかに存在しません。

サブジェクトが正しく認識されるようにするには、変数を使用してテンプレート名を渡さないでください。

于 2013-10-23T13:45:46.957 に答える
1

Presta では、電子メール テンプレート (およびそれらだけでなく) が完全に乱雑です。カスタム テーマをインストールしたので、現在 6 つ (!!) の異なる場所にあります。

たいした問題ではないのですが、私と同じように混乱してしまうようです。ある場所からテンプレートを取得して編集し、別の場所に保存し、実際にメールを作成するときに 3 番目の場所 (モジュール用) から取得します。

その結果、テンプレートを一度編集できましたが、実際には別の場所に保存されていたため、保存後に元に戻されたように見えました。

だから私がしたことは次のとおりです。モジュール(「mailalerts」)のテンプレートをデフォルトのテーマフォルダー(フォルダー「mails」と「modules/mailalerts/mails」の両方)とカスタムテーマから削除しました。

その場合は、削除する前にコピーを保管しておいてください。すでに行った翻訳の一部が失われる可能性があるためです。

それらを保持する場所を 1 つだけ決定し (私にとっては、元の「メール」フォルダーと「モジュール」フォルダーでした)、後でこの 1 つの場所からのみ編集します。ここに記載されている場所については、「翻訳」管理ページのドロップダウンからオプション「コア」を選択します。

于 2014-05-17T15:48:35.823 に答える