JOOMLA 2.5: Attivare reCaptcha v2
19 Luglio 2018Semplificare la spedizione di mail multiple con Thunderbird
29 Agosto 2018Risulta a volte necessario, per implementare delle richieste dell’utente, fare delle modifiche alle classi ed ai controlli di base di Prestashop: effettuare delle modifiche direttamente sui files del core di Prestashop ci espone al pericolo che questo modifiche, che di solito implicano un lavoro lungo, vengano cancellate al primo aggiornamento di Prestashop.
Per evitare questo problema, Prestashop ci fornisce lo strumento dell’override che ci consente si sostituire i sorgenti originali di Prestashop con altri files presenti nella cartella override.
Si possono sostituire così classi, controller e persino parti del tema.
Per farlo occorre seguire regole precise, studiate per ridurre al minimo la necessità di modifiche al cuore di Prestashop.
Controllare se l’override è attivo
Per evitare esperienze frustranti occorre controllare se la gestione degli override di Prestashop è attiva. Di default lo è ma è bene controllare nel backend su Parametri Avenzati>Prestazioni
Cancellare la cache delle classi
Altre esperienze frustranti possono essere generate dalla cache delle classi, un file che si chiama class_index.php e si trova
nella cartella cache per Prestashop 1.6,
nella cartella app/cache/prod per Prestashop 1.7
Il file si può cancellare perchè viene rigenerato automaticamente: non farlo potrebbe impedire alla nostre nuove classi di essere registrate ed utilizzate.
L’override di Prestashop
Su altre piattaforme l’override si esegue sostituendo l’intero file sorgente con un altro modificato che si solito si trova su un altra cartella. L’override di Prestashop è più evoluto anche se può sembrare più complesso nel suo uso.
Supponiamo ad esempio di voler modificare la classe Customer che gestisce i clienti per aggiungervi un campo in più: per farlo si può seguire questo esaustivo tutorial per la versione 16 e per la versione 17.
I due tutorial implicano la modifica del file Customer.php nella cartella classes dove viene definita la classe Customer, più precisamente la classe CustomerCore.
class CustomerCore extends ObjectModel
Ma sappiamo già che modificare i file del core di Prestashop ci espone al pericolo che le nostre modifiche vadano perse in case di aggiornamento; possiamo allora tentare di utilizzare l’override.
Nella maniera più semplice e brutale, per attivare l’override dobbiamo copiare il file Customer.php dalla cartella classes alla cartella override/classes: sulla copia possiamo fare le modifiche di cui abbiamo necessità, ma dobbiamo anche cambiare dal definizione della classe, togliendo il suffisso Core dal nome
class Customer extends ObjectModel
Prestashop legge la nuova classe e la usa al posto della vecchia: se non succede niente di quello che abbiamo previsto controlliamo che l’override sia attivo e cancelliamo la cache delle classi come suggerito nei primi due paragrafi.
Ma si può utilizzare un approccio meno brutale: nello caso specifico occorre aggiungere una attributo alla classe per il nuovo campo e modificare la definizione dell’attributo statico $definition della classe, quindi si possono effettuare solo queste due modifiche senza toccare il resto della classe, che rimane quella originale di Prestashop. Otteniamo questo risultato definendo la classe Customer come una estensione della classe CustomerCore originale di Prestashop
</p> <p>class Customer extends CustomerCore<br />{</p> <p>public $id_sacat;</p> <p>public function __construct($id = null)<br />{<br />self::$definition['fields']['id_sacat'] = array('type' => parent::TYPE_INT, 'validate' => 'isUnsignedInt');<br />parent::__construct($id);<br />}</p> <p>}</p> <p>
Per approfondimenti http://doc.prestashop.com/display/PS16/Overriding+default+behaviors