Asier.S Posted October 3, 2014 Share Posted October 3, 2014 (edited) Hola buenas. Estoy intentando mostrar Productos Destacados de forma aleatoria en Prestashop 1.5.6.2. En una versión anterior de PrestasShop seguí este tutorial de Víctor Ródenas y funcionaba. Pero en esta nueva versión cambia y no se como modificar el archivo Homefeatured.php, os pongo el codigo. Tengo que decir que la versión de modulo; Desarrollado por : PrestaShop, Versión :1.4 <?php /* * 2007-2014 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ if (!defined('_PS_VERSION_')) exit; class HomeFeatured extends Module { protected static $cache_products; public function __construct() { $this->name = 'homefeatured'; $this->tab = 'front_office_features'; $this->version = '1.4'; $this->author = 'PrestaShop'; $this->need_instance = 0; $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('Featured products on the homepage'); $this->description = $this->l('Displays featured products in the central column of your homepage.'); } public function install() { $this->_clearCache('*'); Configuration::updateValue('HOME_FEATURED_NBR', 8); if (!parent::install() || !$this->registerHook('header') || !$this->registerHook('addproduct') || !$this->registerHook('updateproduct') || !$this->registerHook('deleteproduct') || !$this->registerHook('categoryUpdate') || !$this->registerHook('displayHomeTab') || !$this->registerHook('displayHomeTabContent') ) return false; return true; } public function uninstall() { $this->_clearCache('*'); return parent::uninstall(); } public function getContent() { $output = ''; $errors = array(); if (Tools::isSubmit('submitHomeFeatured')) { $nbr = (int)Tools::getValue('HOME_FEATURED_NBR'); if (!$nbr || $nbr <= 0 || !Validate::isInt($nbr)) $errors[] = $this->l('An invalid number of products has been specified.'); else Configuration::updateValue('HOME_FEATURED_NBR', (int)$nbr); if (isset($errors) && count($errors)) $output .= $this->displayError(implode('<br />', $errors)); else $output .= $this->displayConfirmation($this->l('Your settings have been updated.')); } return $output.$this->renderForm(); } public function hookDisplayHeader($params) { $this->hookHeader($params); } public function hookHeader($params) { if (isset($this->context->controller->php_self) && $this->context->controller->php_self == 'index') $this->context->controller->addCSS(_THEME_CSS_DIR_.'product_list.css'); $this->context->controller->addCSS(($this->_path).'homefeatured.css', 'all'); } public function _cacheProducts() { if (!isset(HomeFeatured::$cache_products)) { $category = new Category(Context::getContext()->shop->getCategory(), (int)Context::getContext()->language->id); $nb = (int)Configuration::get('HOME_FEATURED_NBR'); 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 hookDisplayHomeTab($params) { 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) { 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()); } public function hookDisplayHomeTabContent($params) { return $this->hookDisplayHome($params); } public function hookAddProduct($params) { $this->_clearCache('*'); } public function hookUpdateProduct($params) { $this->_clearCache('*'); } public function hookDeleteProduct($params) { $this->_clearCache('*'); } public function hookCategoryUpdate($params) { $this->_clearCache('*'); } public function _clearCache($template, $cache_id = NULL, $compile_id = NULL) { parent::_clearCache('homefeatured.tpl'); parent::_clearCache('tab.tpl', 'homefeatured-tab'); } public function renderForm() { $fields_form = array( 'form' => array( 'legend' => array( 'title' => $this->l('Settings'), 'icon' => 'icon-cogs' ), 'description' => $this->l('To add products to your homepage, simply add them to the root product category (default: "Home").'), 'input' => array( array( 'type' => 'text', 'label' => $this->l('Number of products to be displayed'), 'name' => 'HOME_FEATURED_NBR', 'class' => 'fixed-width-xs', 'desc' => $this->l('Set the number of products that you would like to display on homepage (default: 8).'), ), ), 'submit' => array( 'title' => $this->l('Save'), ) ), ); $helper = new HelperForm(); $helper->show_toolbar = false; $helper->table = $this->table; $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); $helper->default_form_language = $lang->id; $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; $this->fields_form = array(); $helper->id = (int)Tools::getValue('id_carrier'); $helper->identifier = $this->identifier; $helper->submit_action = 'submitHomeFeatured'; $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->tpl_vars = array( 'fields_value' => $this->getConfigFieldsValues(), 'languages' => $this->context->controller->getLanguages(), 'id_language' => $this->context->language->id ); return $helper->generateForm(array($fields_form)); } public function getConfigFieldsValues() { return array( 'HOME_FEATURED_NBR' => Tools::getValue('HOME_FEATURED_NBR', Configuration::get('HOME_FEATURED_NBR')), ); } } Víctor Jospara Edited October 4, 2014 by Asier.S (see edit history) Link to comment Share on other sites More sharing options...
rafaelamargo Posted October 3, 2014 Share Posted October 3, 2014 El codigo que muestras parece de Prestashop 1.6, no de Prestashop 1.5, aunque quizas es posible que hayan metido una actualización importante al módulo y ahora aparezca con ese codigo tambien en la 1.5. Mira ver esto: http://www.prestashop.com/forums/topic/316661-random-home-featured-in-v16/page-3 Link to comment Share on other sites More sharing options...
Asier.S Posted October 3, 2014 Author Share Posted October 3, 2014 (edited) El codigo que muestras parece de Prestashop 1.6, no de Prestashop 1.5, aunque quizas es posible que hayan metido una actualización importante al módulo y ahora aparezca con ese codigo tambien en la 1.5. Mira ver esto: http://www.prestashop.com/forums/topic/316661-random-home-featured-in-v16/page-3 Gracias por la información, pero e probado todas las modificaciones y na de na, no se que tendrá la versión 1.4 pero me parece que pondré alguna versión anterior!! De mientras si alguien descubre algo, o tiene el mismo dilema, que escriba XF.. Ah la versión, que tenia en Prestashop 1.5.3.1 era la 0.9, y aquí si que encontré la manera Edited October 3, 2014 by Asier.S (see edit history) Link to comment Share on other sites More sharing options...
Rolige Posted October 3, 2014 Share Posted October 3, 2014 En el codigo del archivo que muestras arriva tendrias que cambiar la linea: HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'position'); Por esta: HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'position', null, false, true, true, ($nb ? $nb : 8)); Eliminas todo el cache y deberia de funcionar, OJO que no lo he testeado, un saludo. Link to comment Share on other sites More sharing options...
Asier.S Posted October 3, 2014 Author Share Posted October 3, 2014 En el codigo del archivo que muestras arriva tendrias que cambiar la linea: HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'position'); Por esta: HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'position', null, false, true, true, ($nb ? $nb : 8)); Eliminas todo el cache y deberia de funcionar, OJO que no lo he testeado, un saludo. Ok, lo e probado y borrado el cache, pero no ocurre nada, no se actualiza aleatoriamente!! Link to comment Share on other sites More sharing options...
Asier.S Posted October 3, 2014 Author Share Posted October 3, 2014 (edited) Una cosa curiosa, eh descubierto que si guardo un producto desde Catalogo > Productos, y luego actualizo la pagina principal de la tienda, los productos si que cambian el orden, vamos que funciona, pero solo una vez!!!!!! luego por mas que actualizas la pagina no cambia!! No lo entiendo. Edited October 3, 2014 by Asier.S (see edit history) Link to comment Share on other sites More sharing options...
Rolige Posted October 4, 2014 Share Posted October 4, 2014 Probando con otra columna de ordenado deberia funcionar, prueba con la siguiente linea: HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'date_add', null, false, true, true, ($nb ? $nb : 8)); Link to comment Share on other sites More sharing options...
Asier.S Posted October 4, 2014 Author Share Posted October 4, 2014 (edited) Probando con otra columna de ordenado debería funcionar, prueba con la siguiente linea: HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'date_add', null, false, true, true, ($nb ? $nb : 8)); Gracias COTOKO, pero pasa lo mismo, solo se actualiza si antes guardo un producto cualquiera!! Edited October 4, 2014 by Asier.S (see edit history) Link to comment Share on other sites More sharing options...
Rolige Posted October 4, 2014 Share Posted October 4, 2014 Despues de tantos mensajes me di a la tarea de testearlo, el resultado es que la ultima linea de codigo que te di es la correcta, solo que si tienes habilitada la opcion de cache en rendimiento entonces no funcionara, la solucion final teniendo habilitado el cache seria... Primero como ya te lo habia indicado cambiar la linea: HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'position'); Por esta: HomeFeatured::$cache_products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'date_add', null, false, true, true, ($nb ? $nb : 8)); Y segundo, cambiar el codigo: public function hookDisplayHome($params) { 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()); } Por este: public function hookDisplayHome($params) { $this->_clearCache('*'); 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()); } Ahora si lo he testeado con o sin cache habilidato y funciona correctamente, un saludo. 1 Link to comment Share on other sites More sharing options...
Asier.S Posted October 4, 2014 Author Share Posted October 4, 2014 Muchas gracias COTOKO. Esa es la solución, funciona perfecto. Espero no tener efectos secundarios, jaja. Saludos y muchas gracias. Tema Solucionado y cerrado. Link to comment Share on other sites More sharing options...
Rolige Posted August 18, 2015 Share Posted August 18, 2015 Prueba con este.... <?php /* * 2007-2013 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.or...ses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2013 PrestaShop SA * @license http://opensource.or...ses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ if (!defined('_PS_VERSION_')) exit; class HomeFeatured extends Module { private $_html = ''; private $_postErrors = array(); function __construct() { $this->name = 'homefeatured'; $this->tab = 'front_office_features'; $this->version = '1.1'; $this->author = 'PrestaShop'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l('Featured products on the homepage.'); $this->description = $this->l('Displays featured products in the middle of your homepage.'); } function install() { $this->_clearCache('homefeatured.tpl'); Configuration::updateValue('HOME_FEATURED_NBR', 8); if (!parent::install() || !$this->registerHook('displayHome') || !$this->registerHook('header') || !$this->registerHook('addproduct') || !$this->registerHook('updateproduct') || !$this->registerHook('deleteproduct') ) return false; return true; } public function uninstall() { $this->_clearCache('homefeatured.tpl'); return parent::uninstall(); } public function getContent() { $output = '<h2>'.$this->displayName.'</h2>'; if (Tools::isSubmit('submitHomeFeatured')) { $nbr = (int)Tools::getValue('nbr'); if (!$nbr OR $nbr <= 0 OR !Validate::isInt($nbr)) $errors[] = $this->l('An invalid number of products has been specified.'); else Configuration::updateValue('HOME_FEATURED_NBR', (int)($nbr)); if (isset($errors) AND sizeof($errors)) $output .= $this->displayError(implode('<br />', $errors)); else $output .= $this->displayConfirmation($this->l('Your settings have been updated.')); } return $output.$this->displayForm(); } public function displayForm() { $output = ' <form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post"> <fieldset><legend><img src="'.$this->_path.'logo.gif" alt="" title="" />'.$this->l('Settings').'</legend> <p>'.$this->l('To add products to your homepage, simply add them to the "home" category.').'</p><br /> <label>'.$this->l('Define the number of products to be displayed.').'</label> <div class="margin-form"> <input type="text" size="5" name="nbr" value="'.Tools::safeOutput(Tools::getValue('nbr', (int)(Configuration::get('HOME_FEATURED_NBR')))).'" /> <p class="clear">'.$this->l('Define the number of products that you would like to display on homepage (default: 8).').'</p> </div> <center><input type="submit" name="submitHomeFeatured" value="'.$this->l('Save').'" class="button" /></center> </fieldset> </form>'; return $output; } public function hookDisplayHeader($params) { $this->hookHeader($params); } public function hookHeader($params) { $this->context->controller->addCSS(($this->_path).'homefeatured.css', 'all'); } public function hookDisplayHome($params) { $this->_clearCache('*'); if (!$this->isCached('homefeatured.tpl', $this->getCacheId('homefeatured'))) { $category = new Category(Context::getContext()->shop->getCategory(), (int)Context::getContext()->language->id); $nb = (int)Configuration::get('HOME_FEATURED_NBR'); $products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 8), 'date_add', null, false, true, true, ($nb ? $nb : 8)); $this->smarty->assign(array( 'products' => $products, 'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 'homeSize' => Image::getSize(ImageType::getFormatedName('home')), )); } return $this->display(__FILE__, 'homefeatured.tpl', $this->getCacheId('homefeatured')); } public function hookAddProduct($params) { $this->_clearCache('homefeatured.tpl'); } public function hookUpdateProduct($params) { $this->_clearCache('homefeatured.tpl'); } public function hookDeleteProduct($params) { $this->_clearCache('homefeatured.tpl'); } } Link to comment Share on other sites More sharing options...
Recommended Posts