Spis treści

GridView


Zawijanie tekstu w kolumnach

[
 'attribute' => 'symbol',
 'contentOptions' => ['class' => 'text-wrap'],
],

Zapamiętanie ustawień filtrowania i paginacji

Problem: jak zapamiętać ustawienia filtrowania w GridView tak aby po opuszczeniu i powrotu na stronę były dalej aktywne.

W modelu Search

class NazwamodeluSearch extends Nazwamodelu{
 
...
 
public function search($params) {
 
        $nazwamod  = "NazwamodeluSearch";
        $nazwases  = "nazwamodelusearch";
 
        if (!isset($params[$nazwamod])) {
            if (isset(Yii::$app->session[$nazwases])) {
                $params[$nazwamod] = Yii::$app->session[$nazwases];
            }
        } else {
            Yii::$app->session[$nazwases] = $params[$nazwamod];
        }
        if(isset(Yii::$app->session['page_'.$nazwases]) && !isset($_GET['page'])){
            $_GET['page'] = Yii::$app->session['page_'.$nazwases];
        } else {
            isset($_GET['page']) ? Yii::$app->session['page_'.$nazwases] = $_GET['page']:'';
        }
...

dataProvider - dodatkowa klauzula where

Dodawanie dodatkowej klauzuli where i domyślne sortowanie do dataProvider w kontrolerze

 $dataProvider->query->andWhere('status = 10');
 $dataProvider->sort->defaultOrder = ['id' => SORT_DESC];

GridView - domyślne parametry

Globalne ustawienia wybranych parametrów CSS w GridView w pliku konfiguracyjnym main.php

...
'bootstrap' => ['log'],
    'modules' => [],

     'container' => [
        'definitions' => [
            'yii\grid\GridView' => [
                'tableOptions' => [
                    'class' => 'table table-condensed table-bordered table-hover',
                ],        
            ],
            'yii\grid\DataColumn' => [       
                'filterInputOptions' => ['class' => 'form-control input-sm',],
            ],
            'yii\widgets\LinkPager' => [
                'firstPageLabel' => 'Pierwsza',
                'lastPageLabel'  => 'Ostatnia'
            ]
        ],
    ],
...

Zmienna zewnętrzna w gridview

Użycie wartości zewnętrznej zmiennej wewnątrz funkcji określającej wartość atrybutu.

...
$zmienna = 10;
echo GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
 
       ['attribute' => 'ilosc',
            'label' => '',
            'format' => 'html',
            'value' => function ($model) use ($zmienna) {
                return $zmienna 
            }
       ]
    ]
...

GridView - kolumna z akcjami

Kolumna akcji z własnymi ikonami i akcjami

['class' => 'yii\grid\ActionColumn',
 
                'template' => '{tworzel} {delete}',
                'buttons' => [
                    'delete' => function ($url, $model) {
                        return Html::a('', $url, [
                                    'title' => 'Usuń plan',
                                    'class' => 'fa fa-trash-o text-primary',
                                    'data' => [
                                        'confirm' => 'Czy na pewno usunąć plan ??',
                                        'method' => 'post',
                                    ],
                        ]);
                    },
 
                    'tworzel' => function ($url, $model) {
                        return Html::a('', $url, [
                                    'title' => 'Edytuj elementy planu',
                                    'class' => 'fa fa-th text-primary',
                        ]);
                    }
                        ],
 
                'urlCreator' => function ($action, $model, $key, $index) {
                    if ($action === 'delete') {
                        $url = '/plany/delete/' . $model->id;
                        return $url;
                    }
                    if ($action === 'tworzel') {
                        $url = '/plan/elementy/' . $model->id;
                        return $url;
                    }
                }
 ]

Dwa GridView na jednej stronie

Chcemy umieścić dwie listy GridView z różnymi modelami danych w jednym widoku

use yii\grid\GridView;
 
$userProvider->pagination->pageParam = 'user-page';
$userProvider->sort->sortParam = 'user-sort';
 
$postProvider->pagination->pageParam = 'post-page';
$postProvider->sort->sortParam = 'post-sort';
 
echo 'Users';
echo GridView::widget([
    'dataProvider' => $userProvider,
    ...
]);
 
echo 'Posts';
echo GridView::widget([
    'dataProvider' => $postProvider,
    ...
]);

GridView - kolumna wyboru

Kolumna wyboru umożliwiająca zaznaczenie elementów i wykonanie na nich jakiejś akcji

<?= Html::beginForm(['controller/akcja'],'post');?>
<?= Html::dropDownList('action','',[''=>'Z zaznaczonymi: ','u'=>'Usuń','z'=>'Zatwierdź'],['class'=>'dropdown',])?>
<?= Html::submitButton('Wykonaj', ['class' => 'btn btn-info',]);?>
<?= GridView::widget([
  'dataProvider' => $dataProvider,
  'columns' => [
     ['class' => 'yii\grid\CheckboxColumn'],
     'id',
     ],
  ]); ?>
<?= Html::endForm();?> 
public function actionAkcja(){    
$action=Yii::$app->request->post('action'); 
$selection=(array)Yii::$app->request->post('selection');
    foreach($selection as $id){
        $element=Model::findOne((int)$id);
        if($action=='u'{
             $element->delete();
        } else {
          ...
        $element->save(); 
        }
    }
 }

GridView - klasy CSS w nagłówkach i kolumnach

['attribute' => 'godzin',
           'headerOptions' => ['class' => 'col-md-1'],
           'contentOptions' => ['class' => 'col-md-1 text-center']
],

headerOptions - klasy dotyczące nagłówka kolumny
contentOptions - klasy dotyczące zawartości kolumny

GridView - domyślne sortowanie

GridView - domyślne sortowanie danych w GridView

Moduł Search

...
 
$dataProvider = new ActiveDataProvider([
      'query' => $query,
      'sort' => [     
          'defaultOrder' => [
              'nazwa_pola1' => SORT_ASC, 
              'nazwa_pola2' => SORT_DESC
           ],
       ],
]);
 
...