Améliorer le moteur de recherche Prestashop

Sur une boutique e-commerce, la recherche reste un élément indispensable… d’ailleurs il m’arrive encore parfois de ne « pas » trouver ce fameux moteur de recherche (oui c’est fou). La recherche par défaut de Prestashop, peut être aussi améliorée dans certains cas…

Les acheteurs pointilleux

Dans le cas présent ce sont eux qui nous intéressent, les clients sont de plus en plus « vicieux », ils cherchent les produits de manière détaillées avec le code fournisseur ou la référence EAN, cela leur permet de trouver rapidement un produit et de comparer les prix entre marchands. Du coup il faut pouvoir proposer au client un produit si celui-ci entre le code du fournisseur par exemple… mais voyons ensemble un cas concret.

La recherche sur REF1234 ne renverra aucun résultat… aie….

Le problème dans Prestashop

Pour un client, j’ai constaté que la recherche de Prestashop ne semblait pas s’effectuer sur la « référence interne » des déclinaisons, cela est un problème, car le client obtiendra zéro résultat en recherche alors qu’un produit décliné correspond dans la base de données. Ce cas se produit pour la référence « interne » pour les « déclinaisons »… Pour rectifier le problème il suffit de créer un fichier à l’emplacement suivant : « /override/classes/Search.php » avec le code ci-dessous (Testé sous 1.6) :

<?php

class Search extends SearchCore
{
public static function getAttributes($db, $id_product, $id_lang)
{
if (!Combination::isFeatureActive())
return '';

$attributes = '';
$attributesArray = $db->executeS('
SELECT al.name, pa.reference FROM '._DB_PREFIX_.'product_attribute pa
INNER JOIN '._DB_PREFIX_.'product_attribute_combination pac ON pa.id_product_attribute = pac.id_product_attribute
INNER JOIN '._DB_PREFIX_.'attribute_lang al ON (pac.id_attribute = al.id_attribute AND al.id_lang = '.(int)$id_lang.')
'.Shop::addSqlAssociation('product_attribute', 'pa').'
WHERE pa.id_product = '.(int)$id_product);
foreach ($attributesArray as $attribute)
$attributes .= $attribute['name'] . ' ' . $attribute['reference']; // Webbax - recherche par référence déclinaison
return $attributes;
}
}

Attention à ne pas oublier !

Ce qu’il faut faire ensuite c’est :

  • supprimer le fichier « /cache/class_index.php » s’il existe
  • lancer la ré-indexation des produits, dans le back-office si vous utilisez la navigation à facettes

Si vous relancez à présent la recherche sur la référence de la déclinaison le produit devrait apparaitre.

Une fonction encore + optimisable

Si vous avez fait du développement spécifique sur vos déclinaisons ou que vous désirez ajouter d’autres valeurs sur la recherche de produits, il suffit d’ajouter votre champ dans la recherche. On pourrait par exemple imaginer faire la même chose avec le code EAN13 avec une syntaxe de ce style :

foreach($attributesArray as $attribute){
$attributes .= $attribute['name'] . ' ' . $attribute['reference']; // Webbax - recherche par référence déclinaison
$attributes .= $attribute['ean13']; // ajout la recherche sur l'ean
}

Faut-il faciliter la vie à l’acheteur ?

La grande question c’est faut-il permettre la recherche par code fournisseur ou fabriquant ? En fait tout dépend de chaque marchand… bien souvent celui-ci ne veut pas que le client puisse aller comparer chez la concurrence. A mon avis, il s’agit d’une mauvaise stratégie, le monde du web est très ouvert…  vous avez le droit de conserver cette information de manière confidentielle, mais bien souvent le client ira chercher ailleurs… sur du Google Shopping ou des comparateurs de prix…

Bilan

Personnellement je fais ce que me demande le marchand, mais il ne faut pas rêver les clients vont loin… certains n’hésitent pas à contacter le fournisseur même à l’étranger pour éviter de passer via un intermédiaire lors d’un achat. La transparence sur les fournisseurs présente à mon sens peu de risques, car si ceux-ci sont véritablement sérieux, un cartel des prix est appliqué et la vente directe (fournisseur – client) non appliquée.

12 commentaires sur “Améliorer le moteur de recherche Prestashop”

    1. Il serait intéressant de faire une comparaison entre les deux pour vois si un réel gain est proposé.

      Merci d’avoir partagé ce lien.

  1. Hello,

    super l’astuce 😉 , serait-il également possible de rajouter une caractéristique à la recherche ? comme la Taille ? si oui comment faire ?

    Merci d’avance,

  2. Bonjour et merci.

    Lorsque e recherche avec un SKU ou EAN j’ai bien dans les resultat instantané le produit qui apparait. Par contre au clic je vais sur la déclinaison de base. Est-il possible d’aller directement sur la bonne déclinaison ?

    Merci d’avance

    1. Bonjour,

      A ma connaissance, le lien renvoie toujours sur le produit principal, il n’y a pas de possibilité d’avoir un lien direct sur la variante, mais c’est une bonne remarque.

      Merci pour votre visite !

  3. Bonsoir,
    Je cherche à exclure les produits d’une catégorie précise, du moteur de recherche Prestashop.
    Je galère un peu…
    Auriez vous un petit tuyau s’il vous plaît ?
    Merci
    Michael

    1. Bonjour,

      A mon avis pour cela il est nécessaire d’aborder un développement sur mesure. Le seul moyen natif qui existe dans Prestashop c’est l’option d’exclure un produit de la recherche.

      Merci pour votre visite !

  4. Bonjour,

    Merci pour vos tutoriels et vos articles qui me sont d’une aide très précieuse.

    Je voudrais que mes clients sur mon site de vente de cartouches d’encre , ne puissent rechercher que des catégories (une catégorie représente le modèle d’imprimante et contient les cartouches compatibles avec le modèle).

    Auriez-vous éventuellement une solution pour effectuer cela ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *