I think you should use this
plugin https://github.com/FriendsOfCake/cakephp-csvview instead of
implementing it all by yourself
On Wednesday, April 8, 2015 at 9:40:19 AM UTC+2, Mark Payne wrote:
>
> You don't have to use jquery or views to do this. I use this handy little
> function a lot. I usually put it in a Component but there is no need
> unless you need it elsewhere
>
> public function array_to_csv_download($array, $filename = "export.csv",
> $delimiter=",") {
> // open raw memory as file so no temp files needed, you might run out
> of memory though
> $f = fopen('php://memory', 'w');
> // loop over the input array
> foreach ($array as $line) {
> // generate csv lines from the inner arrays
> fputcsv($f, $line, $delimiter);
> }
> // rewrind the "file" with the csv lines
> fseek($f, 0);
> // tell the browser it's going to be a csv file
> header('Content-Type: application/csv');
> header("Content-Type: application/force-download");
> header("Content-Type: application/octet-stream");
> header("Content-Type: application/download");
> // tell the browser we want to save it instead of displaying it
> header('Content-Disposition: attachement; filename="'.$filename.'"');
> // make php send the generated csv lines to the browser
> fpassthru($f);
> }
>
> In your controller do
>
> public function export(){
> $this->layout = false;
> $this->autoRender = false;
>
> $this->loadModel('CadastroMailing');
> $conditions = array('OR'=>array('cadastro_mailing_tipo_id'=>$dados));
> $result = $this->CadastroMailing->find('all',array(
> 'conditions'=>$conditions , 'order'=>array('nome ASC')));
> $this->array_to_csv_download($result, 'your_filename', $delimiter=",");
> }
>
>
> and that's it, it will generate a csv automatically when you click a link
> to that page.
>
>
>
>
>
> On Monday, April 6, 2015 at 2:08:10 PM UTC-4, michel martins wrote:
>>
>> Hi people!
>>
>> Well, recently I started working with cakephp and I have a question to
>> generate data for export in a CSV table to excel.
>>
>> I created the view and controller, and I'm using the class
>> https://github.com/FriendsOfCake/cakephp-csvview .
>>
>> But when I click, nothing happens. What can be wrong in the process?
>>
>> //função ajax para capturar o click, jogar no método PHP e retornar o
>> link da planilha para download.
>> $(function(){
>> $("#botoes button").click(function(){
>> var botao = $(this).attr('data-download');
>> $.ajax({
>> url:webroot('leads/Leads/export'),
>> type:'post',
>> data:{
>> tipo: botao
>> },
>> success:function(r){
>> $("#botoes button [data-download="+botao+"]").removeClass('btn-danger');
>> $("#botoes button [data-download="+botao+"]").addClass('btn-success');
>> $("#botoes button [data-download="+botao+"]").val('Download');
>> },error:function(){
>> console.log('erro');
>> }
>> });
>>
>> });
>>
>> });
>>
>> The method:
>>
>> public function export(){
>> $dados = $this->param('tipo');
>>
>> $this->loadModel('CadastroMailing');
>> $conditions = array('OR'=>array('cadastro_mailing_tipo_id'=>$dados));
>> $result = $this->CadastroMailing->find('all',array(
>> 'conditions'=>$conditions , 'order'=>array('nome ASC')));
>> $_serialize = 'result';
>>
>> $this->viewClass = 'CsvView.Csv';
>> $this->set(compact('data', '_serialize'));
>> }
>>
>> I would like the download automatically initiated after the click, but if
>> you have to click the button also solves my problem.
>>
>> Can help me?
>>
>
--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP
---
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.