MODULE PRODUCTS: recherche champs personnalisés -
Bartmoss - 21/05/2014
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.11.10
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour a tous
Comme certain l'ont peux être remarqué, le module Products ne permet pas de faire des recherches sur plus d'un champ personnalisé. Même si le module le permet avec le paramètre action=search, le résultat n'est pas bon et souvent la requête ne renvoie aucun résultat.
J'ai essayé de regarder dans le code du module, et je pense avoir identifié d’où vient le problème. Malheureusement, je manque d'aisance en PHP objet pour trouver la portion de code exacte à modifier.
Prenons un exemple de requête suite à une recherche sur 2 champs personnalisés:
SELECT SQL_CALC_FOUND_ROWS C . * , PH.hierarchy_id
FROM cms_module_products C
LEFT JOIN cms_module_products_prodtohier PH ON PH.product_id = C.id
LEFT JOIN cms_module_products_fieldvals FVA ON C.id = FVA.product_id
AND
FVA.fielddef_id =5
LEFT JOIN cms_module_products_fieldvals FVB ON C.id = FVB.product_id
AND
FVB.fielddef_id =1
WHERE C.status = 'published'
AND (
FVA.value = 'informatique'
)
AND (
FVB.value = '1 pers.'
)ORDER
BY C.product_name ASC
LIMIT 0 , 10000
Les champs perso. sont remplacer par les alias FVA et FVB. J'ai remarqué que le pb viens de d’inversement des valeurs, FVA.value et FVB.value. Dans cet exemple tiré d'un de mes sites, pour que la requête fonctionne il faudrait que
FVA.value = '1 pers.' et non pas 'informatique' et que
FVB.value = 'informatique'.
L'erreur semble venir du fichier class.products_resultset.php et des variables $fieldid, $fieldval. Mais impossible de trouver où l'association commence a déconner.
J'ai posté cette remarque sur le bug tracker du module ainsi que sur le forum US. Mais sans réponses pour le moment.
Si l'un d'entre vous étant plus a l'aise en PHP object est intéressé pour jeter un coup d'oeil. Car il est quand même dommage de ne pouvoir faire de recherche sur les multiples champs perso du module.