Re: Export CSV with CakePHP

2015-04-08 Thread José Lorenzo
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 cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.


Re: Export CSV with CakePHP

2015-04-08 Thread Mark Payne
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 cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.


Re: Export CSV with CakePHP

2015-04-08 Thread John Andersen
This looks suspicious to me

url:webroot('leads/Leads/export'),

Should it not be only /leads/export in order to reach your controller 
method?

Enjoy, John


On Monday, 6 April 2015 21:08:10 UTC+3, 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 cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.