SetSortable v kombinacii so setRender() nette datagrid

Tommy7777
Člen | 13
+
0
-

Zdravím, chcel by som sa spýtať ako spraviť setSortable v gride ak ‚type‘ nemám v db ale renderujem si ho pomocou funkcie. Za odpovedá ďakujem :)

Editoval Tommy7777 (27. 7. 14:23)

iGavrilo
Člen | 32
+
0
-

Ahoj, nie som si istý či rozumiem tvojej otázke môžeš ju viac špecifikovať aký je problém a čo presne si už skúšal ?

iGavrilo
Člen | 32
+
+1
-

Skús to takto :)

$grid->addColumnText('type', 'Typ', 'mall_id')
            ->setRenderer(function ($row){
                if($row->mall_id !== null) {
                    return 'Mall';
                }
                return 'Eshop';
            })->setSortable()->setFilterText();
Tommy7777
Člen | 13
+
0
-

Wau super funguje to, ďakujem pekne :) Čiže bolo potrebne tam ako tretí parameter zadať ten riadok čo je v tabuľke ze?

Kamil Valenta
Člen | 562
+
+1
-

Pozor ovšem, že se pracuje s hodnotou „mall_id“ co je v DB, nikoliv upravenou v renderu. Při setSortable() to až tak nemusí vadit, protože se seřadí věty s null hodnotou a pak ty ostatní. Při setFilterText() už to ale vadit bude hodně, protože pokud někdo bude filtrovat např. string „Mal“, nic mu to nevrátí, ačkoliv uživatel uvidí mnoho řádků s hodnotou „Mall“.
Pokud tam má být dostupný i filtr, je potřeba upravit datasource tak, aby se tam už ta hodnota vracela v resultsetu…

Tommy7777
Člen | 13
+
0
-

@KamilValenta ďakujem, poradili by ste mi ako to spravit?

Tomáš Vodička
Člen | 16
+
0
-

https://contributte.org/…filters.html#…

v setCondition() callbacku si přeložíš hodnotu zadanou od uživatele na hodnotu, která je v DB

případně pro zjednodušení můžeš místo filterText() použít filterSelect()

Kamil Valenta
Člen | 562
+
0
-

Nebo si dát IF() už do selectu, nebo to joinout, pokud je na to číselníková tabulka…