Jump to content

Modifier la requête d'affichage de la liste des produits (1.7.6)


Recommended Posts

Bonjour à tous

Je développe un site sous prestashop 1.7.6.5. Mon client veut un affichage très particulier pour une catégorie, regrouper les produits par gamme (j'ai créé une caractéristique spéciale pour ces produits dans l'admin). Donc la requête n'est plus la même (il y aura un tri différent et plus de pagination, tous les produits seront sur la même page avec donc 4 gammes spécifiques). Les autres catégories seront présentées de façon habituelle avec 15 produits par page et pagination.

Mais je ne vois pas où modifier la requête pour cette catégorie... j'ai d'abord pensé à la fonction getProducts de la classe Category, puis comme y a le module à facettes, j'ai tenté dans modules\ps_facetedsearch\ps_facetedsearch.php dans la fonction rebuildLayeredCache(), mais cela ne change absolument rien... Pour l'instant sans override tant que je ne sais pas quelle fonction est concernée.

Où dois je modifier cette requête ?... sur un site en version 1.6 je n'avais pas eu de soucis...

Merci d'avance pour votre aide.

 

Edited by yannick.81 (see edit history)
Link to comment
Share on other sites

Bonjour ! 

Pour avoir déjà fait quelque chose dans le style (Filtrer par une date), c'est un peu la galère. Vous devriez regarder du côté de ces deux fichiers

modules/ps_facetedsearch/src/Filters/Products.php => La fonction getProductByFilters. Vous avez ici la liste des produits (et les filtres appliqués pour les récupérer) et le nb de produits a afficher (pagination)

modules/ps_facetedsearch/src/Product/SearchProvider.php => Fonction runQuery. Fonctionne de pair avec le fichier précédent (c'est lui qui initialise un product filters)

Je sais pas si c'est exactement ça que vous voulez. Par contre j'ai pas trouvé de moyen pour override ça proprement (Les joies de la 1.7). J'ai du les modifier directement et en faire un BackUp pour les futurs MAJ. 

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

3 hours ago, Traineau said:

Bonjour ! 

Pour avoir déjà fait quelque chose dans le style (Filtrer par une date), c'est un peu la galère. Vous devriez regarder du côté de ces deux fichiers

modules/ps_facetedsearch/src/Filters/Products.php => La fonction getProductByFilters. Vous avez ici la liste des produits (et les filtres appliqués pour les récupérer) et le nb de produits a afficher (pagination)

modules/ps_facetedsearch/src/Product/SearchProvider.php => Fonction runQuery. Fonctionne de pair avec le fichier précédent (c'est lui qui initialise un product filters)

Je sais pas si c'est exactement ça que vous voulez. Par contre j'ai pas trouvé de moyen pour override ça proprement (Les joies de la 1.7). J'ai du les modifier directement et en faire un BackUp pour les futurs MAJ. 

Déjà merci pour ta réponse !

Je viens de regarder, malheureusement il n'y pas les requêtes dans ces fichiers, j'aimerai vraiment avoir la main sur la requête, car en plus de changer le tri et la limite, je voudrai aussi récupérer le nom de la gamme (caractéristique) uniquement pour cette catégorie avec un left outer join en plus. En fait faire une condition que si la catégorie est égale à X, alors faire ma requête, et non plus la requête par défaut.

Edited by yannick.81 (see edit history)
Link to comment
Share on other sites

après toutes mes recherches, je me demande si c'est possible..................... chose que je trouverai aberrante.............

j'ai essayé dans modules/ps_facetedsearch/src/Filters/Products.php, je peux changer l'ordre de tri et la limite, mais me faudrait rajouter 2 left outer join sur les tables ps_feature_product et ps_feature_value_lang pour récupérer le nom de la catégorie (donc aussi un nouveau champ dans le select), mais je ne vois pas comment c'est possible...........

En 1.6 la requête était en dur dans le code, ça n'implémentait pas des dizaines de classes pour passer des valeurs, donc là je suis perdu.....

Link to comment
Share on other sites

Je viens de choisir une solution bourrin à souhait... pas le choix vu comme est codé le module à facette...

- dans modules/ps_facetedsearch/src/Adapter, création d'une nouvelle fonction publique getProductsInfusion(), avec en dur la requête return $this->getDatabase()->executeS(
            "SELECT p.id_product FROM...", en ajoutant les left outer join qu'il me faut, le tri et l'absence de limite

- dans modules/ps_facetedsearch/src/Filters/Products.php, fonction getProductByFilters(), test if($_GET['id_category'] == 35), alors j'appelle cette fonction $matchingProductList = $this->searchAdapter->getProductsInfusion() plutôt que $matchingProductList = $this->searchAdapter->execute();

Edited by yannick.81 (see edit history)
Link to comment
Share on other sites

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...