Inviare una notifica quando un cliente si registra su PrestaShop

Spesso può risultare utile sapere quando un nuovo cliente si registra sul tuo e-commerce, ma purtroppo PrestaShop non fornisce questa possibilità. Ma questo non vuol dire assolutamente rinunciare a questa funzionalità!
Ecco una guida che ti indica passo dopo passo come ampliare il tuo e-commerce con questa feature.
- Leggi l'articolo, ti bastano solo 2 minuti, 28 secondi
Sei di fretta? Scarica il PDF e consultalo quando vuoi!
Sommario
1 La logica |
2 La classe AuthController |
3 Creare il template dell'email |
4 Ricostruiamo la cache delle classi |
5 Commenti |
La logica
La prima cosa da fare, è capire qual è il modo migliore. Chi conosce PrestaShop da tempo, ma anche chi lo ha utilizzato solo qualche volta, sa che ogni qualvolta che un cliente si registra, gli viene inviata una email di benvenuto come questa:
Viene da pensare: “Bene, se quando un cliente si registra PrestaShop invia una mail, non bisogna far altro che fargliene inviare un’altra!”. In effetti è così, la soluzione più semplice è comprendere dove viene effettuato l’invio dell’email di benvenuto e provvedere ad inviarne una seconda, questa volta però avente come destinatario l’admin del negozio.
Semplice a dirsi, ma in pratica?
La classe AuthController
La classe che si occupa di gestire la creazione di un nuovo profilo cliente a seguito di una registrazione, è AuthController, che puoi trovare nella cartella di PrestaShop dedicata appunto ad ospitare le classi che fungono da controllers:
controllers/front/AuthController.php
In questa classe, è presente il metodo che fa al nostro caso, vale a dire sendConfirmationMail(), che si occupa di inviare la famosa email di benvenuto discussa in precedenza.
Come sempre, è buona norma non modificare mai direttamente i files del core di PrestaShop, così da conservare l’integrità delle modifiche in caso di aggiornamenti e quindi procediamo utilizzando il comodo e semplice sistema di override su cui PrestaShop si basa: crea un nuovo file chiamato AuthController.php e posizionalo nella cartella:
override/controllers/front/
inserendo al suo interno:
<?php class AuthController extends AuthControllerCore { protected function sendConfirmationMail( Customer $customer ) { if ( ! Configuration::get( 'PS_CUSTOMER_CREATION_EMAIL' ) ) { return true; } Mail::Send( Configuration::get( 'PS_LANG_DEFAULT' ), 'account', Mail::l( 'New client registration!' ), array( '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{passwd}' => Tools::getValue( 'passwd' ) ), Configuration::get( 'PS_SHOP_EMAIL' ), Configuration::get( 'PS_SHOP_NAME' ) ); return Mail::Send( $this->context->language->id, 'account', Mail::l( 'Welcome!' ), array( '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{passwd}' => Tools::getValue( 'passwd' ) ), $customer->email, $customer->firstname . ' ' . $customer->lastname ); } }
Forse qualcuno sarà un po’ confuso, vero? Facciamo un po’ di chiarezza: dando un’occhiata al metodo sendConfirmationMail originale, noterai subito che a parte il codice delle righe 10-22 evidenziate, la funzione è esattamente la stessa!
Sì, è così, in effetti non dobbiamo modificare il comportamento di default, che invia una email di benvenuto ai nuovi clienti, ma estenderne la funzionalità per spedire una seconda notifica email. E per farlo, abbiamo utilizzato lo stesso metodo statico Mail::Send(), leggermente modificato.
Il metodo Mail::Send(), come vedi, utilizza sei parametri:
- $id_lang: il codice ID della lingua desiderata, utile in caso di negozi multilingue. Nell’esempio, utilizziamo la lingua predefinita dell’admin, contenuta nella variabile di configurazione PS_LANG_DEFAULT prelevata per mezzo del metodo Configuration::get() .
- $template: il nome (senza estensione) del file di template delle email che dovrà essere spedito. Nell’esempio, account.
- $subject: l’oggetto dell’email. Nell’esempio, New client registration! (passato alla funzione Mail::l() per rendere la stringa traducibile).
- $template_vars: un array contenente le eventuali variabili da passare al template e che verranno stampate nell’email.
- $to: l’indirizzo che riceverà l’email, che nel nostro caso è ovviamente l’email dell’admin del negozio, contenuto nella variabile di configurazione PS_SHOP_EMAIL prelevata per mezzo del metodo Configuration::get().
- $to_name: il nome del destinatario dell’email. Come per l’indirizzo email, prendiamo il valore dalla variabile di configurazione PS_SHOP_NAME che contiene il nome del negozio.
Il metodo Mail::Send() accetta anche ulteriori parametri, non utili al nostro esempio, ma che consiglio di approfondire. Per prenderne visione, trovi la dichiarazione del metodo nella classe Mail nel file:
classes/Mail.php
Credi sia finita qui? Non ancora, un po’ di pazienza, ci siamo quasi!
Creare il template dell'email
Ovviamente è necessario avere a disposizione un template da utilizzare per generare l’email che viene spedita dal metodo appena creato.
Se non hai particolari necessità, puoi farti recapitare una copia esatta della email di benvenuto che riceve il nuovo cliente. Nell’esempio, infatti, noterai che i due utilizzi della funzione Mail::Send() variano soltanto nell’oggetto (3° parametro) e nell’indirizzo email e nome del destinatario (5° e 6° parametro) e PrestaShop utilizzerà il template account come email da inviare all’admin.
E se invece volessi avere un template dedicato da inviare all’admin come notifica di avvenuta iscrizione di un nuovo utente? Semplice! Ti basta modificare il nome del template (2° parametro) utilizzando ad esempio account_registration_notify e modificare l’array delle variabili utilizzate dal file di template (4° parametro): nel nostro caso, ad esempio, non ci occorre sapere la password dell’utente! Ecco quindi come diventa la nuova funzione:
<?php class AuthController extends AuthControllerCore { protected function sendConfirmationMail( Customer $customer ) { if ( ! Configuration::get( 'PS_CUSTOMER_CREATION_EMAIL' ) ) { return true; } Mail::Send( Configuration::get( 'PS_LANG_DEFAULT' ), 'account_registration_notify', Mail::l( 'New client registration!' ), array( '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email ), Configuration::get( 'PS_SHOP_EMAIL' ), Configuration::get( 'PS_SHOP_NAME' ) ); return Mail::Send( $this->context->language->id, 'account', Mail::l( 'Welcome!' ), array( '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{passwd}' => Tools::getValue( 'passwd' ) ), $customer->email, $customer->firstname . ' ' . $customer->lastname ); } }
Ma un attimo! Non esiste un template con quel nome, è necessario crearlo.
La via più semplice è copiare i files account.html e account.txt presenti nella cartella:
mails/it/
(dove IT è l’identificativo della lingua predefinita utilizzata nell’admin) e rinominare le copie in account_registration_notify.html e account_registration_notify.txt.
Adesso non ti resta che modificare a tuo piacimento i due templates (il file con estensione HMTL è utilizzato per le email appunto in formato html, quello TXT per le email in formato testo), eccone un esempio:
Ricostruiamo la cache delle classi
Tieni sempre a mente che ogni qual volta crei manualmente l’override di una classe di PrestaShop, bisogna far ricostruire la cache delle classi utilizzate. Per farlo, è necessario rimuovere il file:
cache/class_index.php
Ed ecco pronto il tuo nuovo sistema di notifica della registrazione di un nuovo cliente in PrestaShop!
Volevo sapere come si fa in Prestashop ad inviare una email al cliente quando questi cambia la sua password, o qualunque altra informazione, con cui si era era registrato precedentemente. Grazie per l'eventuale supporto.