Prestashop 1.5: aggiungere un campo in registrazione cliente
Inviato: lunedì 13 maggio 2013, 16:02
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
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:
Di seguito aggiungere:
Linea 430 (circa), cercare il codice:
Di seguito aggiungere:
Linea 520 (circa), cercare il codice:
Di seguito aggiungere:
Linea 650 (circa), cercare il codice:
Di seguito aggiungere:
File "class/Customer.php"
Linea 30 (circa), cercare il codice:
Di seguito aggiungere:
Se state utilizzando il file delle traduzioni che si trova nella cartella "themes/NOME_DEL_TEMA/lang" aggiungete le seguenti due righe:
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:
Sostituirlo con quello seguente:
Modificare il database (supponendo che come suffisso delle tabelle sia stato scelto "ps" la tabella alla quale aggiungere il campo è `ps_customer`):
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!
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>
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');
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.');
Codice: Seleziona tutto
$customer->referralcode = $referralCode;
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');
Codice: Seleziona tutto
$customer->referralcode = $referralCode;
Codice: Seleziona tutto
$this->context->customer = $customer;
$this->context->smarty->assign('confirmation', 1);
$this->context->cookie->id_customer = (int)$customer->id;
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;
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';
"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
)
);
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 )
Come Neller mi ha indicato, ho saltato un passaggio!
Grazie a Neller.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'),