0

我希望 Yii2-export 生成的导出文件(特别是 XLS)通过按在 gridview 配置弹出菜单中选择的顺序导出所有列来模仿 gridview。

我的意思是,让我们有两列 A 和 B。在 gridview 配置菜单(小扳手图标)中,我设置 B 排在第一位。我的 dynagrid 输出如下所示:

B title| A title
-------|---------
B data | A data

但是,导出完全忽略此设置并将 A 作为第一列输出(因为它首先在作为配置传递的列数组中定义):

A title  | B title
---------|----------
A data   | B data

在 DB 中,我有表 tbl_dynagrid,它应该包含 gridview 的配置。我找到了id为gridview_的对应记录。但是数据列的内容不会随着通过 gridview 配置重新排序列而改变。

有没有办法如何加载(最好是通过 PHP 本身,没有 JS)列的顺序并在考虑到该顺序的情况下导出到 XLS 文件?

谢谢你的帮助。

更新:

我发现,gridview 连接到不同的数据库。每次自定义后,表tbl_gridview数据列的值都会按预期变化。

这样,我需要一种方法来将 gridview 自定义菜单中使用的哈希作为列 ID 转换为实际的列名左右。

实际代码:

$dataProvider = //.. 
$pageName = //..

列数组:

$columns = [
    [ 'attribute' => 'col1', 'encodeLabel' => false, 'label' => 'Column A' ],
    [ 'attribute' => 'col2', 'encodeLabel' => false, 'label' => 'Column B' ]
];

导出小部件:

echo ExportMenu::widget([
    'dataProvider' => $dataProvider,
    'target'=>ExportMenu::TARGET_SELF,
    'showConfirmAlert'=>false,
    'container'=>['class'=>'myclass'],
    'filename'=>'test',
    'columns' => $columns,
    'fontAwesome' => true,
    'dropdownOptions' => [
        'label' => Yii::t('layout','Export'),
        'class' => 'btn btn-default'
    ]]);

最后是动态网格:

$dynagrid = DynaGrid::begin([
    'columns'=>$columns,
    'theme'=>'simple-striped',
    'showPersonalize'=>true,
    'allowThemeSetting'=>false,  
    'allowFilterSetting'=>false,
    'allowSortSetting'=>false,
    'toggleButtonGrid'=>['class'=>'toggleButton'],
    'gridOptions'=>[
        'dataProvider'=>$dataProvider,
        'options'=>['class'=>'myid'],
        'filterModel'=>$searchModel,
        'showPageSummary'=>false,
        'floatHeader'=>false,
        'pjax'=>false,       
        'toolbar' =>  [
             ['content'=>'{dynagridFilter}{dynagridSort}{dynagrid}'],
             '{export}',
        ]
    ],
    'options'=>['id'=>$pageName]
]);

我想要的只是能够按照在gridview中选择的顺序导出列,而不是按照它们在$columns数组中设置的顺序。

4

1 回答 1

0

导出的数据基于 dataProvider。基于此,您应该选择您需要的 .. 序列中的列 ..

您应该根据您需要的顺序分配每一列的选择来构建一个 dataProvider ..

$yourDataProvider = YourModel::find()
->select('col1, col2, col3 ...  ') 
->where( ... ) 
.... 
于 2017-08-15T09:45:41.960 回答