Jump to content

Productos aleatorios en pagina categoria, variables session


jass82

Recommended Posts

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

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

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

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 by jass82 (see edit history)
Link to comment
Share on other sites

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

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

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

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
×
×
  • Create New...