我希望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数组中的顺序导出列。
答案 0 :(得分:0)
导出的数据基于dataProvider。基于此,你应该选择你需要的..序列中的列。
你应该根据你需要的顺序分配每个列的选择来构建一个dataProvider。
$yourDataProvider = YourModel::find()
->select('col1, col2, col3 ... ')
->where( ... )
....