magento options product configurable

Reemplace la diferencia de precio con el precio real en las opciones de producto configurables de Magento



options (8)

Edite el archivo js/varien/product.js , mirando la línea número 691

Si tuviéramos que cambiar los precios de los atributos desde la página de detalles del producto, el disparador se disparará aquí. Solo consultar con alert(price); , y usted puede obtener el precio variable.

Tengo un producto configurable con 3 opciones, ver más abajo:

Quiero reemplazar los + £ 24.00 y los + £ 75.00 con los precios reales de los productos.

Así que en cambio diría: £ 69.00 y £ 120.00

He localizado el código en js / varien / product.js

He pasado un poco de tiempo cortando y cambiando el código, pero no puedo descifrar lo que necesita cambiar. La línea 240 hacia abajo en este archivo maneja los eventos de JavaScript para productos configurables.

Apreciaría cualquier ayuda aquí.


En 1.7 (no estoy seguro de cuándo se cambió esto) las cosas cambiaron. resulta que la cadena de precios está incorporada en PHP, dentro de Mage / Catálogo / Bloque / Producto / Vista / Opciones / Resumen.php en la función _formatPrice cuando se llama desde Mago / Catálogo / Bloque / Producto / Vista / Opciones / Tipo / Seleccionar .php

Tenga en cuenta que cambiar cualquiera de esas 2 clases provocará un cambio a través del sitio y no solo en ese combo específico


En magento 1.9, el método .js ya no parece funcionar.

En su lugar actualicé Abstract.php (/app/code/core/Mage/Catalog/Block/Product/View/Options/Abstract.php), copie este archivo en / app / code / local / Mage / Catalog / Block / Product / Ver / Opciones / Resumen.php. En la línea 128, cambie las variables $ _priceInclTax y $ _priceExclTax a lo siguiente:

$_priceInclTax = $this->getPrice($sign.$value[''pricing_value''], true)+$this->getProduct()->getFinalPrice(); $_priceExclTax = $this->getPrice($sign.$value[''pricing_value''])+$this->getProduct()->getFinalPrice();

He visto soluciones similares, pero esta es la única forma de garantizar que también funcione con opciones como productos negativos y descuentos especiales en los precios.


Encontré una solución here que funciona en Magento 1.9, pero anula el código del núcleo, debe hacerse para que no anule el núcleo.

He intentado algo como esto en un nuevo archivo js, ​​pero de alguna manera el núcleo configurable.js está desordenado, tal vez alguien pueda encontrar una manera para que la ID no lo haga.

Product.Config.prototype.getOptionLabel = Product.Config.prototype.getOptionLabel.wrap(function(parentMethod){ // BEGIN:: custom price display update var basePrice = parseFloat(this.config.basePrice); // ''price'' as passed is the RELATIVE DIFFERENCE. We won''t use it. // The ABSOLUTE DIFFERENCE is in option.price (and option.oldPrice) var absoluteDifference = parseFloat(option.price); // var price = parseFloat(price); if(absoluteDifference){ // console.log(option); price = basePrice + absoluteDifference; } else { price = absoluteDifference; } // END:: custom price display update if (this.taxConfig.includeTax) { var tax = price / (100 + this.taxConfig.defaultTax) * this.taxConfig.defaultTax; var excl = price - tax; var incl = excl*(1+(this.taxConfig.currentTax/100)); } else { var tax = price * (this.taxConfig.currentTax / 100); var excl = price; var incl = excl + tax; } if (this.taxConfig.showIncludeTax || this.taxConfig.showBothPrices) { price = incl; } else { price = excl; } var str = option.label; if(price){ if (this.taxConfig.showBothPrices) { // BEGIN:: custom price display update // NOTE:: ''true'' was changed to ''false'' in 3 places. str+= '' '' + this.formatPrice(excl, false) + '' ('' + this.formatPrice(price, false) + '' '' + this.taxConfig.inclTaxTitle + '')''; } else { str+= '' '' + this.formatPrice(price, false); // END:: custom price display update } } return str;

});



Esto se realiza mediante javascript. Debe modificar el método getOptionLabel en js / varien / configurable.js (este es Magento 1.5.1.0, su kilometraje puede variar según la versión que esté usando).

Este método recibe la opción y la diferencia de precio a aplicar. Si solo desea mostrar el precio absoluto de las diferentes opciones, debe calcularlas usted mismo, utilizando el valor base absoluto del producto configurable y la diferencia absoluta de la opción.

Las primeras líneas del método se ven así:

getOptionLabel: function(option, price){ var price = parseFloat(price);

Cambie eso para obtener el precio base absoluto y la diferencia absoluta de la opción. Luego agréguelos para obtener el precio absoluto final de la opción. Me gusta esto:

getOptionLabel: function(option, price){ var basePrice = parseFloat(this.config.basePrice); // ''price'' as passed is the RELATIVE DIFFERENCE. We won''t use it. // The ABSOLUTE DIFFERENCE is in option.price (and option.oldPrice) var absoluteDifference = parseFloat(option.price); var absoluteFinalPrice = basePrice + absoluteDifference; // var price = parseFloat(price); var price = absoluteFinalPrice;

Entonces necesitas deshacerte de los símbolos + y - en las opciones. Más adelante, en el mismo método, cuando llame a this.formatPrice, simplemente cambie el segundo parámetro a falso en cada llamada.

if(price){ if (this.taxConfig.showBothPrices) { str+= '' '' + this.formatPrice(excl, false) + '' ('' + this.formatPrice(price, false) + '' '' + this.taxConfig.inclTaxTitle + '')''; } else { str+= '' '' + this.formatPrice(price, false); }

Algunas notas más sobre esto:

Encontrará otro objeto idéntico llamado Product.Config que se está creando en js / varien / product.js. Por lo que sé, esto no hace absolutamente nada, ya que es reemplazado por js / varien / configurable.js.

Además, si solo cambia js / varien / configurable.js, la próxima vez que actualice Magento probablemente perderá sus cambios. Es mejor crear otro archivo como js / varien / my_configurable.js o lo que sea, y llamarlo en el archivo de configuración (product.xml) para cualquier tema que esté usando.


Estoy sorprendido de cómo Magento puede usar por defecto una lógica tan extraña.

La capacidad de ver diferentes precios por variante debería estar disponible, y quizás incluso la predeterminada.

¡Prestashop hace esto, e incluso cambia automáticamente las imágenes al seleccionar cada variante!


en Magento 1.9 abra js / varien / configurable.js goto function getOptionLabel

modifique este código de función según sea necesario.