Jump to content

Chourak

Members
  • Posts

    6
  • Joined

  • Last visited

Profile Information

  • Activity
    Agency

Chourak's Achievements

Newbie

Newbie (1/14)

5

Reputation

  1. Just delete class_index.php from cache folder
  2. 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>
  3. 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)
  4. Je déterre un peu ce post pour juste linker un lien vers la doc Smarty pour le formattage des dates : http://www.smarty.net/docsv2/fr/language.modifier.date.format.tpl
  5. 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>
  6. 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
×
×
  • Create New...