====== 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 'Z zaznaczonymi: ','u'=>'Usuń','z'=>'Zatwierdź'],['class'=>'dropdown',])?> 'btn btn-info',]);?> $dataProvider, 'columns' => [ ['class' => 'yii\grid\CheckboxColumn'], 'id', ], ]); ?> 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 ], ], ]); ...