Descuento 20% Diciembre
Plugin Optimización de Imágenes Gratuito para WordPress
Sábado, 17 Diciembre 2011 16:50

Modificar precio en la ficha de producto de Virtuemart al aplicar un atributo con sobrecostes

Escrito por 
CMS:  Joomla! |  Versión:  Todas |  Nivel de dificultad:  Básico |  Tiempo estimado de lectura:  15 minutos


precio sobrecostes virtuemartEn Virtuemart disponemos de la opción de aplicar un sobrecoste o un descuento a un producto por medio de los atributos. Cuando aplicamos seleccionamos un valor de un atributo con sobrecostes veremos en el propio atributo el sobrecoste que se va a aplicar, pero una vez seleccionado el usuario no verá en el precio que se muestra en la vista detallada del producto el total resultante, sino que será necesario agregar el producto al carro para ver el precio final.

Existe la opción de poder actualizar automáticamente el precio de la ficha del producto cuando se selecciona un atributo con sobrecostes realizando un cambio en el código de la vista detallada del producto, concretamente agregando un código javascript.

Para ello deberemos editar el archivo components/com_virtuemart/themes/NOMBRE_TEMA/templates/product_details/NOMBRE_TEMPLATE.php, en donde NOMBRE_TEMA es el nombre del tema (plantilla) de Virtuemart que estamos usando y NOMBRE_TEMPLATE es el nombre de la plantilla de la vista detallada de producto que hemos seleccionado. Para obtener el nombre del tema de Virtuemart deberemos entrar en el apartado Configuración de la administración de Virtuemart y pulsar en la pestaña Sitio. En el parámetro Seleccione un tema para su tienda veremos el tema que estamos utilizando. Si no hemos instalado ningún tema adicional en nuestra tienda, este sería default. Para averiguar el nombre de la plantilla de la vista detallada de producto deberemos editar la categoría de productos de Virtuemart a la que pertenece el artículo con sobrecostes y mirar en el campo Categoría Detallada.

Si, por ejemplo el nombre del tema de Virtuemart es ja-zeolite y el nombre de la plantilla de la vista detallada es webempresa_details.tpl, el nombre del archivo a editar sería components/com_virtuemart/themes/ja-zeolite/templates/product_details/webempresa_details.tpl.php.

Una vez que hayamos editado el archivo, tendremos que colocar el siguiente código al principio del archivo:

<script type="text/javascript">
window.addEvent('domready', function() {
var vmStr= $('vmMainPage').getElement('.productPrice');
var Box=$$('.vmAttribChildDetail select');
var vmPrice= vmStr.innerHTML;
sumBox();
Box.addEvent('change', function() {
sumBox();
});

function redondea(sVal, nDec){
var n = parseFloat(sVal);
var s = "0.00";
if (!isNaN(n)){
n = Math.round(n * Math.pow(10, nDec)) / Math.pow(10, nDec);
s = String(n);
s += (s.indexOf(".") == -1? ".": "") + String(Math.pow(10, nDec)).substr(1);
s = s.substr(0, s.indexOf(".") + nDec + 1);
}
return s;
}

function strNum(x) {
var r = "";
for(var n=0; n<x.length; n++) {
var base= x.charAt(n);
if (base!=' '&&isNaN(base)==false||base==',')
r = r + base;
}
r = redondea(parseFloat(r.replace(/,/g,".")), 2);
return r;
}
function strPrice(x) {
x = x.toString();
var y = x.charAt(0);
for(var n=1; n<x.length; n++) {
if (Math.ceil((x.length-n)/3) == (x.length-n)/3) y = y + " ";
y = y + x.charAt(n);
}
y = y.replace(" ", "");
y = y.replace(".", ",");
return y;
}
function adPrice(x) {
var add=x.options[x.selectedIndex].innerHTML;
var n=add.lastIndexOf("(");
if(n==-1) {
return 0;
} else {
var operand=add.slice(n+1,n+2);
return operand+strNum(add.slice(n));
}
}
function sumBox() {
var price=strNum(vmPrice);
for(var n=0; n<Box.length; n++) {
price=eval(price+adPrice(Box[n]));
}
price = redondea(price, 2);
vmStr.innerHTML=vmPrice.replace(strPrice(strNum(vmPrice)), strPrice(price));
}
});
</script>

Podemos descargar el código pulsando AQUÍ.

Tras guardar los cambios veremos que en la ficha del producto se actualiza automáticamente el precio al cambiar el atributo con sobrecostes.

Hay que tener en cuenta que para que esto funcione correctamente es necesario cumplir con una serie de requisitos. Por una parte, en la Configuración de Virtuemart, concretamente en la primera pestaña Global, deberemos de tener desactivado el parámetro ¿Mostrar "(incluyendo XX% IVA)" cuando sea aplicable?. Además dentro de la opción Editar Tienda deberemos asegurarnos de que el valor del parámetro Símbolo de decimales sea la coma. Estos cambios se han probado sobre Virtuemart 1.1.9, por lo que no se puede garantizar su funcionamiento con otras versiones. Además, tampoco se puede asegurar que funciona para todos los temas de Virtuemart que se puedan utilizar, ya que la forma de actuar del código javascript depende del nombre de algunas etiquetas utilizadas en la ficha del producto.

Otro detalle a tener en cuenta es que este sistema solo funciona cuando se aplican sobrecostes positivos o negativos, pero no cuando se fija un precio con el atributo. Por ejemplo, funcionaría con un sobrecoste +10 o -10, pero no con uno =10.

Para realizar esta entrada, hemos partido del siguiente artículo, de donde hemos cogido el código y hemos aplicado una serie de cambios para que funcione utilizando la coma de separador decimal y que no sea necesario agregar sobrecostes a todos los atributos.

Hemos preparado un video tutorial donde se puede ver más detalladamente los cambios que hay que aplicar.


¿Te ha resultado interesante este artículo?

Suscríbete para recibir consejos exclusivos para WordPress, Joomla y PrestaShop




Plugin Optimización de Imágenes Gratuito para WordPress