Как загрузить отфильтрованный файл CSV с PHP с использованием платформы Yii 1.1 - PullRequest
0 голосов
/ 17 января 2020

Прежде чем читать дальше, я хотел бы извиниться, если сделаю дубликат здесь. Я довольно долго оглядывался по сторонам, и мне не повезло, как справиться со следующей ситуацией. Все ухудшается из-за того, что я начинающий программист.

Ситуация

Я получил задание от моего старшего программиста на работе, чтобы создать функцию, которая бы создать файл CSV. У меня были некоторые проблемы, но, наконец, удалось. Функция (расположенная в модели) выглядит следующим образом.

// The function below will return a CSV file.
  public function convert2CSV(){

    $data = $this->search()->rawData;

    $fileOpener = fopen('php://output', 'w');

    fputcsv($fileOpener, array(
       'some code...'
    ), ';');

    foreach ($data as $rows) {
      fputcsv($fileOpener, $rows ';');
    }
    fclose($fileOpener);
}

Пока все хорошо. Теперь у меня есть задача создать фильтр, который будет применяться и к CSV-файлу. Что я имею в виду под этим? Хорошо, когда я использую фильтр на веб-сайте, а затем экспортирую файл CSV, он должен только загрузить результаты фильтра. До сих пор, независимо от того, что я делал, он просто загружал все, что мог, до максимального значения.

Я пытался сделать это, используя $ _GET, чтобы как-то сказать приведенной выше функции CSV только для загрузки отфильтрованные результаты. Я пытался сделать это так в контроллере, в рамках действия, которое вызывает функцию CSV модели.

 public function actionExport2CSV() {
    $a = new A();
    $b = new B();

  // This part will output the headers so that the file is downloaded rather than displayed
        header('Content-type: text/csv');
        header('Content-Disposition: attachment; filename=TestFile.csv');

  // do not cache the file
        header('Pragma: no-cache');
        header('Expires: 0');


        $a->convert2CSV(); {
            if (isset($_GET['B'])) {
                $b->attributes = $_GET['B'];
            }
    }
  }
}

Я ценю любую помощь и / или объяснение, которое вы можете мне дать. Я, конечно, предпочел бы понять, что я делаю неправильно, чтобы узнать больше и стать лучшим программистом в будущем.

Большое спасибо за вашу помощь, ребята.

С уважением.

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Не бери в голову всех.

Я отредактировал функцию поиска, чтобы отфильтровать файл CSV еще до того, как он был создан.

0 голосов
/ 19 января 2020

Я использую расширение EExcelview , очень полезно.

  1. Загрузите и извлеките код в /protected/extensions/
  2. Добавьте его в файл /protected/config/main.php как следует
  'import' => array(
      'app.models.*',
      'app.portlets.*',
      'app.components.*',
      'app.extensions.*',
      ...
      'ext.phpexcel.*', # here we are importing the extension
    ),
Добавьте и оптимизируйте свой код в представлении, в которое вы хотите загрузить CSV-файл, следующим образом:
 $this->widget('EExcelView', array(
      'dataProvider' => $model->search(),
      'creator'      => Yii::app()->name,
      'grid_mode'    => 'grid',
      'title'        => 'CSV File title',
      'subject'      => 'CSV File Subject',
      'description'  => 'CSV File Description',
      'exportText'   => 'Download file ',
      'filename'     => urlencode('My file to download'),
      'exportType'   => 'CSV', # Available Options => Excel5, Excel2007, PDF, HTML, CSV
      'template'     => "{exportbuttons}",
      'columns'      => array(
          'colA',
          'colB'
          ...
      ),
  ));
...