jass82 Posted August 24, 2021 Share Posted August 24, 2021 Buenas a todos, tengo la pagina categoría de mi prestashop, la cual carga los productos de forma aleatoría, para que los productos antiguos no se hundan, y tengamos una mayor rotación de productos. Esta rotación la consigo mediante smarty con la variable {$products|@shuffle}; la cual me ordena de forma aleatoria el array de products. El problema, es que cuando accedo a un producto y quiero volver atras, al recargar la página, ese array me lo ordena de forma distintanta y es un fastidio, cuando tienes cientos de productos en una misma categoría, puesto que no sabes por donde te has quedado, ya que el orden es distinto al anterior previsualizado. Creo que mediante variables de SESSION podría hacerlo, tengo una variable session[categoria_anterior] en la cual, voy guardandome la categoria visitada, y la cual consulto al volver atras para saber si he cambiado o no de categoria. SI continuo en la misma categoría tendría que recuperar el array de productos guardados en esa variable de session[array_productos_anterior], para poder mostrarle el mismo listado que vio en su primera visita a esa categoría, o en caso de cambiar a otra categoría generar de nuevo el contenido de esas variables. El problema que tengo, es que $_SESSION["array_productos_anterior"] = {$products}; no consigo hacerlo funcionar y que me guarde el array de productos visitados, para despues recuperarlo. He probado muchas sintaxis diferentes o pasarlo mediante json_encode, pero no logro almacenar ese array de productos y poder recuperarlo de nuevo, sin embargo el $_SESSION["categoria_anterior"] = {$id_category}; si que lo recoge bien al ser una variable "simple" y no un array. El archivo de plantillas es el product-list.tpl {php} session_start(); {$products|@shuffle}; if($_SESSION["categoria_anterior"] == "") { $_SESSION["categoria_anterior"] = {$id_category}; $_SESSION["array_productos_anterior"] = {$products}; } else { if($_SESSION["categoria_anterior"] == {$id_category}) { echo "misma categoria ".$_SESSION["array_productos_anterior"]."y recupero"; //tendría que recuperar el valor de $_SESSION["array_productos_anterior"] y asignarlo a {$products} } else { echo "CAMBIO CATEGORIA"; $_SESSION["categoria_anterior"] = {$id_category}; $_SESSION["array_productos_anterior"] = {$products}; } } {/php} Link to comment Share on other sites More sharing options...
SmartDataSoft Posted August 24, 2021 Share Posted August 24, 2021 Hola, En primer lugar, el caché de su sitio está habilitado o no. Porque cuando se habilita la caché, la categoría se compila y muestra el mismo valor para todos los clientes hasta que se borra. Será mejor que pueda aleatorizar el producto de la clase o el controlador. Desde donde se carga el producto de la categoría, como producto destacado de inicio de PrestaShop. Que muestran producto aleatorio. Pero muestre el mismo producto cuando vuelva a casa. Gracias Link to comment Share on other sites More sharing options...
jass82 Posted August 24, 2021 Author Share Posted August 24, 2021 la cache esta habilitada, pero el orden aleatorio lo creo en el product-list.tpl mediante {$products|@shuffle}, para que asi cada cliente tenga su propia visualización de productos y este sea aleatorio, incrementando asi la rotación de productos a la hora de realizar pedidos. Supongo que lo que me dices es modificar directamente la función getProduct de la clase, para que este los muestra de forma aleatoria, y la cache guarde ese "nuevo orden", pero la contra que le veo, es que tendría que estar borrando la cache de forma continua cada cierto tiempo, pero no es lo que realmente busco. Link to comment Share on other sites More sharing options...
SmartDataSoft Posted August 24, 2021 Share Posted August 24, 2021 (edited) En ese caso, debe guardar la variable de producto completa y luego manejarla. Edited August 24, 2021 by SmartDataSoft (see edit history) Link to comment Share on other sites More sharing options...
jass82 Posted August 24, 2021 Author Share Posted August 24, 2021 (edited) ahi esta mi problema, que esta sintaxis no es correcta. $_SESSION["array_productos_anterior"] = {$products}; y no consigo guardar el array de productos en la variable de session. ¿Por que no funciona? Como consigo almacernar el valor del array en la varieble session? Edited August 25, 2021 by jass82 (see edit history) Link to comment Share on other sites More sharing options...
jass82 Posted August 25, 2021 Author Share Posted August 25, 2021 ¿Alguien sabe como poder guardar ese array de productos? El cual llega por smarty y se almacena en php. Alguna otra solución?? Link to comment Share on other sites More sharing options...
SmartDataSoft Posted August 25, 2021 Share Posted August 25, 2021 Hola, ¿Estás probando en PrestaShop 1.6.x? Intento poner su código en el tema PresataShop classic 1.7, no me permite poner la etiqueta {php} Puede verificar cuál es el tipo de $ productos y luego verificar el mismo tipo de recuperación de la sesión. De lo contrario, puede intentar guardar en un tipo que se pueda convertir nuevamente. De esta manera te puede ayudar Gracias Link to comment Share on other sites More sharing options...
jass82 Posted August 25, 2021 Author Share Posted August 25, 2021 Estoy en prestashop 1.6.1.24, para que me lea las etiqueta {php} he tenido que modificar el archivo ./config/smarty.config.inc.php , las lineas con #son las que se han puesto en comentario y bajo la nueva llamada #require_once(_PS_SMARTY_DIR_.'Smarty.class.php'); require_once(_PS_SMARTY_DIR_.'SmartyBC.class.php'); #$smarty = new SmartyCustom(); $smarty = new SmartyBC(); luego en la pagina del theme, category.tpl veras que la variable $productos es la que contiene el array de los productos que luego visualiza en la rejilla / listado de la categoria. La idea es poder guardar el id_categoria y el array_productos en unas variables de sesion para poder luego modificar esa variable $productos y muestre la rejilla de productos guardada Link to comment Share on other sites More sharing options...
SmartDataSoft Posted August 26, 2021 Share Posted August 26, 2021 (edited) @jass82 Probé su solución, pero es bastante difícil hacerlo desde Smarty. Gracias Edited August 26, 2021 by SmartDataSoft (see edit history) Link to comment Share on other sites More sharing options...
jass82 Posted August 26, 2021 Author Share Posted August 26, 2021 se te ocurre alguna alternativa?? Link to comment Share on other sites More sharing options...
Pixefora D Posted August 26, 2021 Share Posted August 26, 2021 Creo que puedes probar a: 1- Crear el order random en el controlador (getProduct). 2- Buscar donde genera la cache, a esta caché le genera un ID. 3- Modificar ese ID y agregarle el id de usuario, o el id del carro. No lo he probado, pero sobre el papel debería de funcionar y cada usuario tendría una caché propia. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now