Jump to content

[Résolu] Modification des résultats d'une recherche de produits


Recommended Posts

Bonjour à tous,

 

Dans le cadre d'un projet, je dois réaliser une fonctionnalité permettant de gérer des régions dans Prestashop comme le fait un célèbre site de ventes aux enchères.

 

Le contexte : un utilisateur arrive sur le site web, il accède à une page d'accueil avec la possibilité de rechercher des produits nationaux. Il peut, s'il le souhaite, sélectionner sa région dans l'entête du site et aura donc accès au produits qui sont uniquement dans la région.

 

J'ai réussi à ajouter un onglet dans la création d'un produit permettant de lui attribuer une ou plusieurs régions (Dans la BD, ça se traduit sous la forme : ps_region_product(id_product, id_region) et ps_region(id,nom) ). De plus, j'ai pu ajouter un menu déroulant au niveau de l'accueil qui permet d'envoyer un Cookie chez l'utilisateur contenant l'id de la région.

 

Mon problème se trouve au niveau des produits. Comment faire en sorte que les produits affichés ne soit que ceux de la région ? Surcharge de Search.php ? Product.php

 

Merci d'avance pour vos réponses =).

 

Cordialement,

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

Bonsoir,

 

Malheureusement, vous allez être obligé de gérer ça par des overrides, afin de modifier directement les listes en sortant SQL. Car la technique depuis le tpl ./themes/[votre_thème]/product-list.tpl commune à l'affichage des listes prend en compte la gestion de la pagination sur le nombre de résultats trouvés, et aussi la technique de tri.

 

Voici la liste des fichiers et emplacement des directives SQL stratégiques afin d'isoler les méthodes utiles aux éventuels overrides :

 

./classes/Category.php:550: SELECT p.*, pa.`id_product_attribute`, pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new,

 

./classes/Manufacturer.php:306: SELECT p.*, pa.`id_product_attribute`, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new,

 

./classes/Pack.php:93: SELECT p.*, pl.*, i.`id_image`, il.`legend`, t.`rate`, cl.`name` AS category_default, a.quantity AS pack_quantity

 

./classes/Pack.php:128: SELECT p.*, pl.*, i.`id_image`, il.`legend`, t.`rate`

 

./classes/Product.php:808: SELECT p.*, pl.* , t.`rate` AS tax_rate, m.`name` AS manufacturer_name, s.`name` AS supplier_name

 

./classes/Product.php:1271: SELECT p.*, f.*

 

./classes/Product.php:1386: SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`, p.`upc`,

 

./classes/Product.php:1469: SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`, p.`upc`,

 

./classes/Product.php:1532: SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`,

 

./classes/Product.php:2266: SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`, p.`upc`,

 

./classes/Search.php:253: SELECT p.*, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`name`,

 

./classes/Supplier.php:218: SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, i.`id_image`, il.`legend`, s.`name` AS supplier_name, tl.`name` AS tax_name, t.`rate`, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new,

 

./classes/WebserviceKey.php:96: SELECT p.*

 

./classes/ProductSale.php:76: SELECT p.*,

 

En effectuant un override sur chacune des méthodes de classes intégrants ces SQL respectives, et en les modifiant avec vos correspondances, ça devrait faire l'affaire.

 

Bien cordialement

Link to comment
Share on other sites

Merci de votre réponse et surtout pour ces détails.

Je vais regarder ça de plus près =)

 

Cordialement

 

[EDIT] En cours de modification ;)

[EDIT 2] Après modifications, cela fonctionne parfaitement. Encore merci

Edited by Welsyn (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...