Narzędzia użytkownika

Narzędzia witryny


kartik_gridview

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 '';
     }
    }
 ],
kartik_gridview.txt · ostatnio zmienione: 2024/09/15 16:22 przez 127.0.0.1