
Chourak
Members-
Posts
6 -
Joined
-
Last visited
Profile Information
-
Activity
Agency
Chourak's Achievements
Newbie (1/14)
5
Reputation
-
Just delete class_index.php from cache folder
-
Comme j'ai eu des soucis de gestion des images j'ai un peu revu ma copie sur les modifications pour afficher plusieurs produits en promotion Je vous colle la fonction entière getRandomSpecial (du fichier classes/Product.php) : /** * Get a random special * * @param integer $id_lang Language id * @return array Special */ public static function getRandomSpecial($id_lang, $beginning = false, $ending = false, Context $context = null) { if (!$context) $context = Context::getContext(); $front = true; if (!in_array($context->controller->controller_type, array('front', 'modulefront'))) $front = false; $current_date = date('Y-m-d H:i:s'); $product_reductions = Product::_getProductIdByDate((!$beginning ? $current_date : $beginning), (!$ending ? $current_date : $ending), $context, true); if ($product_reductions) { $ids_product = ' AND ('; foreach ($product_reductions as $product_reduction) $ids_product .= '( product_shop.`id_product` = '.(int)$product_reduction['id_product'].($product_reduction['id_product_attribute'] ? ' AND product_attribute_shop.`id_product_attribute`='.(int)$product_reduction['id_product_attribute'] :'').') OR'; $ids_product = rtrim($ids_product, 'OR').')'; $groups = FrontController::getCurrentCustomerGroups(); $sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1'); // Please keep 2 distinct queries because RAND() is an awful way to achieve this result $sql = 'SELECT product_shop.id_product, MAX(product_attribute_shop.id_product_attribute) id_product_attribute FROM `'._DB_PREFIX_.'product` p '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (product_shop.id_product = pa.id_product) '.Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.default_on = 1').' WHERE product_shop.`active` = 1 '.(($ids_product) ? $ids_product : '').' AND p.`id_product` IN ( SELECT cp.`id_product` FROM `'._DB_PREFIX_.'category_group` cg LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`) WHERE cg.`id_group` '.$sql_groups.' ) '.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').' AND p.`id_category_default` != 199 GROUP BY product_shop.id_product ORDER BY RAND() LIMIT 0,4'; // ICI ON LIMITE LE NOMBRE DE PRODUITS A AFFICHER(4 dans mon cas) et j'exclue aussi tous les produits de la categorie 199 $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); foreach($result as $res){ if($res['id_product']){ $sql = 'SELECT p.*, product_shop.*, stock.`out_of_stock` out_of_stock, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`, p.`upc`, MAX(image_shop.`id_image`) id_image, il.`legend`, DATEDIFF(product_shop.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new FROM `'._DB_PREFIX_.'product` p LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON ( p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').' ) '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'. Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').' LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$id_lang.') '.Product::sqlStock('p', 0).' WHERE p.id_product = '.(int)$res['id_product'].' GROUP BY product_shop.id_product'; $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql); if($row){ if ($res['id_product_attribute']){ $row['id_product_attribute'] = $res['id_product_attribute']; } $spe[] = Product::getProductProperties($id_lang, $row); } } } return $spe; } else return false; } et dans \themes\VOTRE_THEME\modules\blockspecials\blockspecials.tpl on fait boucler nos produits de la manière suivante : <div class="block_content"> {if $special} {foreach from=$special item=prd name=products} <a href="{$prd.link}"><img src="{$link->getImageLink($prd.link_rewrite, $prd.id_image, 'home_default')}" alt="{$prd.name|escape:html:'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" title="{$prd.name|escape:html:'UTF-8'}" /></a> etc... {/foreach} {/if} </div>
- 25 replies
-
- afficher plusieurs produits
- bloc promotion
-
(and 1 more)
Tagged with:
-
Encore un post déterré ! Je vous propose ici ma solution pour afficher et modifier la date d'ajout d'un produit (pour gérer les nouveautés) sur un PS 1.5.4 Il faut modifier le fichier suivant (et même l'overrider pour bien faire) : VOTRE_DOSSIER_ADMIN\themes\default\template\controllers\products\informations.tpl A partir de la ligne 155 (ca peut-être ailleurs) j'ai rajouté les lignes suivantes : <tr> <td class="col-left"><label>{$bullet_common_field} {l s='Date Nouveauté :'}</label></td> <td style="padding-bottom:5px;"> <input size="55" maxlength="12" type="text" id="date_add" name="date_add" value="{$product->date_add|htmlentitiesUTF8|date_format:'%Y-%m-%d'}" style="width: 150px; margin-right: 5px;" class="updateCurrentText" /> </td> </tr> Et pour le côté friendly de la gestion de la date on rajoute le code suivant (gestion du datepicker) tout en haut de la page : <script type="text/javascript"> {literal} $(function(){ $('#date_add').datepicker({ dateFormat:'yy-mm-dd' }); }); {/literal} </script> Note : Pour plus de simplicité (et parce que je n'ai pas le temps de faire plus) j'ai laissé le format de la date comme il est configuré dans la base de données (datetime : yyyy-mm-dd mais sans les heures,minutes et secondes)
-
Avec la boucle foreach que j'ai donné rappel : {foreach from=$special item=specials name=products} {/foreach} J'ai le code suivant pour afficher mon image produit (réglée sur la taille home) : <a href="{$specials.link}"> <img src="{$link->getImageLink($specials.link_rewrite, $specials.id_image, 'home_default')}" alt="{$specials.legend|escape:html:'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" title="{$specials.name|escape:html:'UTF-8'}" /> </a>
- 25 replies
-
- afficher plusieurs produits
- bloc promotion
-
(and 1 more)
Tagged with:
-
Bonjour, en cherchant un peu et bidouillant salement j'ai réussi a me dépatouiller (PS v 1.5.4) : D'abord dans classes/Product.php (il faudrait prendre soin de l'overrider - ce que je n'ai pas fait) Dans la fonction getRandomSpecial : a la fin de la 1ere requête SQL ($sql) ligne 2129 , on fixe la limite d'affichage, chez moi 4 donc : ORDER BY RAND() LIMIT 4'; et juste à la suite : $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); foreach ($result as $row){ $r = Product::getProductProperties($id_lang, $row); $rows[] = $r; } return $rows; Ensuite je commente tout le reste jusque la fin (c'est sale j'avais prévenu) Dans blockspecials.tpl(depuis votre theme/modules/blockspecials.tpl) il suffit d'utiliser une boucle foreach de type : {foreach from=$special item=specials name=products} exemple : {foreach from=$special item=specials name=products} {$specials.name|escape:html:'UTF-8'} {/foreach} C'est loin d'être parfait et propre mais ca convient à ce que je voulais mettre en place. Si ca peut aider
- 25 replies
-
- 1
-
-
- afficher plusieurs produits
- bloc promotion
-
(and 1 more)
Tagged with: