我希望 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数组中设置的顺序。