Ultimi giorni a seguito di alcuni reclami e discussioni con i nostri ragazzi del marketing, ho ricevuto una richiesta di modifica del comportamento predefinito delle opzioni dei prodotti configurabili. Mi hanno chiesto di rimuovere + $ xx.xx dal menu a discesa delle opzioni poiché confonde i clienti/visitatori e lascia le opzioni disponibili senza visualizzare la variazione di prezzo. Giusto abbastanza dal loro punto di vista, ma è un po 'complicato dal punto di vista degli sviluppatori, credo. Il sito utilizza Magento CE 1.6.2 e il file che dobbiamo sovrascrivere/modificare è /public_html/js/varien/configurable.js. Abbiamo bisogno di cambiare la funzione getOptionLabel in modo che non mostri la variazione di prezzo. Quindi la mia domanda è: qual è il modo giusto in Magento per cambiare questo file e non toccare il file javascript principale? Grazie in anticipo.Sovrascrittura/estensione dei file javascript di Magento core
risposta
Vedere questo da manuale prototipo http://prototypejs.org/doc/latest/language/Function/prototype/wrap/ si può avvolgere qualsiasi metodo oggetto e anche chiamare "padre", se necessario, ed ecco un esempio di pseudo:
//where Product.Config is the object/class you need to "override"
Product.Config.prototype.getOptionLabel = Product.Config.prototype.getOptionLabel.wrap(function(parentMethod){
//replace the original method here with your own stuff
//or call parentMethod(); if conditions don't match
});
Grazie mille Anton per il tuo suggerimento. Ci giocherò la mattina e vedrò come si comporta. –
Per Magento 1.7 funziona: Product.Config.prototype.getOptionLabel = Product.Config.prototype.getOptionLabel.wrap –
suppongo che dipenda dal modo in cui i metodi sono denominati –
solo per aggiungere a @ Anton-s risposta assolutamente corretto di, è può anche fare "pieno" di classe riscrive:
// Create the original class
var ClassA = Class.create();
ClassA.prototype = {
initialize: function(config) {
this.config = config;
},
test: function(msg) {
console.log('Hi from class A with message ' + msg);
}
};
// Create new class extending the original class
var ClassB = Class.create(ClassA, {
// $super is a reference to the original method
test: function($super, msg) {
console.log('Hi from class B');
console.log('this.config is accessible in class B: ' + this.config);
$super(msg + ' ...')
}
});
// To make the extend an override, you can do this:
ClassA = ClassB;
// ClassA now is ClassB overriding the original ClassA
var a = new ClassA('some config data');
a.test('Call A 1');
Poiché tutti questo funziona solo su classi di prototipo, non su oggetti già istanziati, sarò anche gettare in questo hack, che è più o meno quello involucro() fa anche:
// Overriding a method of an already instantiated object
// There are many ways to do this more elegantly thanks to the amazing JS scoping magic
a.origTest = a.test;
a.test = function(msg) {
console.log('Hi from the patched method');
this.origTest(msg);
}
a.test('Call A 2');
Occorre tuttavia tenere presente che il metodo wrap()
è più bello, e può anche essere utilizzato su sulle definizioni di classe o su casi concreti.
// Wrap method of concrete instance
spConfig.getOptionLabel = spConfig.getOptionLabel.wrap(function(parentMethod, option, price) {
return parentMethod(option, price);
});
// Wrap method of class declaration
Product.Config.prototype.getOptionLabel = Product.Config.prototype.getOptionLabel.wrap(function(parentMethod, option, price) {
return parentMethod(option, price);
});
Grazie mille Vinai e Anton S per i vostri preziosi suggerimenti. Abbiamo cambiato il nostro js ha temporaneo e ora è fatto nel modo giusto Magento. Sei rocce! –
@MilenPetrov accetta la risposta che ti aiuta a migliorare l'esperienza SO per gli altri che cercano lo stesso –
@Anton S - Davvero dispiaciuto che mi sono dimenticato di farlo –
- 1. magento non può sostituire il core model
- 2. Moduli multipli che sovrascrivono lo stesso core file in Magento
- 3. Magento :: tradurre il testo da file javascript
- 4. Magento Resource esclusione dei clienti modello
- 5. Come scaricare i file in Magento
- 6. Convenzioni di codifica dei nomi dei file JavaScript e PHP
- 7. magento escape string per javascript
- 8. Modificare le intestazioni dei file statici in Asp.net Core
- 9. Database dei semi di ASP2NET Core RC2
- 10. Analisi dei file .msg in JavaScript
- 11. Formato file core-dump
- 12. Pulizia dei link simbolici Magento Modman
- 13. Magento: aggiornamento dei cataloghi dei prodotti più veloce
- 14. Caricamento Magento figlio html fuori Magento
- 15. Recupera l'URL di base del negozio Magento in javascript
- 16. Impossibile risolvere l'errore "magento-community" dell'host durante l'installazione dei moduli Magento
- 17. ios - Core Data aggiornamento dei record
- 18. Spazio dei nomi contenuto di un file javascript caricato dinamicamente
- 19. I binari specificano l'ordine di caricamento dei file javascript?
- 20. Ottieni l'elenco dei nomi di file nella cartella con Javascript
- 21. Ottieni/imposta la codifica dei file con FileReader di javascript
- 22. Utilizzo dei file di risorse (resx) in javascript
- 23. ASP.NET Core Identity 3 Timeout dei cookie
- 24. Come "unire" le configurazioni dei Core Data?
- 25. Dove si trovano i file di log di Magento?
- 26. Override file del componente core di Joomla
- 27. Scarica file utilizzando MVC Core
- 28. Magento UploaderJsObject non è definito
- 29. Come accedere alla sessione dell'utente Magento dall'esterno di Magento?
- 30. Location di head.phtml in Magento
javascript non sovrascrivere suport. ma vedere che http://stackoverflow.com/questions/5409428/how-to-override-a-javascript-function – Guerra
@Guerra sei sicuro prototipo è un modo per avvolgere() cose ben –
IMO questo è un trucco per simulare l'override di OOP, ma funziona bene – Guerra