Jump to content

[Résolu] Exporter la base client en .csv


Recommended Posts

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

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

  • 6 months later...

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

  • 5 weeks later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...