Devo Copiare la classe completa alla piscina codice “locale” in caso di modifiche
Domanda
Qualcuno può rispondere a questa per me.
Se creo la mia versione di un file Mage / core in piscina prefisso locale, non si sovrascrive completamente il file Mage / core? O saranno i metodi che non sono stati ri-definito nel mio codice ancora essere ereditato dal file core?
Esempio. Il seguente file (Exception.php) contiene diversi metodi (funzioni).
~ app
-> code
-> core
-> Mage
-> Customer
-> Exception.php
Voglio mettere la mia versione qui:
~ app
-> code
-> local
-> Mage
-> Customer
-> Exception.php
La mia versione contiene solo 1 metodo (_beforeSave()
). Il file core contiene molti. Saranno tutti gli altri metodi di essere ancora disponibile per Mage dal file originale?
La speranza che è chiaro! Grazie.
Soluzione
Se si inserisce un file nella cartella di local
(o community
) con lo stesso percorso come alcuni file dal core
il file core sarà reso inutile.
L'ordine Magento cerca un file è app/code/local
, app/code/community
, app/code/core
, lib
. Se si desidera ignorare un solo metodo non copiare il file nella cartella local
.
Ecco un bel tutorial che vi mostra come ignorare correttamente qualcosa.
Altri suggerimenti
Ci sono fondamentalmente tre modi diversi "valido" di modifica logica del programma in Magento
- Uso Eventi
- Utilizzo di Classe o controller riscrive
- copiando il file completo della piscina codice
local
e poi modificarlo.
mi sento di raccomandare a preferire 1. sopra 2. sopra 3. Come per gli eventi è possibile isolare correttamente il cambiamento e questo è meno probabilità di causare problemi durante l'aggiornamento la versione di Magento. 2. (Marius) di cui è ancora meglio che copiare a livello locale, nei confronti di non rischio che altre estensioni o gli aggiornamenti rompono le cose.
Quando si utilizza la piscina local
, si ha sempre a mantenere il codice della classe completo (in caso di aggiornamenti).
Nel tuo caso si dovrebbe verificare se il codice si applica può essere aggiunto tramite un evento che è -. Per l'oggetto Mage_Customer
chiamato customer_save_before