Salve, scrivo questa guida in quanto non ho trovato molto sul web e spero sia utile. E' necessaria un minimo di conoscenza con db mysql e classi php.
File da modificare:
FRONT-END
- themes/NOME_TEMA/autentication.tpl
- controllers/front/AuthController.php
- classes/Customer.php
ADMIN
- controllers/admin/AdminCustomersController.php
STEP 1 – Aggiunta del campo al front end
Inserire dove si desidera un campo di input nel file themes/NOME_TEMA/autentication.tpl
Esempio:
<p class="required text"><input name="vistisu" type="text" id="vistisu" /><label for="vistisu">{l s='Come ci hai conosciuti?'}</label></p>
STEP 2 – modifica del controller che esegue la registrazione dell’utente
Nel file controllers/front/AuthController.php trovare la funzione:
protected function processSubmitLogin()
E inserire dopo :
$customer = new Customer();
questo codice:
$_POST['vistisu'] =Tools::getValue(‘vistisu’);
Spiegazione:
la funzione processSubmitLogin() crea un utente durante la registrazione, (ricordo che ci sono 2 modi per registrarsi un prestashop: tramite registrazione semplice o durante il checkout).
L’oggetto $customer una volta inizializzato dovrà ricevere il parametro del campo che abbiamo creato. Inizializzando una variabile in $_POST attraverso la classe statica Tools con getValue(‘nome_campo_creato’) andiamo a prendere il testo che è stato scritto nell’input box con lo stesso name passato.
Ora inseriamo il campo anche per la funzione che crea l’account durante il checkout:
troviamo la funzione protected function processSubmitAccount()
e inseriamo
$customer->vistisu = $_POST[‘vistisu’];
All’interno dell’istruzione:
if (!count($this->errors))
Spiegazione:
la funzione crea un account durante la fase di checkout. L’istruzione if(!count($this->errors)) verifica che non ci siano errori prima di eseguire la creazione ($customer->add()). L’istruzione che abbiamo inserito andrà a popolare una variabile pubblica della classe customers in modo da registrarla all’interno del database.
STEP 3 – Creazione del campo nel DB
Eseguiamo questa SQL direttamente dal nostro database:
ALTER TABLE `PREFISSO_TBL_customer` ADD `vistisu` VARCHAR( 256 )
Sostituiamo PREFISSO_TBL con il prefisso della nostra tabella e assicuriamoci che il campo creato di default sia NULL.
STEP 4 – Creiamo la variabile ‘vistisu’ nella classe Customer
Apriamo il file classes/Customer.php e inseriamo subito dopo l’apertura della classe:
public $vistisu;
poi troviamo la variabile statica: public static $definition = array(….
E aggiungiamogli:
'foundus' => array('type' => self::TYPE_STRING, 'validate' => 'isString', 'size' => 256),
nella posizione esatta dove si trova il campo vistisu che abbiamo creato prima nella tabella (solitamente ultima posizione). Avremo qualcosa del genere:
….
'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false),
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false),
'vistisu' => array('type' => self::TYPE_STRING, 'validate' => 'isString', 'size' => 256),
),
);
Spiegazione:
Aggiungiamo la variabile $vistisu alla classe customers per far si che prenda il valore che inseriamo nell’input di testo da front-end. L’inserimento della stringa nella variabile statica $definition ci permette di andare a scrivere nel DB attraverso una funzione SQL di prestashop. TYPE_STRING indica che è una stringa, ‘isString’ è un controllo per verificare che il contenuto del campo input che abbiamo creato sia una stringa e size=> indica la lunghezza massima che abbiamo definito al campo vistisu nel DB.
ULTIMO STEP – Creazione campo nel back end sezione “Clienti”
Apriamo il file: Controllers/admin/AdminCustomersController.php
Cerchiamo
$this->fields_list = array(…
Aggiungiamo:
‘vistisu’ => array(
'title' => $this->l('Come ci conosce?'),
'width' => 70,
),
Appena dopo una qualsiasi chiusura ), del campo.
In questo modo nella tab clienti dell’admin ci apparira la classica tabella con tutti i nomi degli utenti registrati e la colonna “Come ci conosce?” nella posizione dove l’abbiamo inserita.
Più o meno è quello che ho fatto io.