Jump to content

[Aporte] Ocultar lo productos sin stock en toda tu tienda prestashop 1.6


Recommended Posts

Hola que tal amigos del foro de prestashop...

 

he buscado y buscado como poder ocultar los productos con un stock=0 de mi tienda y la verdad es que no encontraba una solución optima, pero de tanto buscar encontre una solucion excelente y las comparto con ud.

 

El funcionamiento corriente de Prestashop sigue mostrando los productos del catálogo aunque no queden unidades de los mismos. Normalmente muestra un mensaje del tipo "Sin unidades" o "Fuera de stock". Incluso te deja configurar desde el panel de administración si quieres que se pueda seguir comprando o no. También puedes instalar un módulo para que el cliente pueda dejar su correo para ser avisado cuando haya unidades.

¿Pero qué pasa si queremos que los productos fuera de stock no se muestren al cliente? Esto puede ser necesario si vendemos productos únicos o de segunda mano y solo tenemos una unidad de cada uno de ellos. No queremos que los productos se borren porque queremos tener un registro de ellos y permitir, por ejemplo, su devolución. Pero si que queremos que pasen a un estado "inactivo" automáticamente para que no se muestren ni en la categoría a la que pertenecen, ni en "productos destacados", ni en "novedades", etc.

He visto gente que lo intenta solucionar editando el product-list.tpl, pero no me parece la mejor solución porque, aunque sólo muestres los productos en stock, siguen teniendo en cuenta los productos fuera de stock para contabilizar el total de productos a listar. Por tanto, si hay 10 productos y 3 fuera de stock, te pondrá 10 de 10 productos, aunque sólo muestre 7.

También he visto que otras personas modifican la clase Category.php, modificando la consulta a la base de datos del método public function getProducts. Modifican la consulta para que seleccione sólo los productos en stock. Está solución es válida para los listados de productos en las categorías, pero por ejemplo no afecta a la página de novedades u a otros módulos como "productos destacados".

Por tanto la solución que más me convence es la de crear un trigger o disparador en la base de datos, de forma que cada vez que se actualicen las unidades de un producto, si son >0, se active el producto, pero si son = 0 se desactive el producto. Así, el producto seguirá existiendo en el panel de administración, pero nunca aparecerá en la parte pública de la página, en ninguna sección ni en ningún módulo.

 - Para activar o desactivar un producto hay que cambiar el campo "active" de la tablaps_product_shop a 1 o a 0 respectivamente.
-  La información sobre el stock de un producto se almacena en la tablaps_stock_available.

Por tanto, queremos crear un trigger que cambie la visibilidad de un producto (active=0) cuando la cantidad de un producto baje a 0 y que nos vuelva a activar el producto (active=1) cuando la cantidad vuelva a ser superior a 0 (por ejemplo si se realiza la devolución del producto). Un trigger es un disparador que se asocia a una tabla y que se hace saltar cada vez que se borra, actualiza o añade algún registro en esa tabla. Nosotros, como ya hemos dicho, queremos crear un trigger que se dispare cada vez que se actualice algo en la tabla ps_stock_available y que edite el campo active de la tabla ps_product_shop en consecuencia.

Para ello, en phpMyAdmin, iremos a la tabla ps_stock_available y haremos click sobre el elemento del menú "Disparadores" (si la interfaz está en español) o "Triggers" (si la interfaz está en inglés). En esa sección, daremos a "Agregar Disparador" y rellenaremos el formulario como se muestra en la imagen.

 

trigger.png

 

 

Y eso es todo. También se puede crear este trigger con una consulta SQL:

 

CREATE TRIGGER `change_active_after_update` AFTER UPDATE ON `ps_stock_available` 

 FOR EACH ROW 
BEGIN 
UPDATE ps_product_shop SET active=0 WHERE id_product IN (SELECT id_product FROM ps_stock_available WHERE quantity=0); 
UPDATE ps_product_shop SET active=1 WHERE id_product IN (SELECT id_product FROM ps_stock_available WHERE quantity>0); 
END

 

 

Este trigger funcionara luego de que realicen algún cambio en la base de datos, o si realizan una compra de prueba en su tienda.

  • Like 1

Share this post


Link to post
Share on other sites

  • 1 year later...

hola que tal? quisiera hacerte unas preguntas referentes a lo que propones:

 

¿si uso esto los productos desactivados seguirán en la tienda?

para no tener problemas de posicionamiento con google, errores 404, etc...

 

¿yo seguiré viendo esos productos en el b.o.?

Para mejorar descripciones, imágenes etc....

 

mi tienda se actualiza ¿cada 60 minutos habría algún problema?

 

Creo que eso es todo, muchas gracias y espero respuesta.

Share this post


Link to post
Share on other sites

  • 2 months later...

hola que tal? quisiera hacerte unas preguntas referentes a lo que propones:

 

¿si uso esto los productos desactivados seguirán en la tienda?

para no tener problemas de posicionamiento con google, errores 404, etc...

 

¿yo seguiré viendo esos productos en el b.o.?

Para mejorar descripciones, imágenes etc....

 

mi tienda se actualiza ¿cada 60 minutos habría algún problema?

 

Creo que eso es todo, muchas gracias y espero respuesta.

Esto si que daría errores 404, pues o que hace el trigger es activar y desactivar los productos pero para los buscadores si esta desactivado es como si no estuviese.

En el back office los seguirás viendo como desactivados.

Share this post


Link to post
Share on other sites

  • 2 months later...

Hola he probado el disparador, y me ha funcionado correctamente cuando se ha realizado un pedido de un articulo con 1 unidad en stock, y se ha desactivado. Posteriormente en la ficha del producto he actualizado de nuevo el stock poniendo la cantidad de 1 unidad en el producto agotado, y guardado, pero no se ha activado de nuevo el producto, a que puede ser debido?.Gracias.

Share this post


Link to post
Share on other sites

  • 6 months later...

Buenas,

 

estoy intentando hacer lo siguiente:

 

Ordenar los productos de toda la tienda por fecha (o por ID) y que los productos que no estén en stock aparezcan al final.

 

Estoy intentando hacerlo desde el fichero Category.php modificando la consulta pero no consigo que se cumpla todo.

 

¿alguien sabe algo sobre esto o le ha pasado alguna vez?

 

Un saludo y gracias!

 

Share this post


Link to post
Share on other sites

  • 2 months later...

Respondo a [email protected]

 

El disparador lo que hace es desactivar el producto cuando el inventario sea 0, sólo eso.

 

Se podría crear otro que hiciera lo contrario, activarlos cuando el inventario sea positivo, pero eso podría ser un problema pues activaría todos y podrías tener productos con inventario que no desees mostrar en la tienda.

 

Lo mejor es que al igual que actualizas el inventario del producto lo actives en el momento.

 

Un saludo.

 

Y gracias a Santysos por el genial aporte.

--

Josele

Share this post


Link to post
Share on other sites

  • 4 years later...

Buenos días, activé el disparador y lo desactivé. Ahora los productos que están en Stock 0 me salen en la barra de búsquedas de prestashop pero NO me sale el producto en los resultados de búsqueda.

Ayuda please

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More