phpNT - Export to file
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:
Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π² xls, csv, word, html, pdf ΡΠ°ΠΉΠ»Ρ. ΠΡΠ»ΠΈ, Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, ΠΌΠΎΠ΄Π΅Π»Ρ Search ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ DataProvider Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° GridView ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΡΡ ΡΠΈΠ»ΡΡΡ, ΡΠΎ ΠΊ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌΡΠΌ Π΄Π°Π½Π½ΡΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ ΡΡΠΎΡ ΡΠΈΠ»ΡΡΡ.
ΠΠ»Ρ CSV ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ Π²ΡΠ±ΠΎΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΎΠΊ 'UTF-8' (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) ΠΈ 'Windows-1251'.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ Π΄Π»Ρ ΡΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ PDF ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ README, Π² ΠΏΠ°ΠΏΠΊΠ΅ /dompdf_ru.
DEMO
Π‘ΠΎΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠΈ:
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°:
php composer.phar require "phpnt/yii2-export" "*"
ΠΈΠ»ΠΈ
composer require phpnt/yii2-export
ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² composer.json ΡΠ°ΠΉΠ»
"phpnt/yii2-export": "*"
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅:
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅:
// Π² ΡΠ°ΠΉΠ»Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (main.php - Advanced ΠΈΠ»ΠΈ web.php - Basic) Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡ Π² controllerMap
...
'controllerMap' => [
'export' => 'phpnt\exportFile\controllers\ExportController'
],
'components' => [
...
],
Π Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Search:
...
class GeoCitySearch extends GeoCity
{
...
// ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π² ΡΠ°ΠΉΠ»Ρ
public function exportFields()
{
return [
'id' => function ($model) {
/* @var $model User */
return $model->id;
},
'name_ru',
'region_id' => function ($model) {
/* @var $model GeoCity */
if (isset($model->region->name_ru)) {
return $model->region->name_ru;
}
return false;
},
'lat',
'lon'
];
}
...
}
ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ:
...
// cΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΡ
public function actionExportFile()
{
$searchModel = new GeoCitySearch();
$dataProvider = $searchModel->search(\Yii::$app->request->queryParams);
return $this->render('export-file', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
...
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ 1:
use phpnt\exportFile\ExportFile;
use yii\grid\GridView;
/* @var $searchModel \common\models\GeoCitySearch */
/* @var $dataProvider yii\data\ActiveDataProvider */
// ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
echo ExportFile::widget([
'model' => 'common\models\GeoCitySearch', // ΠΏΡΡΡ ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ
'searchAttributes' => $searchModel, // ΡΠΈΠ»ΡΡΡ
]) ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
...
]
]);
?>
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ 2:
use phpnt\exportFile\ExportFile;
use yii\grid\GridView;
/* @var $searchModel \common\models\GeoCitySearch */
/* @var $dataProvider yii\data\ActiveDataProvider */
// ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
echo ExportFile::widget([
'model' => 'common\models\search\UserSearch', // ΠΏΡΡΡ ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ
'title' => 'ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°',
'queryParams' => Yii::$app->request->queryParams,
'getAll' => true, // Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ - true, ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ - false
'csvCharset' => 'Windows-1251', // ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° csv ΡΠ°ΠΉΠ»Π°: 'UTF-8' (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) ΠΈΠ»ΠΈ 'Windows-1251'
'buttonClass' => 'btn btn-primary', // ΠΊΠ»Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ
'blockClass' => 'pull-left', // ΠΊΠ»Π°ΡΡ Π±Π»ΠΎΠΊΠ° Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠ½ΠΎΠΏΠΊΠ°
'blockStyle' => 'padding: 5px;', // ΡΡΠΈΠ»Ρ Π±Π»ΠΎΠΊΠ° Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠ½ΠΎΠΏΠΊΠ°
// ΡΠΊΡΠΏΠΎΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ (true - ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ, false - Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ)
'xls' => true,
'csv' => true,
'word' => true,
'html' => true,
'pdf' => true,
// ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΊΠ½ΠΎΠΏΠΎΠΊ
'xlsButtonName' => Yii::t('app', 'MS Excel'),
'csvButtonName' => Yii::t('app', 'CSV'),
'wordButtonName' => Yii::t('app', 'MS Word'),
'htmlButtonName' => Yii::t('app', 'HTML'),
'pdfButtonName' => Yii::t('app', 'PDF')
]) ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
...
]
]);
?>