Modificar product.js para que guarde el valor de cantidad.

En Prestashop, cuando un producto tiene campos personalizados, lo normal es que el usuario complete esos campos y después le dé al botón de guardar.

Eso siempre es así, pero si antes de guardar se ha puesto la cantidad deseada, ¿Qué pasa? Pues pueden pasar 2 cosas.

Productos sin combinaciones
Si el producto no tiene combinaciones, es decir, si no hay opción de elegir el color, tamaño, talla, etc. la cantidad se guardará, y al recargarse la página, seguirá estando la cantidad que hemos puesto.

Productos con combinaciones
Si se trata de un producto en el que podemos elegir diferentes colores, tamaños, … al darle al guardar, el valor que nosotros previamente hemos puesto en cantidad, pasará a ser nuevamente 1.

¿Qué mal no? ¿Diferentes funciones para algo tan simple? Vamos a cambiar esto.

Bien, primero de todo hay que saber, que los productos ‘Sin combinación’ hacen caso al archivo product.tpl, mientras que los que sí tienen combinaciones hacen caso al /js/product.js, por tanto modificaremos el archivo /js/product.js

Hay que decir que no se prácticamente nada de JavaScript, así que nadie se asuste si se ven cosas raras.

Abrimos el archivo y hacemos una búsqueda por ‘quantityBackup’  y en mi caso, en la linea 589 es dónde nos encontramos con

$('#quantityBackup').val($('#quantity_wanted').val());

En esta linea se indica que en ‘quantityBackup’ seguarda el valor de ‘quantity_wanted’. ‘quantity_wanted’ es el valor que nosotros introducimos como cantidad a comprar.

Lo primero que vamos a hacer es crear una variable que sea igual a #quantityBackup

var qBackup = $('#quantityBackup').val();

Una variable llamada qBackup que contiene el valor de quantityBackup.

El siguiente paso sería hacer que muestre el valor de qBackup y no el ‘1’ que siempre muestra. Buscamos en el archivo por ‘quantity_wanted’ y encontraremos la linea

$('#quantity_wanted').val(1);

Esta función indica que el valor que aparecerá en el campo de cantidad siempre será 1 y es aquí donde tenemos que poner nuestra variable. Cambiamos 1 por qbackup

$('#quantity_wanted').val(qBackup);

Ahora ya esta todo funcionando, pero si hacemos una prueba, veremos que la primera vez, qBackup es 0, por lo que no interesa, queremos que la primera vez sea 1, y después la cantidad que nosotros le indiquemos, por lo que haré un if.

if( qBackup == '' ){ qBackup = 1; }else{ qBackup = qBackup; }

Este if indica

si 

if

qBackup no tiene valor 

( qBackup == '' )

qBackup es igual a 1 

{ qBackup = 1; } 

sino 

else

qBackup es la cantidad que le indiquemos  

{ qBackup = qBackup; }

Nota: Como actualización, debido a algunos errores en el efecto al añadir al carrito, que puede que también encontréis, he hecho las siguientes modificaciones.

Primero he movido el function saveCustomization() por encima del function findCombination(firstTime) en el archivo /js/product.js

Después las 2 lineas

$('#minimal_quantity_wanted_p').fadeOut();
$('#quantity_wanted').val(qBackup);

que están dentro del function indCombination(firstTime) las he pasado al function saveCustomization().

La función

if( qBackup == '' ){ qBackup = 1; }else{ qBackup = qBackup; }

la he eliminado.

 




1 comentario

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.