Pagina 1 di 1

Prestashop 1.5: aggiungere un campo in registrazione cliente

Inviato: lunedì 13 maggio 2013, 16:02
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.

Re: Prestashop 1.5: aggiungere un campo in registrazione cliente

Inviato: mercoledì 6 marzo 2019, 16:22
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?

Re: Prestashop 1.5: aggiungere un campo in registrazione cliente

Inviato: mercoledì 6 marzo 2019, 17:40
da Il nabbo di turno
Ahhh, quell'immonda bestia del php...

Re: Prestashop 1.5: aggiungere un campo in registrazione cliente

Inviato: mercoledì 6 marzo 2019, 21:51
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.

Re: Prestashop 1.5: aggiungere un campo in registrazione cliente

Inviato: sabato 9 marzo 2019, 12:47
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. ;)