DataGrid neustále nefiltruje
- king12345
- Člen | 6
Nedaří se mi v DataGridu rozběhat filtrování na základě inputů nad
sloupci.
Po odeslání pomocí tlačítka Apply Changes se odešle formulář s URL
/?grid-page=2&grid-order=objednano%3Da&do=grid-form-submit
ale od nette se mi vrátí HTTP kód 303 a web se začne načítat z adresy
/?grid-page=2&grid-order=objednano%3Da.
Po tomto přesměrovacím kolečku se vrátím na původní stranu kde jsou
nevyplněné inputy a nevyfiltrované sloupce.
protected function createComponentGrid($name)
{
$grid = new DataGrid;
$grid->bindDataTable($this->ordersModel->findAll());
$grid->displayedItems = array(10, 20, 50);
$grid->multiOrder = FALSE;
$grid->addColumn('objednano', 'Pokus')->addFilter();
$grid->addActionColumn('Actions');
$this->addComponent($grid, $name);
}
Díky za nápady
- toka
- Člen | 253
Fakt ti to nefunguje, resp. toto jsem teď zkoušel, a je to OK?
protected function createComponentGrid($name) {
$grid = new DataGrid;
$renderer = new DataGridRenderer;
$grid->setRenderer($renderer);
$grid->bindDataTable($this->ordersModel->findAll());
$grid->displayedItems = array(10, 20, 50);
$grid->multiOrder = FALSE;
$grid->rememberState = TRUE;
$grid->timeout = '+ 7 days';
$grid->multiOrder = FALSE;
$grid->addColumn('objednano', 'Pokus')->addFilter();
$grid->addActionColumn('Actions');
return $grid;
}
A v šabloně potom:
{widget grid}
- king12345
- Člen | 6
S tím to taky nejde, teď jsem stáhl přesný verze nette a dibi co datagrid vyžaduje, tedy Nette 0.9.0 a dibi 1.1.
V modelu snad bejt chyba nemuže…
public function findAll()
{
$and = array(
"objednavky.vlastnik = vlastnik.id",
"objednavky.user = clients.id",
"objednavky.status = status_objednavky.id",
"objednavky.procedura = ceny.id",
"objednavky.stroj = stroje.id"
);
$return =dibi::dataSource('SELECT vlastnik.vlastnik,clients.jmeno,clients.prijmeni,clients.telefon,status_objednavky.status,DATE_FORMAT(objednavky.termin, \'%e.%c.%Y %H:%i\') AS termin,ceny.popis,stroje.stroj FROM objednavky,vlastnik,clients,status_objednavky,ceny,stroje WHERE %and',$and);
return $return;
}
- king12345
- Člen | 6
Bohužel nic. Ještě doplním že z datagridu nefungují žádné
formuláře, tedy ani formuláře pod tabulkou pro nastavení počtu
zobrazovaných položek nebo přeskočení na určitou stránkou.
Nemůže být chyba v routování ?
Funguje tedy pouze stránkování a řazení sloupců.
Nemůže být chyba v routování ?
// editovani polozky z datagridu
$router[] = new Route('objednavky/edit/<id>', array(
'presenter' => 'Orders',
'action' => 'edit',
'id' => 'id'
));
// adresa k datagridu
$router[] = new Route('objednavky', array(
'presenter' => 'Orders',
'action' => 'default',
));
- blacksun
- Člen | 177
To, že funguje stránkování a řazení a nefunguje filtrování je tím, že pro filtrování se odesílá formulář, zatímco přecházení mezi stránkami a řazení je klasický GET požadavek.
Já teď řeším také nefunkční filtrování, mám poslední verzi nette, dibi i datagridu. Používám DibiMssqlDataSource nad DibiDataSource, v čemž by problém být neměl, sql se generují správně, zdá se mi.
Končím na chybě v SelectBoxFiltru na řádku 76
<?php
$this->element->setItems($this->generatedItems);
?>
, kde $this->element je prázdné.. Ani když podmínkou zajistím, aby se to buď přeskočilo nebo se $this->element naplnilo fcí getFormControl(), tak to ve výsledku nefiltruje, takže problém bude ještě někde jinde..
Už pomalu ale nevim, kam kouknout..
Doplním, že datagrid definuju v BasePresenteru v továrničce createComponentDatagrid(), vracím přes return bez datasource, pak ho v poděděném presenteru vytvářím v render metodě pomocí
<?php
$grid = $this->getComponent('datagrid');
?>
Dodám mu datasource a předám do šablony, ve které ho vykresluji pomocí
@{? $grid->render() }
Stránkování i řazení funguje v pohodě ajaxově, na post požadavky
formuláře dostávám 500ku :-(
Editoval blacksun (12. 7. 2010 16:14)
- blacksun
- Člen | 177
V konzoli firebugu ve firefoxu se objevuje tohle:
PHP Notice: Undefined index: filters in
/var/www/html_testis/sloupy/app/components/DataGrid/DataGrid.php:570
PHP Warning: Invalid argument supplied for foreach() in
/var/www/html_testis/sloupy/app/components/DataGrid/DataGrid.php:510
Call to a member function setItems() on a non-object
Zkusil jsem také odpojit a připojit komponentu k presenteru pomocí
<?php
$this->presenter->removeComponent($grid);
$this->presenter->addComponent($grid, 'datagrid');
?>
jelikož jsem narazil na hlášku, že komponenta '' není připojena k INamingContainer..
Ale stále bez úspěchu..