Home>Guide>Inviare una notifica quando un cliente si registra su PrestaShop

Inviare una notifica quando un cliente si registra su PrestaShop


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!
La guida fa riferimento alle versioni 1.6.x di PrestaShop, precedenti rispetto all'attuale v1.7.x.

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!



Ti è piaciuto questo articolo? Regalami un click per ripagarmi dello sforzo



Code4Life ti è stato utile? Sostienici con una donazione!

Dona con PayPal

Hai trovato interessante l’articolo? Allora ti consiglio di leggere:

Disabilitare il Cron di WordPress

Disabilitare il Cron di WordPress


Ecco un piccolo trucchetto per risparmiare risorse, velocizzare il tuo sito e diminuire i tempi di caricamento delle pagine, migliorando ed ottimizzando il servizio Cron di WordPress.

Come ottimizzare e riparare il database di WordPress

Come ottimizzare e riparare il database di WordPress


Scopri come migliorare le performance del tuo sito WordPress ottimizzando il database e riparandone gli eventuali errori.

Oppure cerca tra gli articoli correlati


Qualche dubbio? Ecco le opinioni degli altri utenti

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.

In risposta a DE MARTINO ANTONIO

Buonasera Antonio,
la richiesta non è semplicissima, in quanto molto ampia negli aspetti coinvolti! Le classi da studiare sono Customer.php e Address.php, entrambe nella cartella classes/, in particolare i metodi update(). Suggerirei inoltre di utilizzare l’hook actionObjectUpdateAfter, contenuto nella classe principale ObjectModel.php (da cui derivano le due precedenti), con cui può intercettare l’avvenuto update e gestire l’invio dell’email.

su prestashop 1.7 sembra non si possa fare. C'è un'altra via ?

In risposta a sassa

Ciao sassa!
Anche su PrestaShop 1.7 è possibile; la logica è la stessa, cambiano i files interessati… puoi trovare la funzione sendConfirmationMail() in:
classes/form/CustomerPersister.php
Fai solo attenzione al 3° parametro della funzione Mail::Send() (l’oggetto della mail), in quanto su PrestaShop 1.7 la modalità di utilizzo dei metodi che gestiscono le traduzioni è leggermente diversa, ma dando un’occhiata alla funzione Mail::Send() già presente, il funzionamento è abbastanza intuitivo.

Sto provando in ogni modo su prestashop 1.7.4.3, anche seguendo i consigli girati all'utente SASSA ma proprio non va. Potresti darci una mano?

In risposta a Ivan

Salve Ivan, che problemi stai riscontrando? Fornendo qualche dettaglio in più forse potrebbe essere possibile risolvere il problema

Salve a tutti.
@ Code4Life per favore, potresti spiegare meglio il procedimento per chi usa prestashop 1.7 ?

In risposta a Mario

Ciao Mario, la guida è scritta appositamente per PS1.6
In PrestaShop 1.7, la funzione sendConfirmationMail() è definita nel file:

classes/form/CustomerPersister.php

quindi, analogamente alla v1.6, va effettuato l’override di questa classe anziché di AuthController.php

@ Code4Life
Ciao e grazie per la rapida risposta.
Ho recuperato il file CustomerPersister.php dal percorso /public_html/classes/form/CustomerPersister.php ma al suo interno non trovo alcuna istruzione che lascia capire che gestisca le mail di benvenuto. Non c'è alcuna funzione sendConfirmationMail
Non so se cambia qualcosa specificando che la versione che uso è 1.7.5.2

In risposta a Mario

Salve Mario,
di nulla! Nella classe CustomerPersister, nella versione 1.7.5.2, il metodo sendConfirmationMail() è definito alla riga 205. Provi ad effettuare un download pulito di PS, così da poter verificare e comprendere se magari nella sua installazione è stato erroneamente modificato il file originale relativo a quella classe.
Suggerirei anche l’utilizzo di un buon IDE (come SublimeText, ad esempio), in grado di mappare un progetto e consentirle di effettuare ricerche in esso, così da poter velocizzare eventualmente la ricerca.

E tu cosa ne pensi? Condividi la tua opinione e discutiamone insieme
La tua email non sarà resa pubblico o utilizzata per inviarti spam, te lo prometto

Iscrivimi alla newsletter per ricevere news ed aggiornamenti
Utilizziamo piattaforme di terze parti per l’invio di newsletter. (Informativa sulla privacy)
Tienimi aggiornato su questo articolo
Ricevi una email di notifica quando qualcuno scriverà un commento a questo articolo. (Informativa sulla privacy)
Ricorda i miei dati per la prossima volta che scriverò un commento
Il tuo nome e la tua email verranno salvati in un cookie in questo browser. (Informativa sulla privacy)