Sovrascrittura del comportamento di default
Sovrascrittura del comportamento di default
PrestaShop permette di sostituire i vari componenti e comportamenti predefiniti. Questo sistema è costituito da due punti principali:
Sovrascrittura comportamento di PrestaShop (file di classe e file di controller) al fine di indirizzare una sezione specifica dei componenti necessari.
Sovrascrittura delle parti visibili dei moduli (Modelli, JavaScript, linguaggio di fogli di stile ...) in modo che i temi possono adattarsi meglio.
Override di classi e controllori di PrestaShop
La Sovrascrittura (o Overriding) è un modo per "sovrascrivere" i file di classe e i file del controller. Prestashop utilizza un sistema ingegnoso per auto caricare le classi di sistema ed effettua lo switch alle classi sovrascritte in maniera semplice. Grazie al codice object-oriented di PrestaShop, si può contare sull'ereditarietà di un oggetto per modificare e aggiungere nuovi comportamenti, utilizzando le proprietà e i metodi delle varie classi esistenti genitore.
Classi e controllori di solito sono costruiti seguendo uno standard. Ecco la classe del prodotto e il relativo controller:
/classes/Product.php
Questa classe sarebbe chiamata ProductCore./controllers/front/ProductController.php
Questo controller sarebbe chiamata ProductControllerCore.
E' necessario creare un file PHP e posizionarlo sia delle cartelle di override, a seconda che questo file faccia parte di un modulo, o distribuito così com'è. Infatti, dalla versione 1.5 di PrestaShop, ci sono due luoghi in cui è possibile inserire i file di di Overriding: o nella root di PrestaShop , o all'interno di un modulo.
Override di una classe
Per Sovrascrivere la classe del prodotto, il file deve essere chiamato Product.php e deve avere una classe di prodotto che poi estende la classe ProductCore.
Il file può essere inserito in una di queste posizioni:
/override/classes/Product.php
/modules/my_module/override/classes/Product.php
Overriding di controller
Per sostituire la classe ProductController, il file deve essere chiamato ProductController.php e deve avere una classe ProductController che poi estende la classe ProductControllerCore.
Il file può essere inserito in una di queste posizioni:
/override/controllers/front/ProductController.php
/modules/my_module/override/controllers/front/ProductController.php
Override altri comportamenti
PrestaShop ha alcuni file che è possibile utilizzare per sostituire elementi come la visualizzazione di reindirizzamento (Tools.php) e l'hook per la misurazione del tempo di esecuzione (_Module.php), ecc è possibile abilitare rimuovendo il "_" prefisso. Ad esempio, rinominare _Tools.php in Tools.php. Se esiste già un overriding di Tools.php, deve essere inglobato con il vostro.
Override comportamento di un modulo
I moduli sono in genere nel seguente formato:
/modules/my_module/my_module.tpl
/modules/my_module/my_module.css
/modules/my_module/my_module.js
Da PrestaShop 1.5, essi possono e devono anche essere nel seguente formato:
/modules/my_module/views/templates/front/my_module.tpl
/modules/my_module/views/templates/front/my_module.css
/modules/my_module/views/templates/front/my_module.js
PrestaShop consente di sovrascrivere o sostituire alcuni file di moduli front-office con quelli nuovi all'interno dello stesso tema. L'override è governato dal tema: una volta contiene una cartella /modules (! O più), PrestaShop si visualizza il suo contenuto per i file che hanno lo stesso nome e il percorso di quelli dei moduli esistenti e sostituirli con quelli nuovi.
Questo significa che, per PrestaShop moduli 1.4 compatibili:
/themes/my_theme/modules/my_module/my_module.tpl
/themes/my_theme/css/modules/my_module/my_module.css
/themes/my_theme/js/modules/my_module/my_module.js
Da PrestaShop 1.5, il percorso è leggermente più lungo
/themes/my_theme/modules/my_module/views/templates/front/my_module.tpl
/themes/my_theme/css/modules/my_module/views/templates/front/my_module.css
/themes/my_theme/js/modules/my_module/views/templates/front/my_module.js
In generale, il percorso corretto per ignorare un file. Tpl,. File css js o. Dipende proprio percorso del modulo. Questo è il motivo per cui se PrestaShop deve lavorare con un modulo senza una cartella vista, sarà necessario lo stesso percorso override. In breve, è possibile mantenere il codice prevalente alla 1.6 come avete fatto in 1.4.
I nuovi file verranno utilizzati quando il cliente carica il negozio.
Contrary to the override code that is to be placed manually in the /override
folder, module overrides are enabled as soon as the module is installed. During installation, overriding code is merge with those already in place (if any), otherwise they are copied to the /override
folder at the root of the PrestaShop folder.
Manipolare il codice override manuale
Moduli e temi possono aggiungere una sostituzione per un comportamento di default, e PrestaShop si occupa di resettare il file /cache/class_index.php.
Ma a volte è necessario aggiungere che il codice prevalente te, caricando manualmente il file sul server. In tal caso, è necessario attivare la rigenerazione del /cache/class_index.php presentare te stesso. Questo viene fatto semplicemente cancellando il file: se PrestaShop non riesce a trovare il file, verrà rigenerarlo, prendendo tutte le sostituzioni in considerazione.
E 'lo stesso quando si rimuove manualmente una sostituzione: al fine di ripristinare il comportamento predefinito, è necessario eliminare il file /cache/class_index.php.
Codice di esempio
Example 1
Uso della classe di dati MySQL.php è semplicemente impossibile durante il tentativo di inserire i dati in un database diverso da PrestaShop del sullo stesso server MySQL. (Davvero!)
La soluzione è quella di utilizzare il seguente override della classe MySQLCore:
Per utilizzarlo è necessario creare un'istanza della classe come segue:
Per la connessione locale:
new MySQL(
DB_SERVER
,
DB_USER
,
DB_PASSWD
, 'DB_name', true);
Per la connessione remota:
new MySQL(
DB_SERVER
,
DB_USER
,
DB_PASSWD
, 'DB_name', true);
L'ultimo parametro forza la creazione di una connessione MySQL.
Example 2
Example 3
Last updated