bebeboutik/modules/privatesales_similarproducts/privatesales_similarproducts.php

206 lines
4.6 KiB
PHP
Executable File

<?php
if (!defined('_PS_VERSION_'))
exit;
class Privatesales_similarproducts extends Module
{
private $_html = '';
private $_postErrors = array();
private $hooks = array(
'similarProduct' => array('Accessories or similar products', 'Called on displaying similar product in product details'),
);
public function __construct()
{
$this->name = 'privatesales_similarproducts';
$this->tab = 'front_office_features';
$this->version = '1.0';
$this->author = 'Antadis';
$this->need_instance = 0;
parent::__construct();
$this->displayName = $this->l('Produits complémentaires ou similaires');
$this->description = $this->l('Ajoute un bloc affichant les produits complémentaires (accessoires) ou les meilleures ventes de la famille d\'un produit.');
}
/**
* @see ModuleCore::install()
*/
public function install()
{
// Add custom hooks
foreach($this->hooks as $k => $v) {
if(count(Db::getInstance()->ExecuteS('
SELECT `id_hook`
FROM `'._DB_PREFIX_.'hook`
WHERE `name` = "'.$k.'"
LIMIT 1
')) == 0) {
Db::getInstance()->ExecuteS('
INSERT INTO `'._DB_PREFIX_.'hook`
VALUES (DEFAULT, "'.$k.'", "'.$v[0].'", "'.$v[1].'", 0, 0)
');
}
}
if (!parent::install() ||
!$this->registerHook('similarProduct')) {
$this->uninstall();
return false;
}
return true;
}
public function uninstall()
{
// Remove custom hooks
foreach($this->hooks as $k => $v) {
Db::getInstance()->Execute('
DELETE FROM `'._DB_PREFIX_.'hook`
WHERE `name` = "'.$k.'"
');
}
parent::uninstall();
}
public function hookSimilarProduct($params)
{
if(_PS_MOBILE_) {
return false;
}
$result = $this->displayAccessories($params);
if ($result=='') {
return $this->displayBestVPSalesSameFamily($params);
}
return $result;
}
private function displayAccessories($params)
{
global $smarty;
$cache_params = [
'prefix_cache' => '1_'.$params['product']->id
];
if (!$this->isTemplateCached($cache_params)) {
$currency = new Currency((int)($params['cookie']->id_currency));
// get all accessories of this product
$other_products = array();
$accessories = $params['product']->getAccessories($params['cookie']->id_lang);
if(is_array($accessories)) {
foreach ($accessories AS $accessory)
{
$accessory['price'] = Tools::displayPrice(Product::getPriceStatic((int)($accessory['id_product'])), $currency);
$other_products[] = $accessory;
}
}
if (empty($other_products)) {
return '';
}
$smarty->assign(
array(
'is_accessories' => TRUE,
'ps_other_products' => $other_products,
)
);
}
return $this->flushTemplateCache($cache_params);
}
private function displayBestVPSalesSameFamily($params)
{
global $smarty;
$cache_params = [
'prefix_cache' => '2_'.$params['sale']->id,
];
if (!$this->isTemplateCached($cache_params)) {
$currency = new Currency((int)($params['cookie']->id_currency));
// get all best sales of the product family
$other_products = array();
$family = ProductSale::getSaleFamily(
$params['sale']->id,
$params['cookie']->id_lang
);
$bestsellers = ProductSale::getFamilyBestSales(
$family['id_category_family'],
$params['cookie']->id_lang,
0, 3, NULL, NULL, 10
);
$family_name = '';
if(is_array($bestsellers)) {
foreach ($bestsellers AS $bestseller) {
$bestseller['price'] = Tools::displayPrice(Product::getPriceStatic((int)($bestseller['id_product'])), $currency);
$other_products[] = $bestseller;
$family_name = $bestseller['category'];
}
}
if (empty($other_products)) {
return '';
}
$smarty->assign(
array(
'is_accessories' => FALSE,
'ps_other_products' => $other_products,
'family_name' => $family['name']
)
);
}
return $this->flushTemplateCache($cache_params);
}
private function isTemplateCached(&$cache_params)
{
global $smarty;
global $cookie;
Tools::enableCache();
$smarty->cache_lifetime = 3600;
$cache_params['compile_id'] = $cache_params['prefix_cache'].'_'.(int)$cookie->id_lang;
$cache_params['cache_id'] = $cache_params['compile_id'].'_front_similarproducts';
return $this->isCached(
'front_similarproducts.tpl',
$cache_params['cache_id'],
$cache_params['compile_id']
);
}
private function flushTemplateCache($cache_params)
{
global $smarty;
$display = $this->display(
__FILE__,
'front_similarproducts.tpl' ,
$cache_params['cache_id'],
$cache_params['compile_id']
);
Tools::restoreCacheSettings();
$smarty->cache_lifetime = -1;
return $display;
}
}