Modification des résultats du moteur de recherche

6 messages dans ce sujet

Posté(e) · Signaler ce message

Bonjour.

Nouvel utilisateur de Peel Shopping 5.7 que je teste depuis plusieurs semaines, je m'efforce ces derniers temps à adapter le code à mes besoins. Jusqu'ici, tant qu'il suffisait de changer une fonction de place ou de supprimer une portion de code qui m'était inutile, je m'en suis sorti. Mais je bute actuellement sur un problème que je ne parviens pas à résoudre.

Il m'arrive quelquefois de faire figurer un même produit dans plusieurs catégories différentes.

Exemple de ce type de cas de figure :

Catégorie principale : Blu-Ray et DVD

Sous catégorie 1 : Blu-Ray

Sous catégorie 2 : DVD

Aucun problème particulier à signaler pour l'affichage, puisque de façon intuitive et logique, un combo Blu-Ray+DVD apparait dans les trois catégories.

Le problème c'est que s'il on se met à faire une recherche en utilisant le moteur de recherche, ça remonte forcément 3 produits (1 par catégorie), alors qu'en fait il n'y en a qu'un seul.

Je pense qu'il faut changer un bout de code dans le fichier search.php à la racine de Peel Shopping, mais je ne sais pas du tout comment faire. J'ai pensé rajouter un contrôle au niveau de $prod['id'], dans ce le cas où il trouve le même, il ne l'affiche pas plusieurs fois. Ou alors, faire un contrôle forçant le moteur de recherche à n'afficher que la catégorie principale, sans les autres.

Ne sachant pas coder cette fonction, quelqu'un peut-il m'aider ?

Merci.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour Olikos,

Dans /search.php, à mon sens, dans le SQL qui cherche les produits (build_sql_produits), s'il n'y figure pas déjà, faites un SELECT DISTINCT(p.id)

Cordialement,

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Merci pour cette réponse.

Apparemment, le SELECT DISTINCT(p.id) est bel et bien présent. En vérifiant directement dans la base SQL, je pense que le problème vient du fait que la recherche s'effectue aussi sur l'id de la catégorie. Et dans mon exemple, la requête ramène bien plusieurs entrées provenant de plusieurs catégories différentes (logique) même si le produit est au final le même.

Est-il possible de rajouter dans la requête une distinction via le parent_id ? Il me semble que ça résoudrait cet affichage multiple.

Voici la fonction telle qu'elle est actuellement dans le fichier search.php :

/**

* build_sql_produits()

*

* build the sql statement

* this will build the sql based on the given information

* @param mixed $terms

* @param mixed $fields

* @param mixed $match

* @return

*/

function build_sql_produits($terms, $fields, $match)

{

$requete = 'SELECT DISTINCT(p.id)

,c.id AS categorie_id

,c.nom_' . $_SESSION['langue'] . ' AS categorie';

// ajout des champs $fields où $term sera recherché

foreach($fields as $value) {

$requete .= ', ' . $value . ' ';

}

$requete .= 'FROM peel_produits p, peel_produits_categories pc, peel_categories c

WHERE p.id = pc.produit_id AND pc.categorie_id = c.id AND p.etat = "1" AND ' . build_terms_clause($terms, $fields, $match) . '

ORDER BY p.id DESC

LIMIT 100';

return $requete;

}

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour Olikos,

Modifiez donc build_sql_produits de sorte d'avoir :

$requete .= 'FROM peel_produits p, peel_produits_categories pc, peel_categories c

WHERE p.id = pc.produit_id AND pc.categorie_id = c.id AND p.etat = "1" AND ' . build_terms_clause($terms, $fields, $match) . '

GROUP BY p.id

ORDER BY p.id DESC

LIMIT 100';

Cordialement,

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

C'est parfaitement ce que je voulais, merci beaucoup.

Ça fonctionne et ça ne ramène plus aucun doublon !

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Pas de quoi :angry:

Cordialement,

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

Twitter Advisto ecommerce

Facebook PEEL Shopping