Modulo homefeatured, problemas con la caché al seleccionar productos aleatorios
Modulo homefeatured, problemas con la caché al seleccionar productos aleatorios en la configuración del módulo
El módulo homefeatured nos permite visualizar una cantidad de productos en nuestra página web y además para cada carga, teniendo activada la opción Visualizar aleatoriamente productos, carga aleatoriamente estos productos. O eso debería.
El problema reside cuando tenemos habilitada la caché y se observa que, para cada carga de la página, esta aleatoriedad no existe. Esto se ha probado y sucede en el módulo homefeatured de versiones 1.5-1.6 para prestashop versión 1.6.X (discupad si no lo he probado en más versiones :S).
y, para los más autodidactas, os pongo el código para que lo pongáis en el módulo homefeatured.
Creo que no hace falta explicación, se ha puesto en negrita las líneas a tener en cuenta para la modificación. Aunque, si sustituís los métodos por estos funcionará garantizado. Básicamente, se chequea si está habilitado o no la aleatoriedad en los productos para recoger de caché o en el caso contrario, volver a consultar los productos.
public function _cacheProducts()
{
$israndom = Configure::get('HOME_FEATURED_RANDOMIZE');
if (!isset(HomeFeatured::$cache_products) || $israndom )
{
$category = new Category((int)Configuration::get('HOME_FEATURED_CAT'), (int)Context::getContext()->language->id);
$nb = (int)Configuration::get('HOME_FEATURED_NBR');
if ($israndom)
HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), null, null, false, true, true, ($nb ? $nb : 8));
else
HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'position');
}
if (HomeFeatured::$cache_products === false || empty(HomeFeatured::$cache_products))
return false;
}
public function hookDisplayHome($params)
{
$retorno = "";
$israndom = Configuration::get('HOME_FEATURED_RANDOMIZE');
$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')),
)
);
if($israndom){
$retorno = $this->display(__FILE__, 'homefeatured.tpl');
}else{
$retorno = $this->display(__FILE__, 'homefeatured.tpl', $this->getCacheId());
}
return $retorno;
}
Seguramente este código es mejorable, pero ya os lo dejo a vosotros y vuestros comentarios.
Espero haber servido de ayuda.
Un saludo,
Escribe un comentario