Prestashop 1.4 : Problème avec la navigation à facette


Depuis quelques temps maintenant, je travail (entre autre) sur Prestashop, le fameux e-commerce Français, concurrent de Magento, et qui fait beaucoup parler de lui !
Actuellement en version 1.4, beaucoup plus améliorée par rapport à la version 1.3, mais néanmoins bugguée sur certaines fonctionnalités telle que la navigation à facette qui était tant attendue !

Qu’est-ce que la navigation à facette ? Il s’agit en quelque sorte d’une interface permettant d’affiner notre recherche sur des produits en fonction de critères propres à chaque produit. Voir la navigation à facette pour plus de détail.

J’ai eu l’occasion de découvrir un bug plutôt bloquant :
Lorsque l’on clique sur l’un des critères, on a une image qui montre que la page charge les données en rapport avec le critère sélectionné.
Le problème est que la moulinette (le chargement) ne s’arrête pas, et on n’obtient pas le résultat escompté.

Il s’agit de problèmes tout bête dans le code, mais il faut le savoir :

1. Ouvrir le fichier blocklayered.php (présent dans le répertoire /www/modules/blocklayered/).

A la ligne 263 il faut remplacer “new category” par “new Category” (il manque la majuscule).

Mauvais code :

$parent = new category($id_parent);

Bon code :

$parent = new Category($id_parent);

2. Et aussi remplacer les “ps_” par le préfixe de vos tables ou par ‘._DB_PREFIX_.’ comme à la ligne 266.

Mauvais code :

$queryFilters .= ' AND p.id_product IN ( SELECT pa.`id_product`
	FROM `ps_product_attribute_combination` pac
	LEFT JOIN `ps_product_attribute` pa
ON (pa.`id_product_attribute` = pac.`id_product_attribute`) WHERE ';

Bon code :

$queryFilters .= ' AND p.id_product IN ( SELECT pa.`id_product`
	FROM `'._DB_PREFIX_.'product_attribute_combination` pac
	LEFT JOIN `ps_product_attribute` pa
	ON (pa.`id_product_attribute` = pac.`id_product_attribute`) WHERE ';

Comment accéder à la base de données dans l’espace d’administration de Prestashop 1.4.1 ?

À propos de bbgun91

Chef de projets multimédia - Concepteur Intégrateur Multimédia

Publié le 16 juin 2011, dans PHP, Prestashop, et tagué , , , , , , . Bookmarquez ce permalien. 12 Commentaires.

  1. Bonjour,
    Quand j’active la navigation a facette, je ne voie plus mes produits.
    Savez vous a quoi cela peut être du?

    • Bonjour Bryan,
      J’ai constaté ça également depuis que je suis passé sur la version 1.4.4.1 de Prestashop il y a peu de temps.
      Il s’agit très certainement d’un bug, puisque le module est toujours en version Beta.
      Ce que j’ai constaté c’est que les produits s’affichent puis disparaissent.
      Je n’ai pas encore eu le temps de travailler sur ce problème, mais vais tout de même chercher…
      Si vous trouvez la solution ou du moins un piste, n’hésitez pas à nous en faire part !

      Merci.

  2. Alors j’ai trouvé la réponse au problème de blocklayered. C’est une solution apportée par Benwesh.
    En fait il s’agissait d’un problème de tri dans la navigation à facette.

    Dans la fonction « reloadContent(param_plus) » du fichier blocklayered.js (du module « blocklayered »), la variable « splitData » (ligne 124) récupère l’url avec les paramètres sous forme de tableau. Les valeurs sont scindées au niveau du « : ». Ligne 125, splitData[0] renvoie donc « http » au lieu des paramètres.

    Il faut donc récupérer dans un 1er temps les paramètres (orderby et orderway). On crée donc une fonction comme ci-dessous :

    function getParamURLValue(param,url)
    {
    var u = url == undefined ? document.location.href : url;
    var reg = new RegExp('(\\?|&|^)'+param+'=(.*?)(&|$)');
    matches = u.match(reg);
    return matches[2] != undefined ? decodeURIComponent(matches[2]).replace(/\+/g,' ') : '';
    }

    Et dans un deuxième temps, ligne 125 on appelle la fonction que l’on vient de rajouter.
    Remplacer :
    data += '&orderby='+splitData[0]+'&orderway='+splitData[1];

    Par le code :
    data += '&orderby=' + getParamURLValue('orderby',$('#selectPrductSort').val()) + '&orderway=' + getParamURLValue('orderway',$('#selectPrductSort').val());

    Depuis que j’ai mis ces quelques lignes de code, le problème est résolu !
    Bon courage pour la suite.

  3. Un autre bug rencontré au niveau de la gestion des filtres dans le backoffice pour blocklayered (solution apportée par Olecorre) :

    Error JS in line 442 from blocklayered.php
    url: '.__PS_BASE_URI__.' + \'modules/blocklayered/blocklayered-ajax-back.php\',

    correction :
    url: \''.__PS_BASE_URI__.'\' + \'modules/blocklayered/blocklayered-ajax-back.php\',

  4. je rencontre les problèmes suivants avec l’activation du module à facettes intégré dans ma version 1.4.6.2 de prestashop : le classement des produits en BO n’est plus transmis à la boutique, idem pour les produits supprimés dans certaines catégories du BO, ils continuent d’apparaitre en boutique. De plus dès lors où le bloc est configuré le bouton tri de la boutique ne fonctionne pas. Avez-vous rencontré ces anomalies ?

  5. si le système de cache, peu importe lequel, est activé dans paramètres avancés / performances, la navigation à facette ne fonctionne pas et mélange tous les produits de votre site.

    Je n’ai pour l’instant pas trouvé la solution, pourtant j’aimerai, pour les performances de mon site, activer le cache.

    Je vous remercie de m’informer quand ce sera possible ou si vous avez la solution.

  6. Quand la navigation à facette est active le tri par prix ou par nom ne fonctionne plus ??

    • Bonjour Sara,
      Quelle version de Prestashop utilisez-vous? Pour ma part, je n’ai pas ce souci. Je suis passe directement de la version Prestashop v1.4 a Prestashop v.1.6.4.
      Je vous suggererais aussi de jeter un oeil sur Thirtybees, une branche independante de Prestashop (base sur Prestashop v1.6) et qui corrige de nombreux bugs, et apporte un certain nombre d’ameliorations egalement.
      C’est une branche gratuite developpee par quelques personnes de la communaute Prestashop un peu las des nombreux bugs qui perduraient depuis des annees, et qui n’etaient pas convaincu par la direction prise par la societe Prestashop avec entre autre l’evolution vers la version 1.7 de Prestashop. J’ai eu peu de temps de travailler sur cette nouvelle branche, mais vous pouvez toujours la telecharger et comparer le code de votre module blocklayered avec celui de Thirty Bees (thirtybees.com).

      Tenez-nous au courrant si cela a resolu votre probleme! 🙂
      A bientot!

    • Bonjour,

      si le système de cache, peu importe lequel, est activé dans paramètres avancés / performances, la navigation à facette ne fonctionne pas et mélange tous les produits de votre site.

      Je n’ai pour l’instant pas trouvé la solution, pourtant j’aimerai, pour les performances de mon site, activer le cache.

      Je vous remercie de m’informer quand ce sera possible ou si vous avez la solution.

  7. Bonjour,

    Je travaille sur la version Prestashop 1.6.1.4 et j’ai le module blocklayered pour la navigation à facette sur mon site.

    Cependant, certains filtres ne fonctionnent pas.

    Je vous explique : lorsque je suis dans une catégorie de produit sur mon site et que je veux filtrer sur une marque, par exemple, je suis sur la page 1 et je ne vois que les produits de la marque que j’ai sélectionné (donc le filtre fonctionne), puis je passe à la page 2 et mon filtre saute.

    J’ai remarqué que lorsque le filtre fonctionne l’URL se réécrit et lorsque l’URL ne se réécrit pas, le filtre saute (il est écrit « show-all » à la fin de l’URL).

    Est-ce que la réécriture de l’URL aurait quelque chose à voir avec ce problème de filtre ? Pouvez-vous m’aider ?

    Merci par avance.

  1. Pingback: Prestashop : accès à la base de données via l’administration « Lechampi sur le Net

  2. Pingback: La navigation à facette – Affiner sa recherche grâce à Prestashop 1.4 « Lechampi sur le Net

Répondre à Sara Annuler la réponse.