David Niry Posted August 7, 2009 Share Posted August 7, 2009 Bonjour à tous, juste un petit post pour une petite modif que j'ai faite au niveau du suivi des points de fidélité pour la boutique que je monte pour ma femme. Ma femme trouvait bizarre que l'on aie l'historique complet (En cours de validation, disponibles, convertis) au lieu d'avoir juste le dernier élément le plus récent pour chaque commande.Etant donné que, par chance, les clés numérique sont en ordre croissant et correspondent à l'ordre logique des choses (validation = 1, dispo = 2 etc...), voici un petit hack qui n'affichera que le statut le plus récent pour chaque commande:Dans /modules/loyalty/LoyaltyModule.php remplacez la fonction getAllByIdCustomer (ligne 143) par ceci: static public function getAllByIdCustomer($id_customer, $id_lang, $onlyValidate=false) { $query = ' SELECT f.id_order AS id, fh.date_add AS date, (o.total_paid - o.total_shipping) AS total_without_shipping, fh.points AS points, fh.id_loyalty AS id_loyalty, fh.id_loyalty_state AS id_loyalty_state, fsl.name AS state FROM `'._DB_PREFIX_.'loyalty_history` fh LEFT JOIN `'._DB_PREFIX_.'loyalty` f ON (f.id_loyalty = fh.id_loyalty) LEFT JOIN `'._DB_PREFIX_.'orders` o ON (f.id_order = o.id_order) LEFT JOIN `'._DB_PREFIX_.'loyalty_state_lang` fsl ON (fh.id_loyalty_state = fsl.id_loyalty_state AND fsl.id_lang = '.intval($id_lang).') WHERE f.id_customer = '.intval($id_customer); if ($onlyValidate===true) $query.= ' AND f.id_loyalty_state = '.intval(LoyaltyStateModule::getValidationId()).' GROUP BY f.id_loyalty'; $rows = Db::getInstance()->ExecuteS($query); $_rows = array(); foreach ($rows as $r) { if ( array_key_exists($r['id'], $_rows) ) { if ( intval($_rows[$r['id']]['id_loyalty_state']) < intval($r['id_loyalty_state']) ) $_rows[$r['id']] = $r; } else { $_rows[$r['id']] = $r; } } return $_rows; } Link to comment Share on other sites More sharing options...
David Niry Posted August 7, 2009 Author Share Posted August 7, 2009 Hmmm.. tout compte fait il est plus logique de le faire directement sur la date, au cas ou l'ordre des clés ne corresponde justement plus à l'ordre logique des choses.Remplacer if ( intval($_rows[$r['id']]['id_loyalty_state']) < intval($r['id_loyalty_state']) ) $_rows[$r['id']] = $r; par if ( strtotime($_rows[$r['id']]['date']) < strtotime($r['date']) ) $_rows[$r['id']] = $r; Je viens également de me rendre compte que je suis dans le forum graphisme 8-/ ... j'avais trouvé une thread à partir de Google sur les points de fidélité et ne m'en était pas rendu compte quand j'ai fait mon nouveau post. Désolé... et merci aux modérateurs de déplacer dans la catégorie développement ou là ou cela est approprié 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