* @copyright 2007-2011 PrestaShop SA * @version Release: $Revision: 8783 $ * @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 BlockBestSellers extends Module { private $_html = ''; private $_postErrors = array(); public function __construct() { $this->name = 'blockbestsellers'; $this->tab = 'front_office_features'; $this->version = '1.1'; $this->author = 'PrestaShop'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l('Top seller block'); $this->description = $this->l('Add a block displaying the shop\'s top sellers.'); } /** * @see ModuleCore::install() */ public function install() { if (!parent::install() OR !$this->registerHook('rightColumn') OR !$this->registerHook('header') OR !$this->registerHook('bestSaleCart') OR !$this->registerHook('updateOrderStatus') OR !ProductSale::fillProductSales()) return false; return true; } /** * Called in administration -> module -> configure */ public function getContent() { $output = '

'.$this->displayName.'

'; if (Tools::isSubmit('submitBestSellers')) { Configuration::updateValue('PS_BLOCK_BESTSELLERS_DISPLAY', (int)(Tools::getValue('always_display'))); $output .= '
'.$this->l('Confirmation').''.$this->l('Settings updated').'
'; } return $output.$this->displayForm(); } public function displayForm() { return '
'.$this->l('Settings').'

'.$this->l('Show the block even if no product is available.').'

'; } public function hookRightColumn($params) { if (Configuration::get('PS_CATALOG_MODE')) return ; global $cookie, $smarty, $cart; $step = Tools::getValue('step'); if(!$step || ($step && $step != 3 && $step != 4)) { $id_lang = $cookie->id_lang; $id_lang = $cookie->id_lang; $filename = _PS_ROOT_DIR_.'/modules/blockbestsellers/blockbestsellers_'.$id_lang.'.txt'; $expire = time() -3600; if(file_exists($filename) && filemtime($filename) > $expire) { $data = file_get_contents($filename); $best_sellers = json_decode($data, TRUE); } else { $file = fopen($filename, 'w+'); $currency = new Currency((int)($params['cookie']->id_currency)); $bestsellers = ProductSale::getBestSalesVp((int)($params['cookie']->id_lang), 0, 5, NULL, NULL, 10); if (!$bestsellers AND !Configuration::get('PS_BLOCK_BESTSELLERS_DISPLAY')) return; $best_sellers = array(); if($bestsellers) foreach ($bestsellers AS $bestseller) { $bestseller['price'] = Tools::displayPrice(Product::getPriceStatic((int)($bestseller['id_product'])), $currency); $best_sellers[] = $bestseller; } fwrite($file, json_encode($best_sellers)); fclose($file); } $smarty->assign(array( 'best_sellers' => $best_sellers, 'mediumSize' => Image::getSize('medium')) ); return $this->display(__FILE__, 'blockbestsellers_'.(int) $cookie->id_lang.'.tpl'); } } // Best sale on lightbox add to cart public function hookbestSaleCart($params){ if(_PS_MOBILE_) { return false; } global $smarty; global $cookie; $id_lang = $cookie->id_lang; $filename = _PS_ROOT_DIR_.'/modules/blockbestsellers/blockbestsellers_cart_'.$id_lang.'.txt'; $expire = time() -3600; if(file_exists($filename) && filemtime($filename) > $expire) { $data = file_get_contents($filename); $best_sellers = json_decode($data, TRUE); } else { $file = fopen($filename, 'w+'); $currency = new Currency((int)($params['cookie']->id_currency)); $bestsellers = ProductSale::getBestSalesVp((int)($params['cookie']->id_lang), 0, 3, NULL, NULL, 10); if (!$bestsellers AND !Configuration::get('PS_BLOCK_BESTSELLERS_DISPLAY')) return; $best_sellers = array(); if($bestsellers) foreach ($bestsellers AS $bestseller) { $bestseller['price'] = Tools::displayPrice(Product::getPriceStatic((int)($bestseller['id_product'])), $currency); $best_sellers[] = $bestseller; } fwrite($file, json_encode($best_sellers)); fclose($file); } $smarty->assign( array( 'best_sellers' => $best_sellers, ) ); return $this->display(__FILE__, 'blockbestsellers_cart_'.(int) $id_lang.'.tpl'); } public function hookbestSaleHome($params) { if(_PS_MOBILE_) { return false; } global $smarty; global $cookie; $id_lang = $cookie->id_lang; $filename = _PS_ROOT_DIR_.'/modules/blockbestsellers/blockbestsellers_home_'.$id_lang.'.txt'; $expire = time() -3600; if(file_exists($filename) && filemtime($filename) > $expire) { $data = file_get_contents($filename); $best_sellers = json_decode($data, TRUE); } else { $file = fopen($filename, 'w+'); $currency = new Currency((int)($params['cookie']->id_currency)); $bestsellers = ProductSale::getBestSalesVp((int)($params['cookie']->id_lang), 0, 5, NULL, NULL, 10); if (!$bestsellers AND !Configuration::get('PS_BLOCK_BESTSELLERS_DISPLAY')) return; $best_sellers = array(); if($bestsellers) foreach ($bestsellers AS $bestseller) { $bestseller['price'] = Tools::displayPrice(Product::getPriceStatic((int)($bestseller['id_product'])), $currency); $best_sellers[] = $bestseller; } fwrite($file, json_encode($best_sellers)); fclose($file); } $smarty->assign( array( 'best_sellers' => $best_sellers, ) ); return $this->display(__FILE__, 'blockbestsellers_home_'.(int) $cookie->id_lang.'.tpl'); } public function hookProductFooter($params) { if(_PS_MOBILE_) { return false; } global $smarty; global $cookie; $id_lang = $cookie->id_lang; $filename = _PS_ROOT_DIR_.'/modules/blockbestsellers/blockbestsellers_productfooter_'.$id_lang.'.txt'; $expire = time() -3600; if(file_exists($filename) && filemtime($filename) > $expire) { $data = file_get_contents($filename); $best_sellers = json_decode($data, TRUE); } else { $file = fopen($filename, 'w+'); $currency = new Currency((int)($params['cookie']->id_currency)); $bestsellers = ProductSale::getBestSalesVp((int)($params['cookie']->id_lang), 0, 6, NULL, NULL, 10); if (!$bestsellers AND !Configuration::get('PS_BLOCK_BESTSELLERS_DISPLAY')) return; $best_sellers = array(); if($bestsellers) foreach ($bestsellers AS $bestseller) { $bestseller['price'] = Tools::displayPrice(Product::getPriceStatic((int)($bestseller['id_product'])), $currency); $best_sellers[] = $bestseller; } fwrite($file, json_encode($best_sellers)); fclose($file); } $smarty->assign( array( 'best_sellers' => $best_sellers, ) ); return $this->display(__FILE__, 'blockbestsellers_productfooter_'.(int) $cookie->id_lang.'.tpl'); } public function hookLeftColumn($params) { if(_PS_MOBILE_) { return false; } return $this->hookRightColumn($params); } public function hookHeader($params) { if (Configuration::get('PS_CATALOG_MODE')) return ; Tools::addCSS(($this->_path).'blockbestsellers.css', 'all'); } public function hookHome($params) { if (Configuration::get('PS_CATALOG_MODE')) return ; global $smarty; $currency = new Currency((int)($params['cookie']->id_currency)); $bestsellers = ProductSale::getBestSalesLight((int)($params['cookie']->id_lang), 0, 4); if (!$bestsellers AND !Configuration::get('PS_BLOCK_BESTSELLERS_DISPLAY')) return; $best_sellers = array(); if($bestsellers) foreach ($bestsellers AS $bestseller) { $bestseller['price'] = Tools::displayPrice(Product::getPriceStatic((int)($bestseller['id_product'])), $currency); $best_sellers[] = $bestseller; } $smarty->assign(array( 'best_sellers' => $best_sellers, 'homeSize' => Image::getSize('home'))); return $this->display(__FILE__, 'blockbestsellers-home.tpl'); } }