To jest stara wersja strony!
Spis treści
GridView (Bootstrap4)
Konfiguracja
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'tableOptions' => ['class' => 'table table-bordered table-hover table-sm'], 'responsive' => true, 'hover' => true, 'pjax' => true, 'bordered' => true, 'striped' => true, 'condensed' => true, 'toolbar' => [ ['content' => Html::a('<i class="far fa-plus-square"></i> Dodaj użytkownika', ['create-form'], ['class' => 'btn btn-success']) ], '{export}', '{toggleData}', ], 'exportConfig' => [ GridView::CSV => ['label' => 'Export do CSV', 'filename' => 'Uzytkownicy_' . date('Y-m-d')], GridView::EXCEL => ['label' => 'Export do EXCEL', 'filename' => 'Uzytkownicy_' . date('Y-m-d')], ], 'panel' => [ 'type' => GridView::TYPE_INFO, 'heading' => 'Lista użytkowników', ], 'columns' => [] ]) ?>
Konfiguracja kolumn
'headerOptions' => ['style' => 'width:10%'], 'contentOptions' => ['class' => 'text-wrap'],
Przesyłanie parametrów fitrowania metodą POST
Controller
$dataProvider = $searchModel->search(Yii::$app->request->post());
Widok
<?php Pjax::begin(['id' => 'some-id-you-like', 'timeout' => false, 'enablePushState' => false, 'clientOptions' => ['method' => 'POST']]); ?> <?= GridView::widget([ ... ]) ?> <?php Pjax::end() ?>
ExpandRowColumn
Ikony
Zamiana standardowych ikon rozwijania i zwijania wiersza
'expandIcon' => '<small><i class="far fa-plus-square text-muted"></i></small>', 'collapseIcon' => '<small><i class="far fa-minus-square text-muted"></i></small>',
'expandIcon' => '<small><i class="fas fa-chevron-down text-muted"></i></small>', 'collapseIcon' => '<small><i class="fas fa-chevron-up text-muted"></i></small>',
Expand column
[ 'class' => '\kartik\grid\ExpandRowColumn', 'expandIcon' => '<small><i class="fas fa-chevron-down text-muted"></i></small>', 'collapseIcon' => '<small><i class="fas fa-chevron-up text-muted"></i></small>', 'value' => function ($model, $key, $index, $column) { $session = Yii::$app->session; if ($session->has('expand_wiedza') && $model->id == $session['expand_wiedza']) { return GridView::ROW_EXPANDED; } else { return GridView::ROW_COLLAPSED; } }, 'detailUrl' => Yii::$app->request->getBaseUrl() . '/wiedza-dziedziny/view', 'detailRowCssClass' => 'bg-light m-2', ],
W kontrolerze
public function actionView() { $id = Yii::$app->request->post('expandRowKey'); $session = Yii::$app->session; $session['expand_wiedza'] = $id; $model = WiedzaDziedzinaNauka::find() ->where(['id_wiedza_dziedziny' => $id]) ->all(); return $this->renderAjax('view', [ 'model' => $model, 'id_wiedza_dziedziny' => $id ]); }
Kolor tła wiersza i jego rozwinięcia
<?php $this->registerCss(" .tlo_view{ background-color:#f5f5f0 } "); $this->registerJs(<<<JS var grid = $('#cykl_obsl'); grid.on('kvexprow:toggle', function (event, ind, key, extra, state) { $('tr').removeClass('tlo_view'); $('[data-key='+key+']').addClass('tlo_view'); }); JS );
JavaScript - Expand column
var grid = $('#studenci');
grid.on('kvexprow:toggle', function (event, ind, key, extra, state) {
if(state == false){
$.get('/konfig/del-sesja?n=expand_studenci');
}
});
Function wywoływana jest przy każdym rozwinięciu lub zwinięciu wiersza.
state = 1 - rozwinięto, state = 0 =- zwinięto
Stan rozwinięcia zapamiętuję w sesji (patrz wyżej) a jeśli zwinięto usuwam tą sesję.
Kolumna wyboru (check)
Widok
<div class="mb-2">
<?= Html::beginForm(['/rekrutacja-kandydaci/mail-to'], 'post'); ?>
<?= Html::dropDownList('action', '', ['' => 'Z zaznaczonymi: ', 'm' => 'Wyślij e-mail'],
['class'=> 'dropdown',]) ?>
<?= Html::submitButton('Wykonaj', ['class' => 'btn btn-success btn-sm',]); ?>
</div>
<?=
GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
...
'columns' => [
...
[
'class' => '\kartik\grid\CheckboxColumn'
],
...
?>
<?= Html::endForm(); ?>
W kontrolerze
public function actionMailTo(){ $post = Yii::$app->request->post('selection'); foreach($post as $id){ .... } }
Filtrowanie danych
Wyszukiwanie po początkowych znakach modelSearch
->andFilterWhere(['like', 'nazwisko', $this->nazwisko.'%',false])
Własna kolumna akcji
Przycisk delete
Własna kolumna akcji z przyciskiem delete.
Jeżeli dany element jest używany relacyjnie w innych tabelach z regułą RESTRICT, przycisk delete nie pojawia się.
Patrz: Sprawdzanie czy relacje pozwalają na usunięcie
Ze względów bezpieczeństwa parametr id przekazywany jest do akcji delete metodą post.
Operacja wymaga potwierdzenia.
Patrz: Potwierdzanie usunięcia
['attribute' => 'akcje', 'format' => 'raw', 'label'=>false, 'headerOptions' => ['style' => 'width:5%'], 'value' => function($model) { if (Pomocnik::checkDelete('tytuly', $model->id)) { return Html::a('<i class="far fa-trash-alt"></i>', ['tytuly/delete', 'id' => $model->id], ['class' => 'btn btn-outline-danger btn-sm', 'title' => 'Usuń tytuł', 'data' => [ 'method' => 'post', params' => ['id' => $model->id] ], 'data-confirm' => 'Na pewno usunąć tytuł: <b>' . $model->nazwa . '</b>? <br> (Operacja nieodwracalna !)' ]); } else { return ''; } } ],