2

ExportableGridBehavior - tinyurl.com/expgrid

これは、通常のデータプロバイダーで素晴らしく機能します。しかし、CArrayDataProvider を使用すると、問題が発生し、CSV に空白のデータが表示されます。この拡張機能を CArrayDataProvider で使用することは可能ですか。コントローラーの構文はどのように見えるべきですか?

モデル コード: searchProfitCurrency メソッド

$rawData=Yii::app()->db->createCommand($selectStatment)->queryAll();

    return new CArrayDataProvider($rawData, array(
        'id'=>'id',
        'sort'=>array(
            'attributes'=>array(
                'Currency',
                'profitMarginCurrency'
            ),
        ),
        'pagination'=>array(
            'pageSize'=>50,
        ),
    ));

コントローラーコード:

$search_dataProvider = $model->searchProfitCurrency();
$this->exportCSV($search_dataProvider, 
  array(
        $search_dataProvider['Currency'],
        $search_dataProvider['profitMarginCurrency'],

  ));
4

1 に答える 1

0

私は同じ問題を抱えていましたが、実際には、作者が投稿したコードの例とここに貼り付けたコードがどのように機能するかわかりません。

クラスを簡単な方法で変更しましたが、今ではうまくいきます。そう

クラス ExportableGridBehavior 内

  if ($data instanceof CActiveDataProvider) {
    $this->csvRowHeaders($fileHandle, $attributes, $data->model);
    $this->csvRowModels($fileHandle, new CDataProviderIterator($data, 150), $attributes);

  } else if ($data instanceof CArrayDataProvider) {   // @luca
    fputcsv($fileHandle, $attributes, $this->csvDelimiter, $this->csvEnclosure);
    foreach ($data->rawData as $i=>$r) {
      $row = array();
      foreach ($attributes as $attr) {
        $row[] = $data->rawData[$i][$attr];
      }
      fputcsv($fileHandle, $row, $this->csvDelimiter, $this->csvEnclosure);
    }


  } else if (is_array($data) && current($data) instanceof CModel) {

コントローラーで

  $dataProvider = new CArrayDataProvider($filteredData, array(
    'keyField' => 'idvr',
    'id'=>'idvr',
    'sort'=>array(          'attributes'=>array('numfor','codfis','driscos','nominativo','codtrib','ravved','impdeb'),
      'defaultOrder'=>array('driscos'=>'ASC')
    ),
    'pagination' => array( 'pageSize'=>50, ),
    'keyField' => 'codfis',
  ));


if ($this->isExportRequest())
  $this->exportCSV($dataProvider, array_keys($dataProvider->rawData[0]));
于 2014-08-05T11:25:19.897 に答える