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
Réponse acceptée

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.

rachidali
Auteur
Réponse acceptée

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

Salut, peux tu m'expliquer ça ?

foreach ($Articles as $Article)
 {
      $line =$Articles[0]'Article']; // ???
       $this->CSV->addRow($line);
 }

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

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é.

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.