Jump to content

Productos nuevos aleatorios sin desactivar caché


AnaCarre

Recommended Posts

Buenos días!

 

He puesto para que sean sólo los productos nuevos los que me salen al entrar en la página, dentro del HomeTabContent, y lo que estoy intentando ahora es que salgan de forma aleatoria cada vez que se entra en la página. 

 

Creo que he leído cada hilo de la red, en inglés y en castellano, y no he conseguido una solución que me funcione. He probado a modificar la función getnewProducts con un código que he encontrado aquí, en el archivo /blocknewproducts.php, pero sólo funciona si desactivo la caché, y no creo que sea buena idea mantenerla desactivada siempre. 

 

Este es el código al que me refiero:

if (Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) {
  //$newProducts = Product::getNewProducts((int) $this->context->language->id, 0, (int)Configuration::get('NEW_PRODUCTS_NBR'));
      
      /*********** productos nuevos aleatorios ********/
      $newProducts = Product::getNewProducts((int) $this->context->language->id, 0, 100);
      shuffle($newProducts);
      array_splice($newProducts, Configuration::get('NEW_PRODUCTS_NBR') );
      /*********** / productos nuevos aleatorios ********/
    }

Que funciona perfectamente, sólo que para ello tengo que desactivar la caché porque de otra forma memoriza lo que ha mostrado para volver a mostrarlo la siguiente vez que se entra a la página. 

 

Entonces, mi pregunta es, ¿hay alguna forma, alguna orden de código que pueda añadir, para que no memorice la caché en ese bloque de nuevos productos? U otra solución que no obligue a desactivar la caché.

 

 

Gracias por adelantado!

Link to comment
Share on other sites

Buenas, en el módulo blocknewproducts, en blocknewproducts.php:

public function hookRightColumn($params)
{
$this->_clearCache('*');


if (!$this->isCached('blocknewproducts.tpl', $this->getCacheId()))
{
if (!isset(BlockNewProducts::$cache_new_products))
BlockNewProducts::$cache_new_products = $this->getNewProducts();
public function hookdisplayHomeTab($params)
{
$this->_clearCache('*');


if (!$this->isCached('tab.tpl', $this->getCacheId('blocknewproducts-tab')))
BlockNewProducts::$cache_new_products = $this->getNewProducts();
...
public function hookdisplayHomeTabContent($params)
{
$this->_clearCache('*');


if (!$this->isCached('blocknewproducts_home.tpl', $this->getCacheId('blocknewproducts-home')))
{
$this->smarty->assign(array(
...

Incluye la línea que está en verde. Saludos

...

 

  • Like 1
Link to comment
Share on other sites

Hola.

 

El archivo blocknewproducts.php esta en la carpeta modulos del theme o de la carpeta modulos de prestashop?

En el theme yo no lo tengo (utilizo theme por defecto), y modificando el de la carpeta de modulos de prestashop no me funciona.

Link to comment
Share on other sites

Tengo las 3 pestañas, 

 

POPULARES  |  NUEVOS  |  MAS VENDIDOS

 

Los populares se muestran aleatoriamente (si tengo la cache desactivada, si la activo no me funciona). Los nuevos se muestran fijos siempre los ultimos productos dados de alta.

 

mi web www.akumia.es

Link to comment
Share on other sites

Buenas:

>Más vendidos: Esa es la solución, sólo que debes borrar la caché anterior.

>Nuevos: Funciona bien

>Populares, en .../modules/homefeatured/homefeatured.php, añade las líneas que señalo:

public function hookDisplayHomeTab($params)
	{
		$this->_clearCache('*'); <= AÑADIR

		if (!$this->isCached('tab.tpl', $this->getCacheId('homefeatured-tab')))
			$this->_cacheProducts();

		return $this->display(__FILE__, 'tab.tpl', $this->getCacheId('homefeatured-tab'));
	}

	public function hookDisplayHome($params)
	{
		$this->_clearCache('*'); <= AÑADIR
		
		if (!$this->isCached('homefeatured.tpl', $this->getCacheId()))
		{
			$this->_cacheProducts();
			$this->smarty->assign(
				array(
					'products' => HomeFeatured::$cache_products,
					'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
					'homeSize' => Image::getSize(ImageType::getFormatedName('home')),
				)
			);
		}

		return $this->display(__FILE__, 'homefeatured.tpl', $this->getCacheId());
	}

Borra la cache, y te debería funcionar. Saludos

Edited by Code-Plus (see edit history)
Link to comment
Share on other sites

Hola Code-Plus, gracias por tu respuesta, pero no me funciona.

He modificado el archivo indicado con las dos lineas de código, he borrado caché y he activado Smarty Cache y me sigue mostrando los mismo productos populares aunque recargue pagina.

No sé que puede ser, pero llevo tiempo intentado corregirlo y no hay forma.

 

Si se te ocurre algo más, te agradecería que me lo indicaras.

 

Saludos

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...