[addon datagrid] DataGrid
- Pari
- Člen | 15
romansklenar napsal(a):
Ano funguje.
Zajímavé, mě pořád ne, s největší pravděpodobností je chyba ve mně, to přiznávám, ale zkusil jsem už ledacos. Níže dávám na stáhnutí zdrojáky, je to aktuální verze stáhnutá ze SVN akorát do souboru ExamplePresenter.php je doplněna ta funkce řádek 26 a pak callback na řádku 48. Co dělám špatně? :( Děkuji za pomoc a také za DataGrid který je opravdu povedený!
Stáhnutí: http://pari.cz/…datagrid.zip
- romansklenar
- Člen | 655
Chyba je jen v definici callbacku. Když tu funkci totiž máš součástí třidy presenteru, tak musí být takto:
$grid['city']->formatCallback[] = array($this, 'nejakaFunkce');
Další možnost je vyhodit ji z presenteru mimo třídu a bude ti fungovat i ten tvůj zápis.
Editoval romansklenar (10. 7. 2009 22:35)
- romansklenar
- Člen | 655
Chtěl bych poděkovat všem za pozitivní ohlasy, které mi došly na mail nebo tady zazněly. Do vývojové verze jsem zapracoval všechny bugfixy, o kterých jsem věděl nebo je někdo nahlásil a zároveň přibylo i pár nových featurek (a ještě nejspíš přibydou – ty nejvýznamnější jsou nejméně nápadně :)) z nápadů co se objevily tady na fóru a mě v mailech, takže díky všem za nápady :)
Momentální stav na SVN je, že nevím o žádné chybě. Takže by to mělo být použitelné i pro produkční nasazení. Než ale definitivně vydám novou verzi, aktualizuju demo, dokumentaci a archívy, rád bych nechal nějaký čas na otestování a dodělání ještě dalších věcí a ještě na pár nedořešených problémů v Nette + snippety v nových šablonách.
S klidem můžete aktualizovat, nekompatibility by být neměly a aspoň se to ověří v produkčním nasazení.
Editoval romansklenar (10. 7. 2009 23:10)
- jarks
- Člen | 94
Dobrý den, pár otázek:
1. do Datagridu přidám akci:
$grid->addAction('Detail', 'DetailPresenter:sablona', clone $icon->class('icon icon-detail'));
uživatel např. ze třetí stránky gridu klikne na ikonku Detail, prohlédne si detailní zobrazení a chce se vrátit zpět, což je v šabloně Detail.sablona.phtml zapsáno:
<a href="{plink Datagrid:default}">Zpět na přehled</a>
Datagrid se zobrazí, ale od začátku == strana 1.
Otázka: Dalo by se nějak zařídit, aby se vrátil zase na tu
stránku odkud byl detail zavolán?
2. Nová verze Datagridu dovoluje uživateli pomocí
roletky nastavovat počet zobrazených řádků. Zdá se, že to funguje jen
v případě, že se z nastavení komponenty vynechá
$grid->itemsPerPage = počet_řádků;
.
Otázky: Dá se nějak ovlivnit, co bude obsahovat roletka? Aby
tam např. nebylo „vše“? Dá se nastavit výchozí počet řádků?
Díky za Datagrid a předem za odpověď.
- jarks
- Člen | 94
jarks napsal(a):
Datagrid se zobrazí, ale od začátku == strana 1.
Otázka: Dalo by se nějak zařídit, aby se vrátil zase na tu stránku odkud byl detail zavolán?
Tak první část beru zpět. Nevím jak, ale už je to v pořádku. Možná nějaká nesrovnalost při kopírování nové verze ze SVN.
- romansklenar
- Člen | 655
1. Ano jde to – dokonce 2 způsoby (viz v tomto vlákně)
2.
$grid->itemsPerPage = 10; // výchozí počet řádků
$grid->displayedItems = array(10, 20, 50); // roletka
Stringové hodnoty v poli roletky jsou považovány za
all/vše
. Projevuje se ta chyba i s poslední revizí z SVN
(r33)? V r30 jsem tuto chybu opravoval.
Ještě pozor na jednu věc! Pro všechny kdo používají vývojovou verzi
z SVN ( >= r23
), jsou zde nově závislosti na verzích Nette
a dibi, takže:
Závislosti nové verze DataGridu:
Nette >= r356
dibi >= r222
Editoval romansklenar (13. 7. 2009 12:09)
- romansklenar
- Člen | 655
Proto se nejdříve zeptám – musí být ty metody implementující
rozhraní ArrayAccess
v Controlu
final?
Nedokážu si moc totiž představit jak bych měl DataGrid
přepsat, abych zachoval přístup ke sloupcům podobně jako ve formulářích
$grid['sloupec']
. Nedědit z Controlu
a jít
v nejnižším společném jmenovateli na PresenterComponent
a pak
tam toho půltuctu metod znovu dopisovat je jako drbání levou rukou za pravým
uchem :(
Editoval romansklenar (14. 7. 2009 1:27)
- David Grudl
- Nette Core | 8218
Z hlediska návrhu by měly být final, ale aby to fungovalo, tak final dočasně odstraním.
- PetrP
- Člen | 587
timbulko napsal(a):
Zdravím,
ako by sa dal spraviť v datagride stĺpec s odkazom, kde by bolo nejako uvedené aj ID daného riadka? Je to vôbec možné?$grid['name']->formatCallback[] = function($value) { return \Nette\Web\Html::el("a", $value)->href( ??? ); };
Vďaka.
Na to samé jsem se ptal v prvním příspěvku, byli mi odpovězeno že si mám přepsat datagrid ;]
Jinak pokuď nepotřebuješ ten name tak to můžeš obejít cca takto:
$sql = 'SELECT id as name ...';
$grid['name']->formatCallback[] = function($value) {
return \Nette\Web\Html::el("a", 'odkaz, ale nemuzu ho pojmenovat podle radku ;/')->href(Environment::getApplication()->getPresenter()->link('this',array('id'=>$value)));
};
Editoval PetrP (14. 7. 2009 10:11)
- Jod
- Člen | 701
Ja som nato vo svojom gride používal udalosti typu onRowRender. Potom by to mohlo volať metódu ktorej by sa predali referencie na DataRow a GridRowPrototype, či niečo také a tak by sa to dalo v pohode meniť. V romanovom datagride som si to nevšimol zatiaľ, možno to bude na feature request :) .
- romansklenar
- Člen | 655
Tak jste mě ukecali – máte to tam ;)
PetrP & timbulko:
Nyní se do callbacku posílá i celý DibiRow, takže z něj můžete
tahat potřebná data. Vyžádalo si to ale zpětnou nekompatibilitu
u callbacků, které mají 2 a více parametrů, jako byl třeba v demu
použitý TemplateHelpers::bytes($bytes, $precision = 2)
.
$grid['name']->formatCallback[] = function($value, DibiRow $data) { ... };
Jod & jarks:
Do vykreslovače jsem přidal události onRowRender
a
onCellRender
, které slouží jako možnost úpravy Html objektů
buňek a řádků tabulky. Ukázka
je zase v demo aplikaci.
PetrP napsal(a):
… taky bych potřeboval někdy úplně zrušit možnost změnit řazení …
Nyní má DataGrid možnost řazení globálně vypnout:
$grid->disableOrder = TRUE;
Editoval romansklenar (14. 7. 2009 19:32)
- timbulko
- Člen | 85
Nyní se do callbacku posílá i celý DibiRow, takže z něj můžete tahat potřebná data. Vyžádalo si to ale zpětnou nekompatibilitu u callbacků, které mají 2 a více parametrů, jako byl třeba v demu použitý
TemplateHelpers::bytes($bytes, $precision = 2)
.
podobným spôsobom som si už včera datagrid upravil (verzia pre php 5.3), ale aj tak díky :-)
- jarks
- Člen | 94
romansklenar napsal(a):
Do vykreslovače jsem přidal událostionRowRender
aonCellRender
…
Díky moc, funguje to perfektně!
V příkladu je jen obarvování buněk, tak obarvování celých řádků asi nějak takhle:
V definici komponenty:
$renderer->onRowRender[] = array($this, 'customersGridOnRowRendered');
k tomu příslušná metoda:
public function customersGridOnRowRendered(Html $row, $value) {
if ($value->typ == 'faktura') $row->addClass('faktura'); // v css např.:.faktura {background-color: #fffacd !important;}
elseif ($value->typ == 'dodacilist') $row->addClass('dodacilist');
return $row;
}
- jasir
- Člen | 746
romansklenar napsal(a):
Proto se nejdříve zeptám – musí být ty metody implementující rozhraní
ArrayAccess
vControlu
final?
Nedokážu si moc totiž představit jak bych mělDataGrid
přepsat, abych zachoval přístup ke sloupcům podobně jako ve formulářích$grid['sloupec']
. Nedědit zControlu
a jít v nejnižším společném jmenovateli naPresenterComponent
a pak tam toho půltuctu metod znovu dopisovat je jako drbání levou rukou za pravým uchem :(
David Grudl napsal(a):
Z hlediska návrhu by měly být final, ale aby to fungovalo, tak final dočasně odstraním.
Romane, přemýšlel jsem o tomto problému a o jeho řešení. Koukal jsem
do tvých zdrojáků (ne nijak urputně, takže je možné, že píšu blbosti),
a zdá se mi, že problém leží v tom, že ty do stromu component
přidáváš 3 nové ComponentContainery –
columns
,actions
,filters
. Pak máš
ArrayAccess, kde manipuluješ pouze s ‚columns‘. Nestačilo by tedy:
– použít Datagrid->components
(myslím tím úložiště
komponent datagridu) jen pro sloupce (a pak by se prostě použila výchozí
implementace ArrayAccess
z Control
) – přístup na
sloupce datagridu by tedy zůstal stejný jako nyní, analogický
k FormContainer
– pro actions
a filters
použít vlastní stromy
komponent (nepřidávat je tedy do stromu komponent Datagridu)
Tedy v konstrukturu nějak tak:
<?php
$this->addComponent(new ComponentContainer, 'columns');
$this->filtersContainer = new ComponentContainer, 'filters');
$this->actionsContainer = new ComponentContainer, 'actions');
?>
Pak by „teoreticky“ stačilo přepsat místa, kde se přistupuje k
filters
a actions
(změna z
$this->getComponent('filter')
na
$this->filtersContainer
) a také místa kde se používá
$this['filters']
na $this->getFilters()
.Analogicky
pro actions
.
A možná by to při tom chtělo vyřešit mírnou nekonzistenci v tom, že
DataGrid::$filters
je public persistent string, ale getFilters()
vrací strom komponent. (Přejmenovat proměnnou?)
Editoval jasir (17. 7. 2009 1:59)
- romansklenar
- Člen | 655
Taky jsem nad tím přemýšlel a z hlediska čistoty návrhu to udělám
v duchu tohoto
příspěvku jak už jsem kdysi uvažoval. ActionColumn
si tedy
bude držet u sebe svou akci, ostatní sloupce zase u sebe své filtry.
Čeho se ale bojím je to, že se to projeví na rychlosti, protože tak
nepůjde využívat vlastností ComponentContaineru
(InstanceFilterIterator
), ale bude se muset procházet cyklem.
Konkrétně implementace DataGrid::getFilters()
by se
z tohoto:
return $this->getComponent('filters', TRUE)->getComponents(FALSE, 'IDataGridColumnFilter');
musela změnit na toto:
$filters = new ArrayObject();
foreach ($this->getColumns() as $column) {
if ($column->hasFilter()) {
$filters->append($column->getFilter());
}
}
return $filters->getIterator();
a implementace DataGrid::getActions()
by se z tohoto:
return $this->getComponent('actions', TRUE)->getComponents(FALSE, 'IDataGridAction');
musela změnit na toto:
$actions = new ArrayObject();
foreach ($this->getColumns() as $column) {
if ($column instanceof ActionColumn) {
$actions->append($column->getAction());
}
}
return $actions->getIterator();
- jasir
- Člen | 746
romansklenar napsal(a):
Čeho se ale bojím je to, že se to projeví na rychlosti, protože tak nepůjde využívat vlastností
ComponentContaineru
(InstanceFilterIterator
), ale bude se muset procházet cyklem.Konkrétně implementace
DataGrid::getFilters()
by se z tohoto:return $this->getComponent('filters', TRUE)->getComponents(FALSE, 'IDataGridColumnFilter');
musela změnit na toto:
$filters = new ArrayObject(); foreach ($this->getColumns() as $column) { if ($column->hasFilter()) { $filters->append($column->getFilter()); } } return $filters->getIterator();
Co ti brání v tom, aby $filters byl sám o sobě
ComponentContainer
a ne ArrayObject
?
Pak využiješ jeho vlastností a rychlosti, ne?
- romansklenar
- Člen | 655
Musel bych $filters
stejně naplnit a
ComponentContainer::addComponent()
bude mít určitě větší
režii než přidávání prvku do pole / ArrayObject
u.
- romansklenar
- Člen | 655
Tak je to přepsáno. Metody umožňující ArrayAccess
v
Controlu
mohou být zase final
. Akorát pozoruju,
že je datagrid najednou o dost pomalejší…
Editoval romansklenar (18. 7. 2009 0:08)
- romansklenar
- Člen | 655
- Honza Kuchař
- Člen | 1662
Ahoj,
myslím, že by se měla vyhodit výjimka – místo toho se dočkám pár
noticů z DataGridRenderer.php.
$grid->addColumn('Nazev', 'Název')->addFilter();
Ale sloupeček „Nazev“ v databázi neexistuje. Nebo to má nějaký důvod proč se výjimka nevyhazuje?
P.S.: DataGrid je opravdu perfektní a moc na za něj děkuji. ;)
Editoval honzakuchar (19. 7. 2009 19:22)
- jarks
- Člen | 94
Dobrý den,
pravděpodobně jsem zaznamenal chybu: Datagrid si mezi stránkami nepamatuje
stav filtru, ani počet stránek nastavený roletkou.
Původně jsem myslel, že je to tím, že jsem musel použít novější
Nette, ale dělá to i demo stažené ze SVN r36.
Postup: zadám do filtru text, použiju filtr (enter nebo ikona), aktuální
stránka se správně zobrazí, ale po kliknutí na šipečku Next, je další
stránka opět nefiltrovaná. Totéž s počtem stránek.
Zkoušeno na Mandriva Linuxu, Firefox 3.0.11 a 3.5.1.
- romansklenar
- Člen | 655
honzakuchar napsal(a):
Ahoj,
myslím, že by se měla vyhodit výjimka – místo toho se dočkám pár noticů z DataGridRenderer.php.$grid->addColumn('Nazev', 'Název')->addFilter();
Ale sloupeček „Nazev“ v databázi neexistuje. Nebo to má nějaký důvod proč se výjimka nevyhazuje?
Nemá to žádný důvod. Při vykreslování je na výjimku podle mě pozdě, takže by to chtělo nějak ošéfovat už při vytváření sloupců… jenže mě nenapadá žádný čistý způsob jak oveřit, je-li v datasourcu daný sloupec. Ale pořád lepší než noticka, takže to tam přidám.
jarks napsal(a):
Dobrý den,
pravděpodobně jsem zaznamenal chybu: Datagrid si mezi stránkami nepamatuje stav filtru, ani počet stránek nastavený roletkou.Původně jsem myslel, že je to tím, že jsem musel použít novější Nette, ale dělá to i demo stažené ze SVN r36.
Postup: zadám do filtru text, použiju filtr (enter nebo ikona), aktuální stránka se správně zobrazí, ale po kliknutí na šipečku Next, je další stránka opět nefiltrovaná. Totéž s počtem stránek.Zkoušeno na Mandriva Linuxu, Firefox 3.0.11 a 3.5.1.
Nic takového u sebe nepozoruju. Zde je aktuální revize na serveru. Zdá se mi tam vše v pořádku se zaplým i vyplým JS.
- jarks
- Člen | 94
romansklenar napsal(a):
Nic takového u sebe nepozoruju…
Na Vašem odkazu to skutečně funguje v pořádku, u mě ale ne.
Teď mě napadlo podívat se na domácím serveru na Requirements Checker a zjistil jsem, že hlásí jeden jediný warning a to je Reflection phpDoc. Jde o persistentní parametry. Mohlo by to být ono? Rád bych to napravil, ale nemůžu zjistit jak. Je to modul, nebo nastavení v konfiguraci?
- romansklenar
- Člen | 655
Řešení je zde.
Do DataGridu se přidá tato metoda:
public static function getPersistentParams()
{
return array('page', 'order', 'filters', 'itemsPerPage');
}
A jelikož jsou v DataGridu parametry jasně dané, nemám problém s tím to tam přidat. Revize 38 to tedy bude mít.
Editoval romansklenar (19. 7. 2009 13:04)
- jarks
- Člen | 94
Díky, pořád jsem hledal, jak to zapnout a nakonec jsem zjistil, že kromě řešení, které uvádíte, také stačí vypnout eAccelator a už to jede.
Narazil jsem ještě na další problém: Během stránkování se mi ztrácí parametr předaný modelu. Vypadá to takto:
Datagrid má zobrazovat buď položky právě přihlášeného uživatele (to
je výchozí, jeho ID je v $this->prihlaseny
), nebo všechny
položky, pokud se klikne na odkaz.
V šabloně se volá takto:
<a href="{plink Pokusny:default}">[ položky uživatele ]</a>
<a href="{plink Pokusny:default,'0'}">[ všechny položky]</a>
Presenter s vytvářením Datagridu:
class PokusnyPresenter extends BasePresenter {
protected $user = 0; //<< pomocná proměnná
// tato metoda se volá ze šablony bez parametru, nebo s parametrem 0:
public function renderDefault($user) {
if(!isset($user)) $this->user = $this->prihlaseny; //<< číslo přihlášeného uživatele
$this->template->dokonceneGrid = $this->getComponent('pokusnyGrid');
}
// továrnička, kde se zavolá model (`getPolozky`)s parametrem:
protected function createComponent($name) {
switch ($name) {
case 'pokusnyGrid':
//...kód...
$grid->bindDataTable($model->getPolozky($this->user)); // volá se metoda modelu s parametrem
//...kód...
$this->addComponent($grid, $name);
return;
}
}
}
Příslušná metoda v modelu:
public function getPolozky($user=0) {
$dotaz = 'SELECT * FROM polozky';
// jestli je v parametru ID, doplníme ho k dotazu jako podmínku:
if($user!=0) $dotaz.= ' AND id ='.$user;
return $this->connection->dataSource($dotaz);
}
Na první stránce výpisu se správně zobrazí jen položky uživatele, to znamená parametr se použije. Na další, ale grid „zapomene“ a zobrazí všechny položky. Dělám prosím nějakou chybu?
- romansklenar
- Člen | 655
Tipoval bych, že ten pomocný parametr se nemá kudy přenášet, přenášel bych ho teda v URL:
/** @persistent int */
public $user = 0;
Editoval romansklenar (19. 7. 2009 14:44)
- ales.kafka
- Člen | 34
Co když chci přidat sloupec, kterému budu pomocí callbacku předávat jen takovou obrázek šipky (pro usnadnění řazení), který bude stejný bez závislosti na jakoukoliv hodnotu z dataSource? Dá se to bez vnitřního zásahu nějak elegantně vyřešit?
- romansklenar
- Člen | 655
V dotazu datasourcu udělat alias k nějakému atributu, třeba
primárnímu klíči (id AS order
) a na něm vytvořit sloupec
poděděný od třídy DataGridColumn
u (nebo i od jiných) a
napsat si svou implementaci. Jako příklad může posloužit PositionColumn.
- norbe
- Backer | 405
Chci se zeptat, jestli by datagrid nešel rozšířit o nějaké
tlačítko, které by uživatelem upravené filtrování odstranilo (př.
nastavilo na defaultní hodnoty)? Prostě něco jako
Datagrid již podobnou funkci má :)$grid->addResetFilterButton();
. Myslím, že hlavně ve
spojením s $grid->rememberState = TRUE;
by se tato vlastnost
mohla uživatelům hodit.
A ještě bych dotaz týkající se screenu z první stránky. To co je tam vidět již je součástí datagridu, nebo ne? Př. jakým způsobem můžu umístit na datagrid tlačítko pro přidání nové položky(to které je vidět na screenu v pozadí) a jak nastavit editační formulář?
Editoval norbe (20. 7. 2009 23:12)
- romansklenar
- Člen | 655
Jo to tlačítko by asi přišlo vhod no… Zatím je tam prvek, který vyresetuje komplet celý stav komponenty, tzn. že včetně stránkování a řazení. Není problém tam přidělat i takové tlačítko, spíš je problém, že nevím kde už ty další a další inputy a buttony nacpat :)
To součástí datagridu jako třídy nebude. Bude to jen součástí demo aplikace.
Tlačítko se dá dostat do footeru nějak takto:
$title = "Přidat osobu";
$span = Html::el('span')->class("ui-icon ui-icon-newwin");
$link = Html::el('a')->href($this->link('nova!'))
->title($title)->setHtml($span . $title)
->class("dialog-link ui-state-default ui-corner-all");
$renderer = $grid->getRenderer();
$renderer->footerFormat = $link . $renderer->footerFormat;
$grid->setRenderer($renderer);
Editoval romansklenar (20. 7. 2009 23:11)
- kutilm
- Člen | 21
Ahoj,
můžete mi poradit. Mám komponentu (MyControl
) a v ní teprve
komponentu DataGrid. (Oboje komponenty dělám pomocí „nové“
továrničky). Jak mám přidat sloupec s posunem a k tomu metodu
(signál)?
Zkusil jsem: (EDIT: Doplnil jsem deklaraci objektu)
<?php
class MyControl extends Control
{
// ...
protected function createComponentSubAddress()
{
$grid = new DataGrid();
//...
$pos = array('up' => 'Nahoru', 'down' => 'Dolu');
$grid->addPositionColumn('order', 'Position', 'positionMove!', $pos);
//...
return $grid;
}
public function handlePositionMove($key, $dir)
{
// ...
}
// ...
}
?>
ale na stránce se mi generuje jen odkaz:
error: Unknown signal 'PagePresenter:positionMove!'.
Používám verzi ze SVN.
Jo ještě jsem narazil na tohle, pokud volám:
<?php
$grid->addPositionColumn('order', 'Position', NULL, $pos)
?>
tak v souboru PositionColumn
to na řádku 58 vyhazuje chybu,
asi tam chybí závorky za getName
.
Dík Michal
Editoval kutilm (26. 7. 2009 4:21)
- romansklenar
- Člen | 655
Je třeba mít metodu pro obsluhu signálu v podkomponentě.
Jojo chybička se vloudila a závorky někam utekly :) zatím uváděj signál explicitně
- romansklenar
- Člen | 655
Ne to určitě ne, tam žádné uživatelské handlery nepatří.
Díval jsem se na to a našel jsem chybku v třídě toho sloupce. V poslední revizi je to opraveno.
- kutilm
- Člen | 21
Ne to určitě ne, tam žádné uživatelské handlery nepatří.
Já si to myslel ;-)
Jinak teď to funguje, pěkně. Dík.
Ještě jedna FeatureRequest, mohlo by být hezké si positionColumn udělat z libovolného sloupce, např. nějak takto:
<?php
$grid->addColumn('name', 'Uživatel')->addPosition('positionkey', 'positionMove!', ...);
// hodnota z positionkey by se pak předala do handlePositionMove().
?>
Dík Michal
- Jakub Šulák
- Člen | 222
Jen bych se rád zeptal, nepočítáš náhodou do budoucna, že by jsi přidal do datagridu funkci uživatelské změny řazení drag&drop? Tím myslím například použití na e-shopu, kde jsou produkty na úvodní straně a já si chci seřadit, který bude první atd. Nyní možné řešit šipkama nahoru/dolů. Ale ideální by byla možnost drag&drop.
- romansklenar
- Člen | 655
Už mě to napadlo, ale podporu pro jQuey UI Sortable si nechávám si to asi někdy do budoucna na neurčito stejně jako napovídání při vyhledávání a schovávání sloupců.
Bojím se ale, že to bude pomalé (invalidace komponenty po každém přesunu?), takže se bude muset zvážit, jestli tam invalidaci při přesouvání dávat (jsem spíše toho názoru, že ne). Pak je třeba při chybě třeba nějak zareagovat (což není problém a mám už to vymyšlené).
Ale nejvíce se bojím, že to zvedne vlnu dotazů, kdy to lidi nebudou umět rozchodit. Už i za momentálního stavu kdy je datagrid docela jednoduchý na zprovoznění a obsahuje i funkční demo aplikaci, se fórum i můj mailbox plní dotazy s implementací (tohle vlákno je OK – řeší se tu bugy a featury, zběžní uživatelé ví, že existují diskuse ke stránkám v nette wiki, ti méně zběhlí ale zakládají nová vlákna, kde se řeší problémy typu nejede mi to ajaxově apod).
Editoval romansklenar (28. 7. 2009 19:10)
- timbulko
- Člen | 85
Je nejaká možnosť ako nastaviť, aby sa napríklad odkaz v thead, podľa ktorého sa momentálne usporiadávajú riadky nejako zvýraznil (napr. aby sa tam pridal nejaky class – asc/desc)? Alebo aby sa tam zobrazovala iba jedna šípka? Myslím, Že v staršej verzii DataGridu to takto funguje, ale v tejto neovej neviem prísť na to ako to tam nastaviť. Diky.
- romansklenar
- Člen | 655
Šipce (asc/desc) sloupce, podle které se řadí je přiřazena třída active, která ji zvýrazní. Doporučuju průběžně aktualizovat nejen php soubory, ale i css a js.
- na1k
- Člen | 288
Rychlý dotaz – je možné nějak skrýt selectbox pro počet zobrazovaných řádků (v patičce) ?
Nikde jsem žádné „vypínátko“ nenašel. V demu to sice není, ale mám podezření, že se tahle funkce objevila až v pozdější revizi a demo není aktualizované.
A ještě jsem nestihl poděkovat, takže neskonalé díky za tuhle komponentu. Je to rozhodně letošní komponenta roku :))
- romansklenar
- Člen | 655
$renderer = $grid->getRenderer();
$renderer->infoFormat = 'Záznamy %from% - %to% z %count% | %reset%'; // zde upravovat dle libosti
- timbulko
- Člen | 85
romansklenar napsal(a):
Šipce (asc/desc) sloupce, podle které se řadí je přiřazena třída active, která ji zvýrazní. Doporučuju průběžně aktualizovat nejen php soubory, ale i css a js.
Áno, viem, že sa do šípky podľa ktorej sa zoraďuje pridáva trieda active a takisto mám aj stiahnuté najnovšie súbory zo SVN, ale ja navrhujem, aby sa pridala aj nejaká trieda asc/desc do bunky tabuľky (do th) – takto podobne to fungovalo v starších verziách.
Potreboval by som totiž napríklad zmeniť farbu pozadia v celej bunke, podľa ktorej sa usporiadava. Teraz je to možné jedine pomocou javascriptu, na ktorom sa snažím byť nezávislý, alebo manuálnou úpravou DataGridu.
Díky.
- marek.dusek
- Člen | 99
Ahoj,
jen dve drobnosti:
- slo by zaridit, aby checkbox column podporoval callback pro format?
- sla by zaridit lepsi podpora pro filtrovaci konstrukce, napr. pro vyber (NOT) NULL hodnot – napr. v klasicke text column by pribylo neco jako
public function applyFilter($value)
{
...
} else if ($value = 'NULL') {
$cond[] = array("[$column] IS NULL");
} else {
....
}
(potreboval jsem zaridit, abych mohl nad datetime sloupcem vybrat ‚vse‘, ‚je tam nejake datum‘, ‚je tam NULL‘ – pokud jsem pouzil date column, jde filtrovat jen dle shody; pokud text column, neslo zadat tu IS NULL podminku; pokud checkbox, IS NULL jde, ale zase neslo namisto checkboxu zobrazit hodnotu :-)