fmattina Posted May 24, 2011 Share Posted May 24, 2011 Bonjour à tous,Voila, j'ai besoin de récupérer la liste de mes clients avec pour chacun leurs nombre de points fidélité.La requête en elle même ne me parait pas très compliquée mais il faut pouvoir l'appeler a souhait, taper la requête directement dans la bdd n'est donc pas possible. Après quelques recherche j'ai vu que le module "Lettre d'information" proposais à peu près la même chose puisqu'il permet l'export en csv de tout les clients. En observant le code de ce module j'ai trouver la fonction qui exécutait la requête sql private function _getCustomers() { $rq = Db::getInstance()->ExecuteS(' SELECT c.`id_customer`, c.`lastname`, c.`firstname`, c.`email`, c.`ip_registration_newsletter`, c.`newsletter_date_add` FROM `'._DB_PREFIX_.'customer` c WHERE 1 '.((isset($_POST['FIDELITY']) AND intval($_POST['FIDELITY']) != 0) ? 'AND c.`newsletter` = '.intval($_POST['FIDELITY'] - 1) : '').' '.((isset($_POST['SUSCRIBERS']) AND intval($_POST['SUSCRIBERS']) != 0) ? 'AND c.`newsletter` = '.intval($_POST['SUSCRIBERS'] - 1) : '').' '.((isset($_POST['OPTIN']) AND intval($_POST['OPTIN']) != 0) ? 'AND c.`optin` = '.intval($_POST['OPTIN'] - 1) : '').' '.((isset($_POST['COUNTRY']) AND intval($_POST['COUNTRY']) != 0) ? 'AND (SELECT COUNT(a.`id_address`) as nb_country FROM `'._DB_PREFIX_.'address` a WHERE a.`id_customer` = c.`id_customer` AND a.`id_country` = '.intval($_POST['COUNTRY']).') >= 1' : '').' GROUP BY c.`id_customer`'); $header = array('id_customer', 'lastname', 'firstname', 'email', 'ip_address', 'newsletter_date_add'); $result = (is_array($rq) ? array_merge(array($header), $rq) : $header); return $result; } J'ai dupliqué cette fonction (_getCustomersFidelity()) et l'ai adapté à ce que je souhaite. J'ai aussi dupliquer le bloc où à priori cette fonction est appellée '.$this->l('Export Newsletter Subscribers').' <form action="'.$_SERVER['REQUEST_URI'].'" method="post"> <input type="hidden" name="action" value="blockNewsletter"> '.$this->l('Generate a .CSV file based on BlockNewsletter subscribers data.').'. '; $this->_html .= ' <input type="submit" class="button" name="submitExport" value="'.$this->l('Export .CSV file').'" /> </form></fieldset> Et c'est la qu'est mon soucis: je ne vois aucun appel de la fonction _getCustomers(). Je m'attendais à ce que ce soit dans le action du form mais... Quelqu'un saurait comment faire? Je ne pense pas que ce soit bien compliqué mais j'avoue être un peu perdu. Comment faire pour que ce bout de code appelle ma nouvelle fonction et pas l'ancienne? Link to comment Share on other sites More sharing options...
fmattina Posted May 24, 2011 Author Share Posted May 24, 2011 En fait c'est cette ligne que je ne comprends pas : <form action="'.$_SERVER['REQUEST_URI'].'" method="post"> Link to comment Share on other sites More sharing options...
fmattina Posted May 26, 2011 Author Share Posted May 26, 2011 J'ai compris comment ça marchait. En fait le choix de la fonction appelée (si on peux appeler ça un appel) se fait par le nom du input. En fonction du nom de ce la fonction '_postProcess()' choisit quel traitement effectuer.Il suffit donc de rajouter un cas dans cette fonction qui dit quelle fonction appeler pour tel input.Pour résumer j'ai donc du créer une fonction qui effectue la requête ('_getCustomersFidelity()') que je veux, ajouter un cas dans la fonction '_postProcess()' pour appeler ma fonction '_getCustomersFidelity()' et rajouter un formulaire dans la fonction ' _displayFormExport()' pour mettre le input qui appellera ma fonction. Link to comment Share on other sites More sharing options...
CreaZion Web Posted December 1, 2011 Share Posted December 1, 2011 Bonjour fmattina, Je me demandais, car je ne suis pas développeuse et j'ai un peu de mal à comprendre ta dernière explication, s'il s'agit d'un module que tu commercialise ou distribue car je serais intéressée de pouvoir l'installer sur un site dont je m'occupe afin de relever le nombre de points de fidélité de chaque client de la boutique. Je te remercie pour ta réponse Link to comment Share on other sites More sharing options...
C.G.C. Posted December 1, 2011 Share Posted December 1, 2011 Bonsoir, Oula CreaZion... vu le déterrage de topics, envoie-lui plutôt un PM (en cliquant sur son pseudo) et redonne-lui le lien de ce Topic, histoire que l'on puisse savoir le fin mot de l 'histoire. Merci. Link to comment Share on other sites More sharing options...
CreaZion Web Posted December 5, 2011 Share Posted December 5, 2011 Merci du conseil Je fais ça de suite et je tiens tous le monde au courant. Link to comment Share on other sites More sharing options...
a-prods Posted January 3, 2012 Share Posted January 3, 2012 on veut savoir la suite. ca marche? est ce qu'on peut avoir la marche a suivre, un tuto? merci 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