NiftyGrid – Datagrid pro Nette 2 s velkou škálou funkcí
- MW
- Člen | 626
Zdravím,
díky za grid, skvělá práce !
Už si s tím nějaou dobu hraju a ted jsem trochu narazil:
Jel jsem dle návodu:
public function __construct($cars)
{
parent::__construct();
$this->cars = $cars;
}
protected function configure($presenter)
{
//Vytvoříme si zdroj dat pro Grid
//Při výběru dat vždy vybereme id
$source = new \NiftyGrid\NDataSource($this->cars->select('cars.*, branches.name AS branch_name'));
//Předáme zdroj
$this->setDataSource($source);
$this->addColumn('spz', 'SPZ', '100px');
$this->addColumn('name', 'Název', '100px');
$this->addButton("edit", "Editovat")
->setClass("edit")
->setLink(function($row) use ($presenter){return $presenter->link("cars:edit", $row['id']);})
->setAjax(FALSE);
$self = $this;
$this->addButton("delete", "Smazat")
->setClass("delete")
->setLink(function($row) use ($self){return $self->link("delete!", $row['id']);})
->setConfirmationDialog(function($row){return "Určitě chcete odstranit auto $row[spz]?";});
}
function handleDelete($id) {
$this->cars->find('id', $id)->delete();
$this->flashMessage('Vozidlo bylo smazáno');
}
Ovsem v handlu delete me to vygeneruje dotaz :
DELETE FROM 'cars' WHERE (id = 5) LIMIT 20 OFFSET 0
Právě ten OFFSET 0 MySQLku vadi…
Možná špatně jen dědím z konstruktoru? Jak na to prosím?
Díky !
- MW
- Člen | 626
Tak jsem to poresil takto:
Nevim, jestli je to dobre reseni, prosim o nazor:
Upravil jsem konstruktor, kam si posilam jen spojeni, a ne primo tabulku:
public function __construct($database)
{
parent::__construct();
$this->database = $database;
$this->cars = $database->table('cars');
}
a pak v handlu:
function handleDelete($id) {
$this->database->table('cars')->find($id)->delete();
$this->flashMessage('Vozidlo bylo smazáno');
}
- Andrasin
- Člen | 29
Nifty napsal(a):
Andrasin
S tou textareou je to dobrý nápad. Asi bych to přidal jako nepovinný parametr pro setTextEditable.Ohledně té řádkové editace – na subgridy jsem uplně zapomněl :)
Bude s tim asi trochu problém, ale mělo by to jít vyřešit. Příští víkend bych se na to podíval.
jojo, implementoval jsem si to stejným způsobem, byla to otázka dvou řádků.
Ještě ohledně těch formulářů, pokud edituji nebo vkládám nový záznam a hodnoty neprojdou validací, ve formulářích nezůstanou hodnoty, které jsem zadal a editace se úplně zruší. Člověk pak musí vše dělat odznova.
Editoval Andrasin (26. 9. 2012 1:26)
- thunderbuff
- Člen | 164
Lze do do niftygridu přidat „umělý“ sloupec? Mám tabulku se seznamy kontaktů a druhou tabulku s kontakty. Do gridu seznamů chci přidat slupec s počtem kontaktů v daném seznamu. (tzn do každého řádku tabulky potřebuji přidat výsledek dotazu „select count(*) from kontakty where seznam_id = XXX“) Lze to udělat nějak elegantě?
// Edit pardon, ptám se na blbosti, stačí dobře napsat datasource :-)
Editoval thunderbuff (30. 9. 2012 15:51)
- .:M@rt!n:.
- Člen | 201
Ahoj,
jde v niftygridu ve filtračním poli vybírat údaje například za určitý
měsíc?
Zkoušel jsem do filtru u datumu použít *.09.2012, ale to nic nevypíše.
- revoke
- Člen | 36
Tak třeba takhle :-)
$(".grid-gridForm input[type=submit]:not(.grid-gridForm-clickedSubmit)").closest('form').each(function() {
var iniciator_id = $(button).closest('form').attr('id');
if (iniciator_id != $(this).attr('id')) {
$(".grid-filter-form input[type=submit]", $(this)).click());
}
});
- thunderbuff
- Člen | 164
Poradíte mi prosím s mým problémem? Mám následující datasource:
<?php
$dataSource = new NDataSource($connection->table('contacts')->select('contacts.id, contacts.firstname, contacts.surname, contactlists.name'));
?>
…pokud chci grid řadit podle různých sloupců, vše je OK. Pokud to vyhledávátka napíšu hedaný text, našeptávač správně napovídá. Ale jakmile zmáčknu enter, dojde k chybě:
<?php
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'name' in 'where clause'
?>
Zalogované chybné SQL:
<?php
SELECT COUNT(*) FROM `contacts` WHERE (`name` LIKE ?)
?>
V parametru je vyhledávaný text. Dělám něco špatně, nebo v countu NiftyGrid ignoruje join v Datasource a rve dotazy přímo na tabulku contacts?
Editoval thunderbuff (3. 10. 2012 0:44)
- thunderbuff
- Člen | 164
MW napsal(a):
Pokud JOINujes, zkus pouzit na column
->setTableName("contactlists.name")
Funguje, díky!
- .:M@rt!n:.
- Člen | 201
.:M@rt!n:. napsal(a):
Ahoj,
jde v niftygridu ve filtračním poli vybírat údaje například za určitý měsíc?
Zkoušel jsem do filtru u datumu použít *.09.2012, ale to nic nevypíše.
Žádná rada?
Měl bych další dotaz:
Jak udělat podmíněný selectbox závislý na jiné buňce? Zkoušel
jsem toto:
$this->addColumn('konecnyStav', 'Konečný stav', '120px', 100)
->setSelectEditable(function ($row){
if ($row['stavPopt'] !== 'Hotovo') {
return(array("Žádný" => "Žádný", "Objednáno" => "Objednáno"));
}
})
ale laděnka hodí chybu že setSelectEditable musí být pole.
díky
- David Ďurika
- Člen | 328
bolo by super keby si prijal tento pull na Bootstrap
https://github.com/…Grid/pull/15
nie v zlom ale bootstrap design vyzera lepsie ako ten tvoj
dalsia vyhoda ze potom tam nemusi ma ziadne css-ko a ani obrazky, lebo vsetko je
uz v bootstrape
dakujem
- repli2dev
- Člen | 57
Používám NiftyGrid ve více projektech a dost spokojen, díky za dobrou práci.
Nicméně narazil jsem na podivné chování když udělám přibližně takovouto hierarchii:
+ Presenter
+ ComponentA
+ MyGrid
Grid jako takový funguje. Co na něm nefunguje jsou veškeré dotazy (stránkování + filtry). Po každé aktualizaci se to vrátí na výchozí parametry. Když se snažím vypsat filtry gridu tak dostávám NULL. Přitom když ho vynořím a připojím přímo k Presenteru tak je to OK (což ale v mém návrhu nejde :-()
- Stopka
- Člen | 4
Zdravím, mohu se zeptat jak je na tom aktuálně grid s možnostmi lokalizace? Bylo by perfektní kdyby šlo podobně jako formulářům předat pouze translator a bylo by přeloženo. Je to plánováno? Nebo na čem to stojí? Nebo jsem tu možnost přehlédl? Četl jsem o několik příspěvků výše, že je v tomto směru nějaký pokrok, ale v oficiální verzi na gitu to zatím chybí (pokud se nemýlím)
- David Ďurika
- Člen | 328
@Stopka presne to sa riesi v tom commite o kt. pisem https://forum.nette.org/…kalou-funkci?p=3
- David Ďurika
- Člen | 328
Stopka napsal(a):
- Jen otázka bokem k bootstrapu: to si přepisujete i renderování formulářů aby to fungovalo s bootstrapem?
ja nie ale hosiplan ano :) https://componette.org/search/?…
- .:M@rt!n:.
- Člen | 201
Šlo by k nifty gridu doplnit vybírání pouze určitých sloupců na základě zaškrtnutého checkboxu?
- Tomáš Jablonický
- Člen | 115
Ahoj,
právě jsem upravil šablonu Gridu pro Bootstrap Twitter … bude o to zájem
třeba jako o rozšíření nad tímto gridem?
- iguana007
- Člen | 970
jablon napsal(a):
Ahoj,
právě jsem upravil šablonu Gridu pro Bootstrap Twitter … bude o to zájem třeba jako o rozšíření nad tímto gridem?
Já ti nevím, ale nedělal si to zbytečně? Mě se zdá, že to už bylo vyřešeno někým jiným. Viz.: https://github.com/…Grid/pull/15
Pokud tvé řešení spočívá v něčem jiném, tak moji zprávu prosím ignoruj.
- MW
- Člen | 626
Zdravim,
narazil jsem na problem a prosim o radu:
Pokud pridam validaci na inline editaci:
$this->addColumn('name', 'Název', '100px')
->setTextEditable()
->setTableName("cars.name")
->setTextFilter()
->setAutocomplete('10');
$this->getColumnInput('name')->addRule(\Nette\Application\UI\Form::FILLED, 'Nezadali jste název.');
a pak mam subgrid:
$this->addSubGrid("data", "Zobrazit náklady")
->setGrid(new CarsCostsGrid($presenter->context->database, $this->activeSubGridId))
->settings(function($grid){
$grid->setWidth("500px");
$grid['columns-name']->setWidth("200px");
})
->setCellStyle("background-color:#f6f6f6; padding:20px;");
ALE v tomto subgridu je stejny nazev sloupce „name“ jako je v hlavnim gridu a tedy me to neprojde pri editaci validací…
V subgridu nemam nastavenou zatim zadnou validaci. Ale presto, ze mam name vyplnene, tak to hlasi chybu ‚Nezadali jste název.‘ …
Pokud dam validaci z hlavniho gridu pryc, grid i subgrid jinak funguje dobre.. ale validaci tam potrebuju..
Jak na to prosim?
Diky !
- Andrasin
- Člen | 29
MW: Občas by možná neuškodilo projít si tohle téma ;) Už jsem o téhle chybě psal, musíš počkat na opravu… https://forum.nette.org/…kalou-funkci?p=2
K tvému přechozímu dotazu ohledně popisu subrgidů, pro popsání subgridů funkce není, musel bysis to doprogramovat.
- Nifty
- Člen | 45
- Opraveno řazení
- V TextEditable() lze nyní nastavit i textarea
$this->addColumn('column', 'Label')
->setTextEditable(TRUE, $rows, $cols);
Nepovinný první parametr značí, že se má použít textarea. Dají se také nastavit řádky a sloupce.
- Přidaná možnost pojmenovat grid
$this->setGridName('Články');
- Validace řádkové editace & přidávání řádku zatim pořád nefunguje v subGridu.
- Přidal jsem možnost nastavit Translator, autor Kurtas
protected function configure($presenter)
{
$this->setTranslator($this->translator);
}
- Zkoušel jsem zprovoznit tu upravenou šablonu pro bootstrap, ale měl jsem to celé rozházené. Funguje vám někomu správně? Kdyby to někdo dal dohromady, bylo by to fajn.
- Přidal jsem pár vylepšení od juzna, nejdůležitější
viditelné změny:
- podpora composeru
- pro DataSource se změnil namespace
$source = new NiftyGrid\DataSource\NDataSource($this->articles);
.:M@rt!n:.
- Vybírat údaje pouze za určítý měsíc nejde. Napadá mě asi jediné řešení (ne moc elegantní). Přidal bych si dvakrát stejný sloupec s datem, v jednom by se do filtru vepsal datum >= začátku měsíce, v druhym datum <= konci měsíce.
- Podmíněný selectbox v současné verzi taky nelze, ale mělo by to jít udělat. Až bude čas, tak se na to kouknu.
- Ty checkboxy by šly udělat, ale je to asi věc, která by se tak často nepoužívala. Spíš bych to viděl na vlastní úpravu. Nebo je dát mimo grid a předávat si parametry do gridu a podle toho by se sloupec přidal/nepřidal.
MW
- Validace by měla fungovat ajaxově. Kdyžtak zkus stáhnout poslední verzi na githubu.
- Andrasin
- Člen | 29
- Zkoušel jsem zprovoznit tu upravenou šablonu pro bootstrap, ale měl jsem to celé rozházené. Funguje vám někomu správně? Kdyby to někdo dal dohromady, bylo by to fajn.
Původně jsem taky zkoušel použít tu z pull requestu, ale měl jsem s ní problémy… nakonec jsem si tu šablonu přepsal sám, takže bych ji mohl poskytnout, ale je závislá na mých úpravách celé komponenty, takže až budu mít chvíli, mohl bych jí upravit pro původní verzi…
Editoval Andrasin (14. 10. 2012 2:41)
- Andrasin
- Člen | 29
Nejsem si moc jistý tím, jestli je dobrý nápad, aby tlačítka akcí + tlačítka subgridů měli třídy btn, původně jsem tam radši dal jen samotné ikonky. Vypadá to takhle sice hezky, ale na slabších strojích bude asi dost problém to vykreslit do prohlížeče, obzvlášť třeba při stovce záznamů. Zítra to zkusím trochu otestovat.
EDIT:
Do js bych ještě přidal funckci, která přidá do alert messages tlačítko pro jejich schování…
$('.alert').livequery(function(){
$(this).addClass('fade in');
$(this).prepend('<button type="button" class="close" data-dismiss="alert">×</button>');
});
Editoval Andrasin (15. 10. 2012 3:06)
- David Zadražil
- Člen | 62
@Andreasi nebo Nifty, mohli by jste zveřejnit tu bootstrap šablonu? Přepsal jsem si to, ale to vaše vypadá víc k světu :-) Díky!
- .:M@rt!n:.
- Člen | 201
Ahoj,
aplikuji niftygrid do své aplikace,kterou dělám podle nového quickstartu,
ale nevím jak změnit tento řádek u rychlé editace:
<?php
$presenter->context->database->table('pridavek')->where("id", $vals["id"])->update($vals);
?>
Laděnka hlásí chybu:
<?php
Service 'database' not found
?>
Díky
Editoval .:M@rt!n:. (18. 10. 2012 18:48)
- MW
- Člen | 626
Ja to řeším takto
presenter:
protected function createComponentCarsGrid() {
return new CarsGrid($this->context->database);
}
a grid:
public function __construct($database) {
parent::__construct();
$this->database = $database;
$this->cars = $database->table('cars');
}
Editoval MW (18. 10. 2012 20:07)
- .:M@rt!n:.
- Člen | 201
Stejná chyba odkazující na řádek z metody na vytvoření gridu:
<?php
protected function createComponentEncoreGrid() {
return new \EncoreGrid($this->context->database);
}
?>
- David Ďurika
- Člen | 328
iguana007 napsal(a):
David Zadražil napsal(a):
@Andreasi nebo Nifty, mohli by jste zveřejnit tu bootstrap šablonu? Přepsal jsem si to, ale to vaše vypadá víc k světu :-) Díky!
+1
tiez sa pridavam, nechapem preco to nespravite… dokonca uz je na to aj poslany pull request…
- David Ďurika
- Člen | 328
Andrasin napsal(a):
tady je moje verze šablony… Nemám ji úplně dotaženou do konce. Nifty ji má upravenou ještě trochu jinak.
hod to na git, aby sme si to mohli prezriet…
- David Zadražil
- Člen | 62
Andrasin napsal(a):
tady je moje verze šablony… Nemám ji úplně dotaženou do konce. Nifty ji má upravenou ještě trochu jinak.
Díky, jen upozorním, je tam chybějící funkce hasClass a poté getClass, tak si jí akorát dopiště do Column.php. Jinak to funguje perfektně. Budu provádět nějaké úpravy, tak to potom hodím na git.
Editoval David Zadražil (21. 10. 2012 20:56)