Jump to content

Problème comparateur produits


Recommended Posts

Bonjour à tous,

 

Les produits cochés une fois dans le comparateur le reste toujours... Il faut donc décocher les produits sélectionnés pour pouvoir lancer une nouvelle comparaison.

 

Pire, si j'ai 3 produits cochés dans 3 différentes catégories, il compare les produits des différentes catégories!!! Par exemple il compare une tondeuse avec un lecteur MP3!!!!

 

Ma question est:

 

- comment faire pour que le comparateur se réinitialise après chaque utilisation?

- comment éviter la comparaison entre différentes catégories?

 

Merci d'avance de votre aide.

Bonne journée

 

p.s.: j'utilise la version 1.4.7, en local (j'ai activé "forcer compilation" et désactivé "cache")

Link to comment
Share on other sites

Bonjour,

 

Désolé de remonter ce sujet, mais j'ai le même problème. Car oui, pour moi c'est un problème. Si on quitte son navigateur et qu'on revient, le comparateur garde les précédents produits comparés.

 

Résultat, un internaute qui a fait précédemment une comparaison ne peut plus en faire et a certainement oublié qu'il en avait fait une précédemment et ne pense de toute façon pas à supprimer les produits du comparateur... Cela devrait être automatique, comme sur de nombreux sites e-commerces connus !

 

C'est pour moi un problème de session ou de cookie, mais certainement pas un comportement normal.

 

Il faudrait vraiment corriger ca, car je le répète, ce n'est pas un comportement normal...

 

Merci

Link to comment
Share on other sites

  • 2 months later...

Bonjour

 

Je viens effectivement de goûter au problème que vous évoquez, et je n'aurais en effet jamais pû imaginer qu'après avoir quitté la connexion au site, les produits puissent rester dans le comparateur. C'est un non sens.

 

Mais il y a un autre problème : la fonction "retirer" poubelle pour enlever un produit du comparateur ne marche pas.

 

Dans l'attente d'une correction urgente - merci

Link to comment
Share on other sites

  • 1 month later...
  • 1 month later...

Bonjour, j'UP ce post pour tout ceux qui ont rencontré ce problème et qui cherche encore une solution.

 

J'ai rencontré le même problème aujourd'hui et effectivement je trouve aussi qu'il s'agit là d'une "aberration" de prestashop.

 

Bref pour contourner ce problème, il suffit d'une petite modification dans CompareProduct.php (situé dans le dossier Classe à la racine de votre site).

 

On peut y voir qu'en fait le comparateur charge dans la base de donnée SQL les choix effectués par les visiteurs en leur attribuant un ID unique (ce qui est bien dégeulasse soi-dit en passant, imaginez avec un traffic de 1000 visiteurs par jour si chacun charge 3 produits dans le comparateur -> 3000 entrées dans la bdd juste pour ça alors qu'un petit script js aurait très bien gerer ca "client-side" enfin bon ...)

 

Une fois dans le fichier CompareProduct.php cherchez la fonction "getCompareProducts" qui récupere les produits en bdd pour un id visiteur donné.

 

Il suffit juste d'ajouter un bout de code tiré de la fonction removeCompareProduct qui supprimera les choix de l'utilisateur en bdd juste après les avoir récupérés.

 

En gros la fonction getCompareProduct est appelé quand un client clique sur "comparer", le but est donc de récuperer les produits que la personne veut comparer afin de les afficher correctement, mais égalemment de les supprimer de la base de donnée avant de les retourner, ainsi ils ne seront plus en mémoire lors d'une future comparaison

 

Voici le code à recuperer de la fonction removeCompareProduct :

 

Db::getInstance()->Execute('

DELETE cp FROM `'._DB_PREFIX_.'compare_product` cp, `'._DB_PREFIX_.'compare` c

WHERE cp.`id_compare`=c.`id_compare`

AND cp.`id_product` = '.(int)($id_product).'

AND c.`id_compare` = '.(int)$id_compare);

 

On enleve la ligne AND cp.`id_product` = '.(int)($id_product).' puisqu'on ne veut pas supprimer UN mais TOUT les produits stockés pour l'utilisateur en BDD, puis on rajoute ce bout de code avant le "return" de la fonction getCompareProducts

 

Vous devriez donc vous retrouver avec une fonction getCompareProducts qui ressemble à ceci :

public static function getCompareProducts($id_compare)

{

$results = Db::getInstance()->ExecuteS('

SELECT DISTINCT `id_product`

FROM `'._DB_PREFIX_.'compare` c

LEFT JOIN `'._DB_PREFIX_.'compare_product` cp ON (cp.`id_compare` = c.`id_compare`)

WHERE cp.`id_compare` = '.(int)($id_compare));

 

$compareProducts = null;

 

if ($results)

foreach ($results as $result)

$compareProducts[] = $result['id_product'];

 

/* Supprime les choix en BDD */

Db::getInstance()->Execute('

DELETE cp FROM `'._DB_PREFIX_.'compare_product` cp, `'._DB_PREFIX_.'compare` c

WHERE cp.`id_compare`=c.`id_compare`

AND c.`id_compare` = '.(int)$id_compare);

 

return $compareProducts;

}

 

Voilà, j'espère avoir pu en aider quelques uns avec ce bout de code, par contre pour ce qui est de la comparaison inter-categorie je ne m'y suis pas penché car le site sur lequel je bosse est axé sur un seul type de produit décliné en plusieurs catégories je ne suis donc pas confronté aux problèmes des caracteristiques divergeantes, je vous conseille tout de même de fouiller dans ce fichier php, une petite variable rajoutée en parametre avec l'id de la categorie et quelques if dans certaines fonctions feront surement l'affaire

 

Bonne journée

Edited by nox13000 (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 1 month later...

Bonjour,

Merci à nox13000 pour cette astuce.

 

C'est un vrai problème que je cherche à résoudre, j'ai ajouté ce code dans un override que je propose ici, à simplement ajouter dans le dossier override/classes (testé sur PS 1.7.4.3):

 

Il reste un problème gênant, lors du retour à la page catégorie via la flèche de retour du navigateur, les checkbox restent cochées.

 

<?php
/*
* 2007-2012 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2012 PrestaShop SA
*  @version  Release: $Revision: 14001 $
*  @license	http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/
class CompareProduct extends CompareProductCore
{
/**
 * Get all comapare products of the customer
 * @param int $id_customer
 * @return array
 */
public static function getCompareProducts($id_compare)
{
 $results = Db::getInstance()->ExecuteS('
 SELECT DISTINCT `id_product`
 FROM `'._DB_PREFIX_.'compare` c
 LEFT JOIN `'._DB_PREFIX_.'compare_product` cp ON (cp.`id_compare` = c.`id_compare`)
 WHERE cp.`id_compare` = '.(int)($id_compare));
 $compareProducts = null;

 if ($results)
  foreach ($results as $result)
$compareProducts[] = $result['id_product'];
 /***Supprime les produits du comparateur (de la db) lorsque le visiteur affiche le comparateur**/
 Db::getInstance()->Execute('
 DELETE cp FROM `'._DB_PREFIX_.'compare_product` cp, `'._DB_PREFIX_.'compare` c
 WHERE cp.`id_compare`=c.`id_compare`
 AND c.`id_compare` = '.(int)$id_compare);
 return $compareProducts;
}

}

Link to comment
Share on other sites

Bon si le visiteur utilise le lien que l'on va lui proposer dans le code suivant le problème est résolu mais pas si il utilise le flêche de retour les checkbox restent cochées.

 

Dans le tlp products-comparison.tpl ajouter le lien :

<h1>{l s='Product Comparison'}
<a href="{$smarty.server.HTTP_REFERER}">{l s='Back'}</a></h1>

 

Ckarone

Edited by ckarone (see edit history)
Link to comment
Share on other sites

  • 11 months later...

Bon si le visiteur utilise le lien que l'on va lui proposer dans le code suivant le problème est résolu mais pas si il utilise le flêche de retour les checkbox restent cochées.

 

Dans le tlp products-comparison.tpl ajouter le lien :

<h1>{l s='Product Comparison'}
<a href="{$smarty.server.HTTP_REFERER}">{l s='Back'}</a></h1>
Ckarone

 

Hello,

I tried this solution with my version 1.5.4.1, but it doesnt work,

do you have any suggestion ?? plz

Link to comment
Share on other sites

  • 8 months later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...