dimmitri / yii2-expand-row-column
为 Yii 2.0 GridView 小部件扩展行列。
v1.0.5
2018-09-16 21:53 UTC
Requires
- php: >=5.5.0
- yiisoft/yii2: ~2.0.1
This package is not auto-updated.
Last update: 2024-09-29 02:44:35 UTC
README
显示一个可点击的列,它将发送 AJAX 请求并在新行中显示其结果数据。
安装
安装此扩展的首选方式是通过 composer。
运行以下命令之一:
php composer.phar require --prefer-dist dimmitri/yii2-expand-row-column "*"
或者
"dimmitri/yii2-expand-row-column": "*"
将以下内容添加到您的 composer.json
文件的 require 部分。
用法
在版本 1.0.5 之前,'column_id' 属性是自动生成的。在版本 1.0.5 中,现在可以分配 'column_id' 属性。分配 'column_id' 属性是可选的,但推荐这样做。
view/index.php
<?php use dimmitri\grid\ExpandRowColumn; use yii\grid\ActionColumn; use yii\grid\GridView; use yii\grid\SerialColumn; use yii\helpers\Html; use yii\helpers\Url; ?> <?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => SerialColumn::class], // simple example [ 'class' => ExpandRowColumn::class, 'attribute' => 'name', 'column_id' => 'column-info', 'url' => Url::to(['info']), ], // advanced example [ 'class' => ExpandRowColumn::class, 'attribute' => 'status_id', 'column_id' => 'column-status', 'ajaxErrorMessage' => 'Oops', 'ajaxMethod' => 'GET', 'url' => Url::to(['detail']), 'submitData' => function ($model, $key, $index) { return ['id' => $model->status_id, 'advanced' => true]; }, 'enableCache' => false, 'afterValue' => function ($model, $key, $index) { return ' ' . Html::a( Html::tag('span', '', ['class' => 'glyphicon glyphicon-download', 'aria-hidden' => 'true']), ['csv', 'ref' => $model->status_id], ['title' => 'Download event history in csv format.'] ); }, 'format' => 'raw', 'expandableOptions' => [ 'title' => 'Click me!', 'class' => 'my-expand', ], 'contentOptions' => [ 'style' => 'display: flex; justify-content: space-between;', ], ], ['class' => ActionColumn::class], ], ]) ?>
动作
public function actionIndex() { $searchModel = new ModelSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); // The key (or keyField) must be filled, if the key is not equal to primary key. $dataProvider->key = 'uuid';// for ActiveDataProvider // $dataProvider->keyField = 'uuid';// for ArrayDataProvider return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); } public function actionDetail($id, $advanced = false) { $model = $this->findModel($id); $dataProvider = new ArrayDataProvider([ 'allModels' => $model->events, ]); return $this->renderAjax('_detail', [ 'dataProvider' => $dataProvider, 'advanced' => $advanced, 'id' => $id, ]); }
view/_detail.php
<?php use yii\grid\GridView; use yii\widgets\Pjax; ?> <?php Pjax::begin(['id' => "pjax-{$id}", 'enablePushState' => false]); ?> <?= GridView::widget([ // .... ]) ?> <?php Pjax::end(); ?>