2013-01-18 19 views
6

Ich entwickle ein Modul für PrestaShop 1.5.PrestaShop Email Lokalisierung

ich E-Mail wie folgt schicke (die Dokumentation wirklich fehlt, ich studierte andere Standardkomponenten und das ist, was ich so weit gekommen)

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/' */ 

        ); 

Hinweis habe ich versucht,

Mail::l('Hello', $this->context->language->id),//string $subject 

mit und

$this->l('Email subject'),//string $subject 

als Betreff der E-Mail.

Und ich bekomme immer "Kein Betreff wurde gefunden für ...". Was der Kunde erhält, ist die fest codierte Zeichenfolge, die ich in den Quellcode eingegeben habe.

So wie dieser Fehler loszuwerden: enter image description here Plus die E-Mails werden in scheinbar zufälligen Sprache (manchmal Englisch, manchmal italienisch) gesendet.

Antwort

3

In Ihrem Modul müssen Sie Mail :: l() im Betreff-Parameter verwenden. Hier ist ein Beispiel für Mail :: Send() für ein Modul:

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

Hier wie E-Mail-Übersetzungen arbeitet:

AdminTranslationsController prüft in „/ modules/[Modulordner]/Mails/"für die Vorlagen und in /mails/[lang]/lang.php" für Themen. Themen werden erstellt, wenn Übersetzungen eingereicht werden.


Wenn das nicht funktioniert, ist es vielleicht ein Problem mit den Rechten des Ordners. diese Datei öffnen:

/prestashop/mails/it/lang.php

Und überprüfen, ob es wie diese eine Zeile ist:

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

Wenn nicht, Web-Server Rechte auf diese Datei und übergeordneten Ordner überprüfen.

+0

aber ich brauche dies automatisch bei der Installation von Komponenten und in einer Weise, dass es nicht gelöscht wird, wenn der Benutzer einige Label ändern – max4ever

+0

ist es automatisch getan, wenn Sie 'Mail :: l ('Email subject', $ this- > context-> language-> id) 'im Subject-Parameter von Mail :: Send. – SJousse

+0

Ich erweitere Modul und Sie sprechen über Controller, etwas ist nicht richtig – max4ever

2

Ich bin jetzt über das gleiche Problem mit Prestashop Version 1.5.5.0 gekommen.

In einigen Fällen erkennt die Methode getSubjectMail() die E-Mail-Vorlage nicht, sodass sie nicht mit dem Betreff abgeglichen werden kann. Der springende Punkt ist, dass, während diese Methode nach zu übersetzenden Themen sucht, php-Dateien als reiner Text analysiert werden. Daher werden alle Variablen nicht aufgelöst analysiert.

In meinem Fall, ich bin Mail-Aufruf: Schicken Sie von der Steuerung Modul und es sieht so aus:

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

diese Datei Parsing in passendem Thema Nachricht Fußzeile Kontaktformular an die Mail-Schablone führen würde "$ Vorlage". Was nicht offensichtlich existiert.

Um sicherzustellen, dass Ihr Betreff korrekt erkannt wird, verwenden Sie keine Variable, um den Vorlagennamen zu übergeben.

+0

Der Schlüssel ist, keine Variable zu verwenden !! Unglaublich schlechtes Design von PrestaShop und obskure Limitierung. – mcdado

1

Die E-Mail-Vorlagen (und nicht nur sie) sind in Presta total unordentlich. Da ich ein benutzerdefiniertes Thema installiert habe, habe ich sie jetzt in 6 (!!) verschiedenen Orten.

Wäre nicht so ein Problem, aber es scheint, dass das gleiche verwirrt wie ich es getan habe. Er nimmt die Vorlagen von einem Ort zum Bearbeiten, speichert sie nacheinander an einem anderen Ort und nimmt sie von einem dritten Ort (für ein Modul), wenn sie tatsächlich die Mail erstellt.

Als Ergebnis konnte ich eine Vorlage einmal bearbeiten, aber nach dem Speichern schien es zurückgesetzt, da es tatsächlich an einem anderen Speicherort gespeichert wurde.

Also was ich getan habe ist: Ich habe die Vorlagen für das Modul ("Mailalerts") aus dem Standard-Design-Ordner (Ordner "Mails" und "Module/Mailalerts/Mails") und von meinem benutzerdefinierten Thema entfernt.

Wenn Sie dies tun - behalten Sie eine Kopie, bevor Sie sie löschen, weil Sie wahrscheinlich einige der Übersetzungen verlieren werden, die Sie dort bereits gemacht haben.

Entscheiden Sie sich für einen und nur einen Ort, an dem Sie sie behalten möchten (für mich waren es die originalen 'Mails' bzw. 'Modulordner') und bearbeiten Sie diese später nur von diesem einen Ort aus. Für die hier genannten Orte wählen Sie im Drop-down auf der Admin-Seite "Übersetzungen" die Option "Core".