====== 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
],
],
]);
...