kimzey Posted May 14, 2010 Share Posted May 14, 2010 Bonjour,Je cherche actuellement un moyen pour rendre l'affichage des nouveaux produits aléatoire comme pour le module Promo par exemple.J'ai fais une recherche sur ce forum mais je n'ai rien trouvé et mes bidouillages de code n'ont rien donnés non plus.Alors si l'un d'entre vous a une piste je suis preneur.Merci Link to comment Share on other sites More sharing options...
cybersteph Posted May 14, 2010 Share Posted May 14, 2010 Tiens, si cela peut être utile j'ai un ch'ti module pour afficher en page central, défilement automatique.A+ slidenewproducts.zip Link to comment Share on other sites More sharing options...
kimzey Posted May 14, 2010 Author Share Posted May 14, 2010 Merci pour ta proposition mais ma page centrale est déjà chargée donc ce n'est pas envisageable. Link to comment Share on other sites More sharing options...
kimzey Posted May 16, 2010 Author Share Posted May 16, 2010 je me permets de relancer mon sujet.Bonne fin de WE à tous Link to comment Share on other sites More sharing options...
Divine Posted May 16, 2010 Share Posted May 16, 2010 Hello,As-tu été voir sur Prestatools si un module peut répondre à tes attentes ? Link to comment Share on other sites More sharing options...
kimzey Posted May 16, 2010 Author Share Posted May 16, 2010 Oui bien sur et malheureusement aucun ne correspond vraiment à ce que je veux. En effet il existe des carrousels mais en ayant déjà un en page d'accueil j'ai peur que ça fasse troo much d'en rajouter un sur le coté. Link to comment Share on other sites More sharing options...
jeckyl Posted May 16, 2010 Share Posted May 16, 2010 Salut,Si tu veux tu peux changer le classement des produits dans le tableau envoyé par le fichier php du module.en utilisant shuffle();Il faut rajouter shuffle($newProducts); avant d'envoyer le tableau. $newProducts = Product::getNewProducts(intval($params['cookie']->id_lang), 0, intval(Configuration::get('NEW_PRODUCTS_NBR'))); shuffle($newProducts); $smarty->assign(array('new_products' => $newProducts, 'mediumSize' => Image::getSize('medium'))); return $this->display(__FILE__, 'blocknewproducts.tpl'); Testé et approuvé sur mon site. Link to comment Share on other sites More sharing options...
kimzey Posted May 17, 2010 Author Share Posted May 17, 2010 Merci je m'en vais tester ça tout de suite ! Link to comment Share on other sites More sharing options...
kimzey Posted May 17, 2010 Author Share Posted May 17, 2010 Je viens de tester ton code et il marche parfaitement !Par contre il ne fait tourner que les produits s'affichant dans le bloc et j'aimerai qu'il face tourner l'ensemble du catalogue nouveaux produits (une trentaine de références ). Le seul moyen que j'ai trouvé est de configurer le bloc pour qu'il affiche 30 produits mais ça casse complétement l'équilibre visuel du site. Existe t'il un moyen pour qu'il fasse tourner l'ensemble des références ?Merci encore pour votre aide. Link to comment Share on other sites More sharing options...
bechir Posted May 17, 2010 Share Posted May 17, 2010 Bonjour,Je pense que l'affichage de 10 produits(il ne fait tourner que les produits s’affichant dans le bloc) seulement dans le block newproducts est lié à la requette qui selectionne les nouveaux produits dans la classe classes/Product.php dans la function getNewProducts(), ceci est lié à ORDER BY(),Si vous regarder la function getRandomSpecial ,dans le méme classe, qui retourne la liste des produits en promotion vous allez trouvé un ORDER BY RAND(), c-a-dire une selection alléatoire, alors je pense que ORDER BY RAND() peut vous aider. Link to comment Share on other sites More sharing options...
jeckyl Posted May 17, 2010 Share Posted May 17, 2010 Bonjour,tout à fait bechir, par contre je déconseil de modifier une classe pour ce genre de chose, car après lors d'une mise à jour, cela complique tout.Donc, préférez récupérer la requête pour l'adapter et l'intégrer au php du module. Link to comment Share on other sites More sharing options...
bechir Posted May 17, 2010 Share Posted May 17, 2010 Oui tout à fait, On peut par exemple appeller le order by à partir du php du module en remplacant$newProducts = Product::getNewProducts(intval($params['cookie']->id_lang), 0, Configuration::get('NEW_PRODUCTS_NBR'));par$newProducts = Product::getNewProducts(intval($params['cookie']->id_lang), 0, Configuration::get('NEW_PRODUCTS_NBR'),false, 'RAND()');j'ai pas tester ca, mais je pense que c comme ca qu on peut faire. Link to comment Share on other sites More sharing options...
kimzey Posted May 17, 2010 Author Share Posted May 17, 2010 Je viens de tester les deux morceaux de code que vous m'avez fourni est malheureusement ils ne marchent pas, j'ai un message dans mon bloc:" pas de nouveau produits"Merci en tout cas de m'aider ! Link to comment Share on other sites More sharing options...
jeckyl Posted May 17, 2010 Share Posted May 17, 2010 Le random semble ne pas fonctionner dan l'ordre d'affichage. Link to comment Share on other sites More sharing options...
bechir Posted May 17, 2010 Share Posted May 17, 2010 Le principe est de faire une requette de cette facon"SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`, i.`id_image`, il.`legend`, t.`rate`, m.`name` AS manufacturer_name FROM `ps_product` p LEFT JOIN `ps_product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = 2) LEFT JOIN `ps_image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1) LEFT JOIN `ps_image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = 2) LEFT JOIN `ps_tax` t ON (t.`id_tax` = p.`id_tax`) LEFT JOIN `ps_manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`) WHERE p.`active` = 1 AND DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL 20 DAY)) > 0 AND p.`id_product` IN ( SELECT cp.`id_product` FROM `ps_category_group` cg LEFT JOIN `ps_category_product` cp ON (cp.`id_category` = cg.`id_category`) WHERE cg.`id_group` = 1 ) ORDER BY RAND() LIMIT 0, 5"Ca ,vous pouvez le faire à partir du classe Product.php en remplacant la ligne 1015 :"ORDER BY '.(isset($orderByPrefix) ? pSQL($orderByPrefix).'.' : '').'`'.pSQL($orderBy).'` '.pSQL($orderWay).'"Par"ORDER BY RAND()"NB: Ajouter des parenthèse à la fin de la fonction RANDMais comme Jeckyle a dit, on préfére de ne pas toucher à la classe pour les raisons de mis à jour. Link to comment Share on other sites More sharing options...
kimzey Posted May 18, 2010 Author Share Posted May 18, 2010 merci pour votre aide mais la manipulation me semble un peu trop complexe pour moi donc je me contenterai du module par défaut.Je tiens une nouvelle fois à saluer l'esprit d'entraide qui règne sur ce forum, MERCI ! Link to comment Share on other sites More sharing options...
stephane-v Posted July 23, 2010 Share Posted July 23, 2010 Bonjour,Je viens de trouver une solution au problème pour laquelle on ne modifie que les fichiers blocknewproducts.php et blocknewproducts.php.tpl. L'idée est la suivante :- Dans le backoffice, configurer le nombre de nouveaux produits à afficher avec une valeur élevée qui correspond aux nombre des derniers nouveaux produits parmi lesquels on veut que le choix aléatoire se fasse (c'est clair ?)- Modifier le fichier blocknewproducts.php pour que les produits soient mélangés avec l'instruction shuffle (merci jeckyl ;-) ): $newProducts = Product::getNewProducts(intval($params['cookie']->id_lang), 0, intval(Configuration::get('NEW_PRODUCTS_NBR'))); shuffle($newProducts); $smarty->assign(array('new_products' => $newProducts, 'mediumSize' => Image::getSize('medium'))); - Modifier le fichier blocknewproducts.tpl pour limiter la boucle d'affichage au nombre de produits à afficher (4 dans l'exemple, donc on teste si l'index est inférieur à 5) : {foreach from=$new_products item=newproduct name=myLoop} {if $smarty.foreach.myLoop.index < 5} {$newproduct.name|strip_tags|escape:html:'UTF-8'} {if $newproduct.description_short}{$newproduct.description_short|strip_tags:'UTF-8'|truncate:50:'...'} >" src="{$img_dir}bullet.gif"/>{/if} {/if} {/foreach} Les fichiers sont ceux de la version 1.3.1Cela fonctionne trés bien comme vous pouvez le voir sur mon site : www.playdsir.comTotuefois, je suppose que comme on demande un plus grand nombre de resultats à la base SQL, cela utilise plus de ressources sur le serveur et augmente le temps de chargement des pages... à vérifier. blocknewproducts.php 1 Link to comment Share on other sites More sharing options...
zedcharly Posted June 4, 2013 Share Posted June 4, 2013 (edited) En 1.4.6.2 pour avoir un affichage 1 / 2 ou n produits dans la colonne : $newProducts = Product::getNewProducts((int)($params['cookie']->id_lang), 0, intval(Configuration::get('NEW_PRODUCTS_NBR'))); if (!$newProducts AND !Configuration::get('PS_BLOCK_NEWPRODUCTS_DISPLAY')) return; shuffle($newProducts); // changer nb de array_slice(array,x,nb) pour changer le nombre de produits affichés $smarty->assign(array('new_products' => array_slice($newProducts,0,2), 'mediumSize' => Image::getSize('medium'))); Edited June 4, 2013 by zedcharly (see edit history) Link to comment Share on other sites More sharing options...
zedcharly Posted June 4, 2013 Share Posted June 4, 2013 En 1.4.6.2 pour avoir un affichage 1 / 2 ou n produits dans la colonne : $newProducts = Product::getNewProducts((int)($params['cookie']->id_lang), 0, intval(Configuration::get('NEW_PRODUCTS_NBR'))); if (!$newProducts AND !Configuration::get('PS_BLOCK_NEWPRODUCTS_DISPLAY')) return; shuffle($newProducts); // changer nb de array_slice(array,x,nb) pour changer le nombre de produits affichés $smarty->assign(array('new_products' => array_slice($newProducts,0,2), 'mediumSize' => Image::getSize('medium'))); Link to comment Share on other sites More sharing options...
utaku Posted April 19, 2014 Share Posted April 19, 2014 quelqu'un à une idée pour rendre ceci compatible avec PS 1.6 ? merci Link to comment Share on other sites More sharing options...
Guillaumeb59 Posted June 11, 2014 Share Posted June 11, 2014 Bonjour, je suis moi aussi intéressé pour une solution sur la 1.6 si jamais quelqu'un a une solution. Merci d'avance ! Link to comment Share on other sites More sharing options...
mams13 Posted October 11, 2014 Share Posted October 11, 2014 je suis moi aussi intéressé. quelqu'un a t'il trouvé une solution ou un module pour l'affichage aléatoire? Link to comment Share on other sites More sharing options...
2FR3 Posted October 11, 2014 Share Posted October 11, 2014 Bonjour, Ce post peut vous aider: http://www.prestashop.com/forums/topic/316661-random-home-featured-in-v16 Testé et approuvé sur ma boutique Link to comment Share on other sites More sharing options...
cycleelcyc Posted April 28, 2015 Share Posted April 28, 2015 quelqu'un à une idée pour rendre ceci compatible avec PS 1.6 ? merci moi aussi, je suis intéressé la solution pour PS1.6 Link to comment Share on other sites More sharing options...
cycleelcyc Posted April 28, 2015 Share Posted April 28, 2015 Bonjour, Ce post peut vous aider: http://www.prestashop.com/forums/topic/316661-random-home-featured-in-v16 Testé et approuvé sur ma boutique testé, mais pas pour le block "Nouveaux Produits" Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now