Yii2:导出列顺序

时间:2017-08-15 09:17:24

标签: php yii2 yii2-extension

我希望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 = 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数组中的顺序导出列。

1 个答案:

答案 0 :(得分:0)

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

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

$yourDataProvider = YourModel::find()
->select('col1, col2, col3 ...  ') 
->where( ... ) 
....