holubj / niftygrid Goto Github PK
View Code? Open in Web Editor NEWDataGrid for Nette Framework
DataGrid for Nette Framework
NiftyGrid doesn't support passing multiple colums (col1 ASC, col2 DESC) into defaultOrder method.
//píšu si to pro sebe, abych na to nezapomněl - komentovat můžete
Když je paginator zapnutej, tak v adrese je vždycky parametr s defaultním počtem záznamů na stranu. Tim pádem komponenta(grid) má parametr a je důvod jí automaticky invalidovat. Bez paginatoru tam žádný parametr neni, tak se komponenta automaticky neinvaliduje. Kód a redirect z vlastního callbacku buttonu proběhne, protože volání signálu je parametr. Ale po redirectu už tam parametr není, takže se komponenta neinvaliduje a v AJAXu se nevrátí překreslenej grid.
Jedno řešení je invalidovat to vždy z presenteru - což je pro každej grid kód navíc a je to zbytečnost.
Pak by ještě šlo tam dát nějakej dumb persistentní parametr, aby se to automaticky invalidovalo a překreslilo.
Nic jinýho mě zatim nenapadá.
Zdravím. Narazil jsem na problém při vytváření komponenty resp. jejím připojování k presenteru.
Ke konfiguraci komponenty se používá metoda attached, která volá metodu configure, jež je překrytá v poděděné komponentě. Problém však je, když si do odděděné komponenty předávám instanci databáze.
Musím volat konstruktor takto:
use NiftyGrid\NDataSource;
use NiftyGrid\Grid;
class GridControl extends Grid {
/** @var Nette\Database\Table\Selection */
private $table;
public function __construct(Nette\ComponentModel\IContainer $parent = NULL, $name = NULL, Nette\Database\Table\Selection $table)
{
$this->table = $table;
parent::__construct($parent, $name);
}
protected function configure($presenter)
{
$dataSource = new NDataSource($this->table);
.....
}
}
Instanci databáze musím přiřadit před voláním rodičovského konstruktoru, protože jinak dojde po zavolání parent::__construct($parent, $name); k zavolání attached a následném volání configure a zde ještě databáze není nastavena (nevrátil jsem se ještě z konstruktoru).
Této varianty konstruktoru využít musím, protože jinak je v metodě render vyhozena
Nette\InvalidArgumentException
Component with name 'columns' does not exist.
protože se ještě nezavolal attached.
Továrnička:
protected function createComponentGrid($name)
{
$table = $this->database->table('wm_licenses');
$control = new GridControl($this, $name, $table);
return $control;
}
// Pokud je zadán pouze count berou se všechny sloupce, zkoušel jsem nette na 2.1-dev
public function getSelectedRowsCount()
{
return $this->data->count("*");
}
Cau, napadlo me prevest hodnotu v setDateFilter() nejdrive na PHP DateTime objekt a teprve pak ho poslat ve formatu Y-m-d do SQL dotazu... aby clovek mohl vyhledavat datum v libovolnem formatu. Co si o tom myslis?
Ahoj,
Chcel by som sa opytat, je mozne aby som si pisal vlastne joiny do NiftyGrid-u ?
lebo struktura DB nevyhovuje poziadavkam NiftyGrid-u na joiny tabuliek. Dakujem
Nefunguje mi inline editace, předpokládám že nastala chyba při přechodu na novější nette.
I prefere 3 state oredering (ASC,DESC,NO).
Sometimes could be usefull to have posibility of removing order.
When I submit row add, it works, but doesnt appear - I must refresh page.
First HTTP request and reponse:
POST /crm/www/zakaznik/detail?id_zakaznik=106&do=skupinaZakaznikGrid-gridForm-submit
{"redirect":"http:\/\/localhost\/crm\/www\/zakaznik\/detail?id_zakaznik=106&_fid=ftz1"}
Second HTTP request and reponse:
GET http://localhost/crm/www/zakaznik/detail?id_zakaznik=106&_fid=ftz1
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
...
Server evidently sends HTML instead of JSON.
I resolve it by commenting out redirect() in Grid::rowFormSubmitted():
public function rowFormSubmitted($values, $gridName)
{
...
//$this->redirect("this"); // JK: cause problems with ajax editation
}
Better idea?
V případě, že přidám sloupec a nastavím mu filter:
$this->addColumn('version', 'Version')
->setTableName("...")
->setSelectFilter(...);
a poté nastavím hodnoty:
$this->setPerPageValues(array(5, 10, 20, 50, 100));
tak se hodnoty položek na stránku neaplikují a zůstanou výchozí hodnoty proměnné. Řešením je nastavit hodnoty před přidáním sloupce, ale to někoho nemusí napadnout resp. to je podle mě chyba, která by s tím filtrem asi neměla být spojena.
Když použiji groupBy, tak je špatně zobrazen počet položek v záhlaví (grid-results). Může to někdo potvrdit?
I founded bug in Grid::render, in this part:
if($input instanceof \Nette\Forms\Controls\SelectBox){
$items = $this['gridForm'][$this->name]['rowForm'][$name]->getItems();
// $items is array( "high"=21, "low"=15, "none"=0 )
// $row[$name] is "low"
if(in_array($row[$name], $items)){ // returns true
// replace "low" with "none"
$row[$name] = array_search($row[$name], $items);
}
// $row[$name] is now "none"
}
https://github.com/Niftyx/NiftyGrid/blob/master/libs/NiftyGrid/Grid.php#L936
I suggest replace in_array() with !array_key_exists():
if(!array_key_exists($row[$name], $items)){
It should resolve it to the satisfaction of all.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.