2013-01-18 19 views
6

Sto sviluppando un modulo per PrestaShop 1.5.Localizzazione email PrestaShop

io mando email come questo (la documentazione è in realtà manca, ho studiato altri componenti di default e questo è quello che ho ottenuto finora)

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

        ); 

Nota Ho provato ad utilizzare

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

e

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

come oggetto dell'email.

E continuo a ricevere "Nessun oggetto trovato per ...". Ciò che il cliente riceve è la stringa hardcoded che ho inserito nel codice sorgente.

Così come per sbarazzarsi di questo errore: enter image description here Inoltre le email vengono inviate in un linguaggio apparentemente casuale (a volte inglese, a volte italiana).

risposta

3

Nel modulo, è necessario utilizzare Mail :: l() nel parametro subject. Ecco un esempio di Mail :: Send() per un modulo:

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

Ecco come traduzioni e-mail sta lavorando:

AdminTranslationsController controllerà in "[cartella del modulo]/modules// mail/"per i modelli e in" /mails/[lang]/lang.php "per i soggetti. I soggetti verranno creati durante l'invio di traduzioni.


Se questo non funziona, forse è un problema con i diritti della cartella. Aprire questo file:

/prestashop/mails/it/lang.php

e verificare se c'è una linea come questa:

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

caso contrario, controllare i diritti di server web in questa cartelle di file e genitore.

+0

ma ho bisogno di farlo automaticamente dopo l'installazione del componente e in modo che non venga eliminato se l'utente modifica l'etichetta – max4ever

+0

automaticamente se si utilizza 'Mail :: l ('Oggetto di posta elettronica', $ this- > context-> language-> id) 'nel parametro subject di Mail :: Send. – SJousse

+0

sto estendendo il modulo e stai parlando di controller, qualcosa non va bene – max4ever

2

Ora ho riscontrato lo stesso problema con la versione 1.5.5.0 di Prestashop.

In alcune circostanze, il metodo getSubjectMail() non riconosce il modello di email, quindi non può essere abbinato all'oggetto. Il punto è che mentre questo metodo cerca i soggetti da tradurre, analizza i file php come testo normale. Pertanto tutte le variabili vengono analizzate non risolte.

Nel mio caso, sto chiamando Mail: Invia dal regolatore del modulo e sembra:

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

L'analisi di questo file si tradurrebbe in corrispondenza soggetto Messaggio del modulo di contatto piè al modello di posta "Modello $". Che non esiste ovviamente.

Per assicurarsi che il soggetto venga riconosciuto correttamente, non utilizzare la variabile per passare il nome del modello.

+0

La chiave è di non usare una variabile !! Design incredibilmente pessimo da PrestaShop e oscura limitazione. – mcdado

1

I modelli di posta elettronica (e non solo) sono totalmente disordinati in Presta. Da quando ho installato un tema personalizzato li ho ora in 6 (!!) diverse posizioni.

Non sarebbe un problema, ma sembra che sia confuso come me. Prende i modelli da una posizione per modificarli, li salva a sua volta in un'altra posizione e li prende da una terza posizione (per un modulo) quando crea effettivamente la posta.

Come risultato, sono stato in grado di modificare un modello una volta, ma dopo averlo salvato, è sembrato essere ripristinato, perché è stato effettivamente salvato in un'altra posizione.

Quindi quello che ho fatto è: ho rimosso i modelli per il modulo ("mailalerts") dalla cartella tema predefinita (sia cartella 'mails' e 'moduli/mailalerts/mails) sia dal mio tema personalizzato.

In tal caso, è sufficiente conservare una copia prima di eliminarli, perché probabilmente si perdono alcune delle traduzioni già effettuate.

Decidere per una sola posizione in cui si desidera conservarle (per me erano le cartelle di posta "originali" e "moduli") e modificarle successivamente solo da questa posizione. Per le località menzionate qui scegli l'opzione "Core" dal menu a discesa sulla pagina di amministrazione "Traduzioni".