Welsyn Posted May 9, 2012 Share Posted May 9, 2012 (edited) 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 June 11, 2012 by Welsyn (see edit history) Link to comment Share on other sites More sharing options...
DevNet Posted May 9, 2012 Share Posted May 9, 2012 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 More sharing options...
Welsyn Posted May 10, 2012 Author Share Posted May 10, 2012 (edited) 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 June 11, 2012 by Welsyn (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now