AnaCarre Posted May 19, 2016 Share Posted May 19, 2016 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 More sharing options...
Code-Plus Posted May 19, 2016 Share Posted May 19, 2016 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 ... 1 Link to comment Share on other sites More sharing options...
AnaCarre Posted May 20, 2016 Author Share Posted May 20, 2016 Muchísimas gracias! Es lo que estaba buscando, y funciona a la perfección. Gracias de nuevo! 1 Link to comment Share on other sites More sharing options...
ide41 Posted May 20, 2016 Share Posted May 20, 2016 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 More sharing options...
Code-Plus Posted May 20, 2016 Share Posted May 20, 2016 Buenas, depende de donde se muestren los productos de mejores ventas. En qué vista estás? Saludos Link to comment Share on other sites More sharing options...
ide41 Posted May 20, 2016 Share Posted May 20, 2016 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 More sharing options...
Code-Plus Posted May 20, 2016 Share Posted May 20, 2016 (edited) 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 May 20, 2016 by Code-Plus (see edit history) Link to comment Share on other sites More sharing options...
ide41 Posted May 23, 2016 Share Posted May 23, 2016 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 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