ListView

Witam forumowiczów,

Jestem początkującym użytkownikiem Yii2.

Próbuje zmienić widok widgetu ListView, próbuje dojść jak się to robi.

Jak np. wstawić obrazek do komórki listy-tabeli. Albo jak zmienić strzałki „<<” i „>>” na „poprzeni” i „następny”. Generalnie, jak kontrolować widok, podejrzewam, że trzeba dotrzeć do kodu widgetu i pozmieniać go, albo użyć jakiś metod obiektu-widgetu. Gdzie tego szukać i jak to zrobić, ktoś może się orientuje?

Bardzo proszę o pomoc,

Pozdrawiam

Rzeczy, które Cię interesują, znajdziesz w następujących parametrach ListView:

‘layout’ - http://www.yiiframework.com/doc-2.0/yii-widgets-baselistview.html#$layout-detail

‘itemView’ - http://www.yiiframework.com/doc-2.0/yii-widgets-listview.html#$itemView-detail

‘pager’ - http://www.yiiframework.com/doc-2.0/yii-widgets-baselistview.html#$pager-detail

Dzięki za inforamcje.

Pozdrawiam

Witam ponownie,

Jeszcze raz dzięki za pomoc, trochę zgłębiłem temat i nasunął mi się inny problem.

Jak udało mi się zorientować, do tabeli z gridview można dodawać własne kolumny tzn. kolumnę z taką samą wartością dla wszytkich komórek, lub inną wartością dla każdej. Jak osiąnąć to drugie? Jak rozumiem, trzeba

[‘class’ => ‘yii\grid\Kolumna’]

gdzie "Kolumna" to klasa dziedzicząca z yii/grid/Column

Potem, nadpisać metodę

renderDataCell() np. dla wartości komórek.

I tu pojawia się problem.

Jak key i index (klasa Column) mają się dla modelu. Po co jeszcze raz używać modelu, skoro można zdefinować kolumny odpowiednim zapytaniem (find:: z joinem lub polecenie sql). Nie łapie po co to jest. Jeśli sie mylę w idei bardzo bym prosił o korektę mojego toku rozumowania.

Bardzo proszę o pomoc, jeśli ktoś się orientuje w temacie.

Dzięki,

Pozdrawiam

Jeśli dobrze zrozumiałem i potrzebujesz kolumny, która zawiera wartość jakoś skorelowaną z modelem i jednocześnie nie jest atrybutem tego modelu to nie potrzebujesz tworzyć swojej własnej klasy dla kolumny i nadpisywać jej metod, możesz użyć funkcji anonimowej.

Dla przykładu:




<?= GridView::widget([

    'dataProvider' => $dataProvider,

    'columns' => [

        [

            'label' => 'Etykieta kolumny',

            'value' => function ($model, $key, $index, $column) {

                // masz tutaj dostęp do modelu i możesz go użyć jak chcesz

                // $model to model z providera

                // $key klucz kolejnego wiersza w grid

                // $index indeks wiersza danych z bazy

                // $column to referencja do obiektu yii\grid\DataColumn

                return ...

            }

        ]

    ],

]) ?>



Zaletą takiego rozwiązania jest to, że masz wszystkie potrzebne dane i nie musisz modyfikować ich źródła, aby uzyskać wartość, o którą się rozchodzi.

To wiele wyjaśnia. Dzięki.

Nie łapie jeszcze jednej rzeczy. Jak dodaje

[‘class’ => ‘yii\grid\SerialColumn’],

[‘class’ => ‘yii\grid\SerialColumn’]

to w pierwszej kolumnie dostaje prawidłową kolumnę (np. id), ale w drugiej kolumnie gridview dostaje kolumnę o tych samych wartościach co w pierwszej, a powinna wyświetlać się druga kolumna modelu, np. imie lub nazwisko. Czy ktoś orientuje sie może jak zrobić, aby prawidłowo wyświetlały się kolumny?

Pozdrawiam

Jeśli ustawiłeś dwa razy tą samą kolumnę to ciężko, żeby pojawiło się coś innego. SerialColumn wyświetla kolejny numer w gridzie.

Dodatkowo - sama kolejność dodawania kolumn nie wpływa na to, co w nich będzie, więc nie możesz się spodziewać, że jak dodasz drugą kolumnę typu DataColumn to pojawi się w niej automatycznie wartość atrybutu modelu, który przypadkiem dodałeś jako drugi.

Kurcze, dopiero teraz załapałem. Dzięki za wyjaśnienie. Pozdrawiam.