Últimos días como resultado de algunas quejas de clientes y discusiones con nuestros compañeros de marketing, recibí una solicitud para cambiar el comportamiento predeterminado de las opciones de productos configurables. Me pidieron que eliminara el + $ xx.xx del menú desplegable de opciones, ya que está confundiendo a los clientes/visitantes y simplemente dejo las opciones disponibles sin mostrar el cambio de precio. Lo suficientemente justo desde su punto de vista, pero es un poco complicado desde el punto de vista de los desarrolladores, creo. El sitio ejecuta Magento CE 1.6.2, y el archivo que necesitamos sobrescribir/cambiar es /public_html/js/varien/configurable.js. Necesitamos cambiar la función getOptionLabel para que no muestre el cambio de precio. Así que mi pregunta es: ¿cuál es la forma correcta de Magento para cambiar este archivo y no tocar el archivo javascript central? Gracias de antemano.Reemplazando/ampliando los archivos javascript de Magento
Respuesta
ver esto desde el manual prototipo http://prototypejs.org/doc/latest/language/Function/prototype/wrap/ se puede envolver cualquier método objeto e incluso llamar "padre" si es necesario y aquí está una muestra de 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
});
Muchas gracias Anton por su pista. Jugaré con él por la mañana y veré cómo funciona. –
Para Magento 1.7 esto funciona: Product.Config.prototype.getOptionLabel = Product.Config.prototype.getOptionLabel.wrap –
Supongo que depende de cómo se llaman los métodos –
sólo para añadir a @ Anton-s respuesta absolutamente correcta de, usted también puede hacer la clase "completa" reescribe:
// 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');
Dado que todos esto sólo funciona en las clases de prototipo, y no en objetos ya instanciados, yo también voy a tirar en esta corte, que es más o menos lo wrap() no , también:
// 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');
Tenga en cuenta sin embargo que el método de wrap()
es más agradable, y también se puede utilizar en en las definiciones de clase o en casos concretos.
// 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);
});
Muchas gracias Vinai y Anton S por sus valiosos consejos. Hemos cambiado nuestro hack de js temporal y ahora está hecho de la manera correcta de Magento. Eres rocas! –
@MilenPetrov acepta la respuesta que te ayuda a mejorar la experiencia SO para los demás que buscan el –
similar @Anton S - Realmente lo siento, me olvidé de hacer eso –
- 1. Magento :: Traducir texto desde archivos javascript
- 2. ¿Por qué Magento 1.4 incluye archivos javascript por ruta del sistema de archivos?
- 3. ¿Puedo verificar si hay HTTPS en los archivos Magento PHTML?
- 4. secuencia de escape de magento para javascript
- 5. ¿Cómo incluye Stack Overflow los archivos Javascript?
- 6. Recuperar la URL base del almacén de Magento en javascript
- 7. Magento - Magento actualización de 1.6.2 a 1.7.0.2
- 8. Limpiando los enlaces simbólicos de Magento Modman
- 9. ¿Cuánto tiempo deben conservarse los archivos de la sesión de magento?
- 10. Subidas de archivos Javascript
- 11. Cómo usar los archivos de recursos .net en javascript
- 12. ¿Dónde se almacenan los bloques CMS estáticos de Magento?
- 13. Magento: los usuarios pueden ver los datos de otros
- 14. error de magento bundle.js
- 15. Eliminando TODOS los productos en Magento
- 16. Magento: cómo eliminar todos los redireccionamientos permanentes
- 17. Eliminar todos los clientes en Magento
- 18. No se pudo resolver el error de host 'magento-community' al instalar los módulos de Magento
- 19. Refiriéndose a los archivos de JavaScript en las vistas de Razor para obtener JavaScript Intellisense
- 20. Cargando Magento child html fuera de Magento
- 21. ¿Hay algún script/herramienta JAVADOCS similar para los archivos Javascript?
- 22. ¿Cómo detectar si los archivos javascript están cargados?
- 23. ¿Cómo se cargan y ejecutan los archivos JavaScript?
- 24. JavaScript en varios archivos
- 25. Fusionando varios archivos javascript
- 26. ¿Cómo puedo incluir todos los archivos JavaScript en un directorio a través de un archivo JavaScript?
- 27. GWT y archivos javascript
- 28. Habilite GZIP para archivos CSS y JS en el servidor NGINX para Magento
- 29. ¿Es posible utilizar los nombres de clase de CamelCase en los modelos de Magento?
- 30. Entorno de depuración de Magento
javascript dont suport invalida. pero ver que http://stackoverflow.com/questions/5409428/how-to-override-a-javascript-function – Guerra
@Guerra ¿estás seguro prototipo tiene una forma de envolver() cosas muy bien –
OMI esto es un truco para simular anulaciones OOP, pero el trabajo está bien – Guerra