From d574f924118a9b71e3c0b5e203907482e02072d1 Mon Sep 17 00:00:00 2001 From: Damien Metzger Date: Fri, 28 Jun 2013 18:26:42 +0200 Subject: [PATCH] [*] FO : added smarty cache to blockspecials --- modules/blockspecials/blockspecials.php | 68 +++++++++++++++---- modules/blockspecials/config.xml | 2 +- modules/blockspecials/upgrade/install-1.0.php | 10 +++ 3 files changed, 66 insertions(+), 14 deletions(-) create mode 100644 modules/blockspecials/upgrade/install-1.0.php diff --git a/modules/blockspecials/blockspecials.php b/modules/blockspecials/blockspecials.php index 24d03fbc1..4c732c099 100644 --- a/modules/blockspecials/blockspecials.php +++ b/modules/blockspecials/blockspecials.php @@ -36,7 +36,7 @@ class BlockSpecials extends Module { $this->name = 'blockspecials'; $this->tab = 'pricing_promotion'; - $this->version = '0.8'; + $this->version = '1.0'; $this->author = 'PrestaShop'; $this->need_instance = 0; @@ -48,7 +48,23 @@ class BlockSpecials extends Module public function install() { - return (parent::install() AND $this->registerHook('rightColumn') AND $this->registerHook('header')); + if (!Configuration::get('BLOCKSPECIALS_NB_CACHES')) + Configuration::updateValue('BLOCKSPECIALS_NB_CACHES', 20); + $this->_clearCache('blockspecials.tpl'); + + return (parent::install() + && $this->registerHook('rightColumn') + && $this->registerHook('header') + && $this->registerHook('addproduct') + && $this->registerHook('updateproduct') + && $this->registerHook('deleteproduct') + ); + } + + public function uninstall() + { + $this->_clearCache('blockspecials.tpl'); + return parent::uninstall(); } public function getContent() @@ -56,7 +72,8 @@ class BlockSpecials extends Module $output = '

'.$this->displayName.'

'; if (Tools::isSubmit('submitSpecials')) { - Configuration::updateValue('PS_BLOCK_SPECIALS_DISPLAY', (int)(Tools::getValue('always_display'))); + Configuration::updateValue('PS_BLOCK_SPECIALS_DISPLAY', (int)Tools::getValue('always_display')); + Configuration::updateValue('BLOCKSPECIALS_NB_CACHES', (int)Tools::getValue('BLOCKSPECIALS_NB_CACHES')); $output .= '
'.$this->l('Settings updated').'
'; } return $output.$this->displayForm(); @@ -76,6 +93,11 @@ class BlockSpecials extends Module

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

+ +
+ +

'.$this->l('Specials are displayed randomly on the front end, but since it takes a lot of ressources, it is better to cache the results. Cache is reset everyday. 0 will disable the cache.').'

+
'; @@ -84,18 +106,24 @@ class BlockSpecials extends Module public function hookRightColumn($params) { if (Configuration::get('PS_CATALOG_MODE')) - return ; - - if (!($special = Product::getRandomSpecial((int)$params['cookie']->id_lang)) && !Configuration::get('PS_BLOCK_SPECIALS_DISPLAY')) return; + + // We need to create multiple caches because the products are sorted randomly + $random = date('Ymd').'|'.round(rand(1, max(Configuration::get('BLOCKSPECIALS_NB_CACHES'), 1))); - $this->smarty->assign(array( - 'special' => $special, - 'priceWithoutReduction_tax_excl' => Tools::ps_round($special['price_without_reduction'], 2), - 'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')), - )); + if (!Configuration::get('BLOCKSPECIALS_NB_CACHES') || !$this->isCached('blockspecials.tpl', $this->getCacheId('blockspecials|'.$random))) + { + if (!($special = Product::getRandomSpecial((int)$params['cookie']->id_lang)) && !Configuration::get('PS_BLOCK_SPECIALS_DISPLAY')) + return; - return $this->display(__FILE__, 'blockspecials.tpl'); + $this->smarty->assign(array( + 'special' => $special, + 'priceWithoutReduction_tax_excl' => Tools::ps_round($special['price_without_reduction'], 2), + 'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')), + )); + } + + return $this->display(__FILE__, 'blockspecials.tpl', $this->getCacheId('blockspecials|'.$random)); } public function hookLeftColumn($params) @@ -109,5 +137,19 @@ class BlockSpecials extends Module return ; $this->context->controller->addCSS(($this->_path).'blockspecials.css', 'all'); } -} + public function hookAddProduct($params) + { + $this->_clearCache('blockspecials.tpl'); + } + + public function hookUpdateProduct($params) + { + $this->_clearCache('blockspecials.tpl'); + } + + public function hookDeleteProduct($params) + { + $this->_clearCache('blockspecials.tpl'); + } +} \ No newline at end of file diff --git a/modules/blockspecials/config.xml b/modules/blockspecials/config.xml index e903067d0..613f0cc76 100755 --- a/modules/blockspecials/config.xml +++ b/modules/blockspecials/config.xml @@ -2,7 +2,7 @@ blockspecials - + diff --git a/modules/blockspecials/upgrade/install-1.0.php b/modules/blockspecials/upgrade/install-1.0.php new file mode 100644 index 000000000..3dbc3bfe0 --- /dev/null +++ b/modules/blockspecials/upgrade/install-1.0.php @@ -0,0 +1,10 @@ +registerHook('addproduct') && $object->registerHook('updateproduct') && $object->registerHook('deleteproduct')); +}