Prestashop 1.5: aggiungere un campo in registrazione cliente

Da JAVA a C# passando per PHP, SQL ed HTML
Rispondi
Avatar utente
dino
Messaggi: 15082
Iscritto il: mercoledì 30 novembre 2011, 18:21

Prestashop 1.5: aggiungere un campo in registrazione cliente

Messaggio da dino »

Ecco come aggiungere un campo personalizzato nella form di registrazione del cliente in Prestashop 1.5. Le modifiche che trovate di seguito elencate vanno prese come riferimento in quanto la vostra installazione potrebbe differire per template utilizzato o per altro (numero di versione minore, ad esempio).

Ci tengo a precisare che con Prestashop 1.5 è possibile usare file di override ma la mia installazione con moduli aggiuntive non me lo ha permesso perché i file da modificare erano criptati. Dunque ho modificato direttamente i file di base (lo svantaggio è che se aggiornate Prestashop dovrete rifare le modifiche).

Attenzione: fare un backup dei file prima di modificarli.

File "themes/NOME_DEL_TEMA/authentication.tpl "

Aggiungere questa linea nel punto dove volete compaia il campo di testo

Codice: Seleziona tutto

<p class="text">
<label for="referralcode">{l s='Referral code'}</label>
<input name="referralcode" type="text" class="text" id="referralcode" />
</p>
Attenzione perché potrebbe essere necessario ripetere lo stesso codice in più sezioni del file (in base al tipo di template).

File "controllers/front/AuthController.php"

Linea 390 (circa), cercare il codice:

Codice: Seleziona tutto

// Preparing customer
$customer = new Customer();
$lastnameAddress = Tools::getValue('lastname');
$firstnameAddress = Tools::getValue('firstname');


Di seguito aggiungere:

Codice: Seleziona tutto

$referralCode = Tools::getValue('referralcode');
Linea 430 (circa), cercare il codice:

Codice: Seleziona tutto

$customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']);
if (!Validate::isBirthDate($customer->birthday))
$this->errors[] = Tools::displayError('Invalid date of birth.');
Di seguito aggiungere:

Codice: Seleziona tutto

$customer->referralcode = $referralCode;
Linea 520 (circa), cercare il codice:

Codice: Seleziona tutto

$customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']);
if (!Validate::isBirthDate($customer->birthday))
$this->errors[] = Tools::displayError('Invalid date of birth');
Di seguito aggiungere:

Codice: Seleziona tutto

$customer->referralcode = $referralCode;
Linea 650 (circa), cercare il codice:

Codice: Seleziona tutto

$this->context->customer = $customer;
$this->context->smarty->assign('confirmation', 1);
$this->context->cookie->id_customer = (int)$customer->id;
Di seguito aggiungere:

Codice: Seleziona tutto

$this->context->cookie->customer_referralcode = $customer->referralcode;

File "class/Customer.php"

Linea 30 (circa), cercare il codice:

Codice: Seleziona tutto

public $id;
Di seguito aggiungere:

Codice: Seleziona tutto

/** @var string Referralcode */
public $referralCode;

Se state utilizzando il file delle traduzioni che si trova nella cartella "themes/NOME_DEL_TEMA/lang" aggiungete le seguenti due righe:

Codice: Seleziona tutto

$_LANG['authentication-create-account_1b4033814553ad8ffb709e3b5cc6ee2c'] = 'INSERIRE_QUI_LA_TRADUZIONE';
$_LANG['authentication_1b4033814553ad8ffb709e3b5cc6ee2c'] = 'INSERIRE_QUI_LA_TRADUZIONE';
Per visualizzare il campo nell'elenco dei clienti all'interno della sezione di amministrazione è necessario modificare il file
"controllers/admin/AdminCustomersController.php"

Linea 143 (circa), cercare il codice:

Codice: Seleziona tutto

  'connect' => array(
  'title' => $this->l('Last visit'),
  'width' => 100,
  'type' => 'datetime',
  'search' => false,
  'havingFilter' => true
  )
);
Sostituirlo con quello seguente:

Codice: Seleziona tutto

  'connect' => array(
  'title' => $this->l('Last visit'),
  'width' => 100,
  'type' => 'datetime',
  'search' => false,
  'havingFilter' => true
  ),
  'referralcode' => array(
  'title' => $this->l('Referral code'),
  'width' => 'auto',
  'search' => true
  )
);

Modificare il database (supponendo che come suffisso delle tabelle sia stato scelto "ps" la tabella alla quale aggiungere il campo è `ps_customer`):

Codice: Seleziona tutto

ALTER TABLE `ps_customer` 
ADD `referralcode` VARCHAR( 100 )
Visto che guide di questo genere non si trovano ne ho creato una versione in inglese.

Come Neller mi ha indicato, ho saltato un passaggio!
in classes/Customer.php
around line 160
public static $definition = array(
...
'passwd' => array('type' => self::TYPE_STRING, 'validate' => 'isPasswd', 'required' => true, 'size' => 32),
Below this line, add this line
'referralcode' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName'),
Grazie a Neller.
_____________________________
Working harder: http://www.dinofratelli.it
Listen House Music: https://www.dinobrosdj.it
Safety online https://omniadpi.it/

Avatar utente
kikkuzza89
Messaggi: 2
Iscritto il: mercoledì 6 marzo 2019, 16:19

Re: Prestashop 1.5: aggiungere un campo in registrazione cliente

Messaggio da kikkuzza89 »

un'ottima guida!
Io vorrei però che questi campi, possano essere visualizzati nella sezione "i miei dati personali" oppure in "dati fatturazione". come posso fare?

Avatar utente
Il nabbo di turno
Messaggi: 4076
Iscritto il: venerdì 30 agosto 2013, 19:52

Re: Prestashop 1.5: aggiungere un campo in registrazione cliente

Messaggio da Il nabbo di turno »

Ahhh, quell'immonda bestia del php...
In medio stat virtus!

Avatar utente
kikkuzza89
Messaggi: 2
Iscritto il: mercoledì 6 marzo 2019, 16:19

Re: Prestashop 1.5: aggiungere un campo in registrazione cliente

Messaggio da kikkuzza89 »

Credo di esserci arrivata da sola.. :cool: Ho fatto un test scrivendo questa parte di codice nel file identity.tpl, ma non essendo molto pratica, vorrei una conferma. :)

Codice: Seleziona tutto

<div class="form-group">
                    <label for="campoDaAggiungere" class="required">
                        {l s='Campo da aggiungere'}
                    </label>
                    <input type="text" class="form-control" id="campoDaAggiungere" name="campoDaAggiungere" value="{if isset($smarty.post.campoDaAggiungere)}{$smarty.post.campoDaAggiungere}{/if}" />
                </div>
Grazie.

Avatar utente
Fottemberg
Messaggi: 18998
Iscritto il: martedì 29 novembre 2011, 22:52

Re: Prestashop 1.5: aggiungere un campo in registrazione cliente

Messaggio da Fottemberg »

Purtroppo Dino non è più frequentatore di questo forum, quindi il nostro esperto di Prestashop non è raggiungibile. Da un punto di vista della sintassi, comunque, mi sembra corretto, e se funziona nella pratica direi che sei a posto. ;)
PC: Lenovo Ideapad Gaming 3 15.6", Ryzen 5 4600H, 2x8GB Crucial Ballistix DDR4-2667, GeForce 1650Ti 4GB, M.2 512GB NVMe Samsung PM991, M.2 512GB NVMe Toshiba RC500, Windows 10 Home
Immagine

Rispondi