Export CSV

Par rachidali, il y a 11 ans


voila mon probleme c'est que just uue ligne qui s'affiche et se repéte voila mon code et je pense qu'ici ou il ya l problem
view/Article/export.ctp

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

View/Helper/CsvHelper.php

<?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);
}
}
?>

Controller/ArticleController.php

function export(){
    $this->set('Articles', $this->Article->find('all'));
    $this->layout = null;
    $this->autoLayout = false;
    Configure::write('debug','0');
    }

view/Article/index.ctp

<?= $this->Html->link('Export CSV',array('controller'=>'Articles','action'=>'export'), array('target'=>'_blank')); ?>

et dans AppController j'ai déclarer le helper CSV

6 réponses

Maenhyr, il y a 11 ans

Sérieux ?! Tu n'as pas cherché ? C'était une ligne de code à modifier !

On se fait ch*er à te donner des pistes pour que tu progresses, ce n'est pas pour que tu fasses autre chose. Tu as passé plus de temps à trouver et tester ce plugin que tu n'aurais fait en cherchant la solution. Et tu n'as pas progressé.

L'informatique, c'est sérieux, il faut être prêt à passer du temps, à se prendre la tête, à se creuser les méninges sur un problème particulier. Un bon développeur ne recourt pas à la facilité en copiant le code.

Maenhyr, il y a 11 ans

Salut, peux tu m'expliquer ça ?

foreach ($Articles as $Article)
 {
      $line =$Articles[0]'Article']; // ???
       $this->CSV->addRow($line);
 }
rachidali, il y a 11 ans

ca affiche just le premier ligne, je pense qu'il faut faire une boucle pour afficher tous les lignes je sais pas comment !!

Maenhyr, il y a 11 ans

Je viens de te donner le chemin, maintenant, à toi de voir comment on fait une boucle en PHP, c'est la base.

Demande toi pourquoi tu fais un foreach, et que tu n'utilises pas $Article.

Vallyan, il y a 11 ans

Si tu as le culot de valider ta propre réponse après l'aide de prbaron, tu pourrais au moins donner le nom du plugin que tu as trouvé.

rachidali, il y a 11 ans

C bon j'ai trouvé un pluging qui fait tous ca et ca marche trés bien avec les fichier CSV mais il n l'affiche pas sous forme de tableau les champs sont séparés par un virgule merciiiiii beaucoup prbaron pour ton aide ouiiii Vallyan voila le lien du pluging https://github.com/joshuapaling/CakePHP-Export-CSV-Plugin Merciiiiiiiii toi aussi