jeremyfcr76 Posted March 20, 2016 Share Posted March 20, 2016 Bonjour à tous, Je suis en train de construire une boutique sur prestashop, J'ai activé la navigation à facette pour certaines de mes catégories. J'ai acheté le module pm multiple features, qui permet d'attribuer plusieurs caractéristiques à un produit Jusque la tout va bien, seulement lorsque j'utilise la navigation à facette et que je coche plusieurs caractéristiques sur mon site les produits se cumul (surement un OU dans la requete SQL, alors que par apport àmon besoin j'aurai besoin de modifié cette requete sql par un ET, afin d'avoir uniquement les produit qui répondent à toutes les caractéristiques choisies et pas seulement à une actuellement. SI quelqu'un à une idée ou une piste... merci d'avance Exemple sur : http://epicetoo.net/14-toutes-les-epices Link to comment Share on other sites More sharing options...
coeos.pro Posted March 20, 2016 Share Posted March 20, 2016 il faudrait demander à ceux qui ont développé le module "multiple features", mais franchement vu le pavé que représente le module navigation à facette, je ne suis pas sûre qu'ils puissent le faire (pas gratuitement en tout cas). Link to comment Share on other sites More sharing options...
jeremyfcr76 Posted March 20, 2016 Author Share Posted March 20, 2016 Merci pour ta réponse, j'ai demandé au développeur du module a priori il ne touche pas du tout au module navisation a facette, leur module permet juste d'attribuer plusieurs caractéristiques à un produit. Si quelqu'un à une solution je suis preneur, même s'il faut payer ou racheter un module. Dans me fichier blocklayered.php, j'ai trouver vers la ligne 1811 : case 'id_feature': $sub_queries = array(); foreach ($filter_values as $filter_value) { $filter_value_array = explode('_', $filter_value); if (!isset($sub_queries[$filter_value_array[0]])) $sub_queries[$filter_value_array[0]] = array(); $sub_queries[$filter_value_array[0]][] = 'fp.`id_feature_value` = '.(int)$filter_value_array[1]; } foreach ($sub_queries as $sub_query) { $query_filters_where .= ' AND p.id_product IN (SELECT `id_product` FROM `'._DB_PREFIX_.'feature_product` fp WHERE '; $query_filters_where .= implode(' OR ', $sub_query).') '; } break; J'ai essayer de remplacer le OR par un AND, ça ne fonctionne pas. Link to comment Share on other sites More sharing options...
coeos.pro Posted March 20, 2016 Share Posted March 20, 2016 sinon regarde aussi du coté de la ligne 941: case 'id_feature': $features = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT fl.name name, fl.id_feature id_name, fvl.id_feature_value id_value, fvl.value value, fl.id_lang, fl.id_lang, lifl.url_name name_url_name, lifvl.url_name value_url_name FROM '._DB_PREFIX_.'feature_lang fl LEFT JOIN '._DB_PREFIX_.'layered_indexable_feature lif ON (lif.id_feature = fl.id_feature) INNER JOIN '._DB_PREFIX_.'feature_value fv ON (fv.id_feature = fl.id_feature) INNER JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = fv.id_feature_value) LEFT JOIN '._DB_PREFIX_.'layered_indexable_feature_lang_value lifl ON (lifl.id_feature = fl.id_feature AND lifl.id_lang = '.(int)$filter['id_lang'].') LEFT JOIN '._DB_PREFIX_.'layered_indexable_feature_value_lang_value lifvl ON (lifvl.id_feature_value = fvl.id_feature_value AND lifvl.id_lang = '.(int)$filter['id_lang'].') WHERE fl.id_feature = '.(int)$filter['id_value'].' AND fvl.id_lang = fl.id_lang AND fvl.id_lang = '.(int)$filter['id_lang'] ); Link to comment Share on other sites More sharing options...
jeremyfcr76 Posted March 20, 2016 Author Share Posted March 20, 2016 Rien trouvé de ce coté la, je pense que cela concerne plus l'affichage de la listes caractéristiques. Link to comment Share on other sites More sharing options...
Eolia Posted March 21, 2016 Share Posted March 21, 2016 toute la différence entre un inner join (au moins une correspondance) et un left join (sans)... Link to comment Share on other sites More sharing options...
k-raw Posted May 9, 2016 Share Posted May 9, 2016 Bonjour, j'ai eu le même problème. Le comportement de la navigation à facettes est normal dans la mesure où elle ne prévoit pas la possibilité d'associer plusieurs valeurs d'une même caractéristique à un produit. On s'en rend compte en décortiquant le code de blocklayered.php. Mais il est vrai que le résultat obtenu en front n'est pas logique du coup puisqu'on n'a pas de fonctionnement en entonnoir comme on pourrait s'y attendre. Si tu n'as pas trouvé de solution, voici ce que j'ai fait de mon côté et qui semble fonctionner (j'ai bien dit semble): à la ligne 1823 de blocklayered.php, tu remplace: $query_filters_where .= implode(' OR ', $sub_query).') '; par: $query_filters_where .= implode(' OR ', $sub_query).' GROUP BY id_product HAVING COUNT(*) = '.count($sub_query).') '; Dis moi si ça fonctionne de ton côté, ça m'aidera à savoir si c'est bon dans mon cas aussi. Link to comment Share on other sites More sharing options...
m.schambion Posted October 1, 2016 Share Posted October 1, 2016 Bonjour, j'ai testé ta modification mais malheureusement ça ne fonctionne pas pour moi. Je me suis finalement rendu compte que mon filtre devait s'appliquer aux attributs et non aux caractéristiques des produits. Du coup j'ai appliqué ta modification à la ligne 1847 et ca fonctionne! Merci beaucoup. 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