Breve guida sulla modifica di PrestaShop per aggirare il validation su campo nome e cognome di utente e indirizzo, permettendo l’inserimento di numeri e parentesi ()
Quando si importano clienti o dati in generale, potrebbe essere necessario dover rendere PrestaShop un pò più permissivo sulla validazione. Infatti quando si lavora con importazione ordini/clienti da eBay o Amazon, può capitare che nome o cognome contengano numeri o (). Bene, PrestaShop le elimina.
Vediamo come ovviare a questo problema.
Editiamo il file classes/Validate.php
/** * Check for name validity * * @param string $name Name to validate * @return bool Validity is ok or not */ public static function isName($name){ return preg_match(Tools::cleanNonUnicodeSupport('/^[^0-9!<>,;?=+()@#"°{}_$%:]*$/u'), stripslashes($name)); }
Per abilitare parentesi e numeri, possiamo modificare la regexp da
/^[^0-9!<>,;?=+()@#"°{}_$%:]*$/u
togliendo 0-9 e (), facendola diventare
/^[^!<>,;?=+@#"°{}_$%:]*$/u
L’approccio per proseguire nella modifica è doppio:
1- creare un nuovo metodo, ad esempio creare il metodo MyisName. Sarà necessario modificare anche i seguenti file
File aggiuntivo da modificare classes/Customer.php (vedi righe 6-7)
public static $definition = array( 'table' => 'customer', 'primary' => 'id_customer', 'fields' => array( 'secure_key' => array('type' => self::TYPE_STRING, 'validate' => 'isMd5', 'copy_post' => false), 'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'MyisName', 'required' => true, 'size' => 32), 'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'MyisName', 'required' => true, 'size' => 32),
File aggiuntivo da modificare classes/Address.php (vedi righe 13-14)
public static $definition = array( 'table' => 'address', 'primary' => 'id_address', 'fields' => array( 'id_customer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false), 'id_manufacturer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false), 'id_supplier' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false), 'id_warehouse' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false), 'id_country' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), 'id_state' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId'), 'alias' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 32), 'company' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 64), 'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'MyisName', 'required' => true, 'size' => 32), 'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'MyisName', 'required' => true, 'size' => 32),
2- modificare semplicemente il metodo isName. Questa modifica non richiede altre variazioni ad altri file
ATTENZIONE: in caso di aggiornamento di PrestaShop, le modifiche fatte, andranno perse!