Grid-uri cu coloane dinamice

Ce sunt

Sunt grid-uri la care se pot specifica coloane obligatorii (care sunt vizibile mereu) si coloane specificate in mod dinamic ca fiind vizibile. Acestea din urma pot fi folosite pentru a permite user-ului sa-si aleaga coloanele pe care vrea sa le vada, pe langa cele obligatorii.

Cum se face

A. In index.php

echo MaxGridView::widget([
  'dataProvider'           => $dataProvider,
  'id'                     => 'grid-list',
  'filterModel'            => $searchModel,
  'layout'                 => $gridLayout,
  'mandatoryColumns'       => ['theSerial','partner','partnerCif','seriesNumber','issueDate','actions'],
  'displayColumns'         => UserOption::getDisplayColumns($this),
  'hideInPopupColumns'     => [$dea ? null : 'accountingStatus']
  'settingsButtonCssClass' => 'gigi',
  'summary'                => Yii::t('app', 'Page {page} of {pageCount}, containing {count} items of total {totalCount}, from {begin} to {end}.'),

Adica:

  • folosim MaxGridView
  • setam coloanele obligatorii in mandatoryColumns
  • setam celelalte coloane vizibile in displayColumns ca UserOption::getDisplayColumns($this)
  • putem customiza pozitia si aspectul butonului de configurare coloane setand settingsButtonCssClass; daca ai bara de prerequisites, foloseste indexSettingsButtonLower
  • daca exista coloane care – dintr-un motiv sau altul – trebuie ascunse in popup-ul de selectie coloane, atunci ele se trec in array-ul hideInPopupColumns

Atentie! fiecare coloana a grid-ului – din “columns” – trebuie sa aiba acum o cheie. Adica array-ul columns devine acum array asociativ complet. Vezi implementarea din index-ul de la invoice sau partner.

 

B. In controller

  • trebuie ca controller-ul sa extinda frontend/CommonController
  • trebuie sa adaugi get-grid-properties-form la behaviours()

 

C. In search model

$listingOptions = UserOption::getListingOptions();
$dataProvider->pagination->pageSize = isset($listingOptions['pageSize'])?$listingOptions['pageSize'] :30;

Adica:

  • preluam pageSize din setarile user-ului si o folosim – daca aceasta este setata

D. In cazul in care modelul are campuri custom, atunci specificam asta in MaxGridView

MaxGridView::widget([
( ... )
'customFieldModelType'   => CustomField::$MODELTYPE_CUSTOMER

Facem aceasta pentru ca in popup-ul de coloane sa se afiseze si campurile custom.

 

About

Software Development Manager, Architect

Leave a Reply

Your email address will not be published. Required fields are marked *

[TOP]