[ 'attribute' => 'symbol', 'contentOptions' => ['class' => 'text-wrap'], ],
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']:''; } ...
Dodawanie dodatkowej klauzuli where i domyślne sortowanie do dataProvider w kontrolerze
$dataProvider->query->andWhere('status = 10'); $dataProvider->sort->defaultOrder = ['id' => SORT_DESC];
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'
]
],
],
...
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 } ] ] ...
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; } } ]
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, ... ]);
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(); } } }
['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 danych w GridView
Moduł Search
... $dataProvider = new ActiveDataProvider([ 'query' => $query, 'sort' => [ 'defaultOrder' => [ 'nazwa_pola1' => SORT_ASC, 'nazwa_pola2' => SORT_DESC ], ], ]); ...