2011-03-14 22 views

Respuesta

18

Esta solución es para CakePHP 2.0 .. u también puede integrarla en CakePHP 1.3

Paso 1: Guarde el archivo siguiente como Csv.php en su aplicación/directorio/ayudante Ver

<?php 
class CsvHelper extends AppHelper 
{ 
var $delimiter = ','; 
var $enclosure = '"'; 
var $filename = 'Export.csv'; 
var $line = array(); 
var $buffer; 

function CsvHelper() 
{ 
    $this->clear(); 
} 
function clear() 
{ 
    $this->line = array(); 
    $this->buffer = fopen('php://temp/maxmemory:'. (5*1024*1024), 'r+'); 
} 

function addField($value) 
{ 
    $this->line[] = $value; 
} 

function endRow() 
{ 
    $this->addRow($this->line); 
    $this->line = array(); 
} 

function addRow($row) 
{ 
    fputcsv($this->buffer, $row, $this->delimiter, $this->enclosure); 
} 

function renderHeaders() 
{ 
    header('Content-Type: text/csv'); 
    header("Content-type:application/vnd.ms-excel"); 
    header("Content-disposition:attachment;filename=".$this->filename); 
} 

function setFilename($filename) 
{ 
    $this->filename = $filename; 
    if (strtolower(substr($this->filename, -4)) != '.csv') 
    { 
     $this->filename .= '.csv'; 
    } 
} 

function render($outputHeaders = true, $to_encoding = null, $from_encoding ="auto") 
{ 
    if ($outputHeaders) 
    { 
     if (is_string($outputHeaders)) 
     { 
      $this->setFilename($outputHeaders); 
     } 
     $this->renderHeaders(); 
    } 
    rewind($this->buffer); 
    $output = stream_get_contents($this->buffer); 

    if ($to_encoding) 
    { 
     $output = mb_convert_encoding($output, $to_encoding, $from_encoding); 
    } 
    return $this->output($output); 
} 
} 
?> 

paso 2: Añadir este Asistente a su controlador:

var $helpers = array('Html', 'Form','Csv'); 

paso 3: crear un método de “descarga” en el controlador para, por ejemplo. homes_controller.php

<?php 
function download() 
{ 
    $this->set('orders', $this->Order->find('all')); 
    $this->layout = null; 
    $this->autoLayout = false; 
    Configure::write('debug', '0'); 
} 
?> 

Paso 4: ésta enlace en la página desde donde se tiene que descargar

<?php 
echo $this->Html->link('Download',array('controller'=>'homes','action'=>'download'), array('target'=>'_blank')); 
?> 

Paso CSV: Casas 5 (paso final)

Pon este código en Ver//download.ctp

<?php 
$line= $orders[0]['Order']; 
$this->CSV->addRow(array_keys($line)); 
foreach ($orders as $order) 
{ 
     $line = $order['Order']; 
     $this->CSV->addRow($line); 
} 
$filename='orders'; 
echo $this->CSV->render($filename); 
?> 
+0

Hola, todo está funcionando bien en Localhost pero, si lo intento en línea, no puedo obtener una ventana emergente de descarga, pero los datos se repiten en el navegador. Por favor sugiérame alguna solución. –

+0

obteniendo el código HTML también en el archivo Excel exportado ... luego debajo del código tengo mi lista de datos deseada. ¿Alguna ayuda por qué su código de exportación también en el archivo? –

+0

¿Está trabajando en cakephp 3? – Faisal

1

hay un artículo en the bakery sobre el uso de PHPExcel dentro de CakePHP. Esta biblioteca proporciona opciones para escribir datos de hoja de cálculo en una variedad de formatos diferentes. Los ejemplos dados en el artículo de panadería vinculado son para archivos xls y xlsx, pero csv también es una opción.

1

No hay necesidad de cualquier componente o ayudante

gran tutorial http://andy-carter.com/blog/exporting-data-to-a-downloadable-csv-file-with-cakephp

controlador

public function export() { 
    $this->response->download("export.csv"); 
    $data = $this->Subscriber->find('all'); 
    $this->set(compact('data')); 
    $this->layout = 'ajax'; 
    return; 
} 

route.php

Router::parseExtensions('csv'); 

archivo export.ctp

<?php 
app/Views/Subscribers/export.ctp 
foreach ($data as $row): 
foreach ($row['Subscriber'] as &$cell): 
    // Escape double quotation marks 
    $cell = '"' . preg_replace('/"/','""',$cell) . '"'; 
endforeach; 
echo implode(',', $row['Subscriber']) . "\n"; 
endforeach; 
?> 
+0

Ha olvidado dar crédito al autor original: http: // andy-carter.com/blog/exporting-data-to-a-downloadable-csv-file-with-cakephp – rocknrollcanneverdie

Cuestiones relacionadas