ublaboo/datagrid: mocný, rychlý, rozšiřitelný, hezký, anglicky dokumentovaný datagrid
- Edipo
- Člen | 1
Ahoj.
- Dá ne nějak vypnout ajax pro daný grid? Nechci, nemůžu, vypnout ajax na celé stránce.
- Dá se nějak filter select nastavit, aby se jeho hodnoty měnily dle vybraných hodnot v druhém selectu? (Tohle se dá vyřešit pomocí bodu 1., kdy dojde ke změně url a znovu načtení)
Editoval Edipo (19. 2. 2020 20:07)
- pp
- Člen | 50
Ahoj všem,
v rámci DataGridu si zobrazuju a filtruju data, která bych si pak chtěl po
filtraci zobrazit na JS mapě. Bohužel nevím jak se k filtrovaným datům
dostat. Něco jsem zkusil
class DataGrid2 extends \Ublaboo\DataGrid\DataGrid {
public function render(): void {
$this->dataModel->onAfterFilter[] = [ $this, 'afterDataModelFilter' ];
parent::render();
}
public function afterDataModelFilter(\Ublaboo\DataGrid\DataSource\IDataSource $dataSource) : void {
$p = $this->getPresenter();
$p->template->data = $this->dataModel->getDataSource()->getData();
}
}
Měl jsem za to, že takto získám filtrovaná data a předám si je do
šablony Presenteru a tady použiju pro JS kod na zobrazení grafu nebo položek
v mapě. Každopádně to takto nefunguje.
Nemam v tomto smeru znalosti a zkusenosti, snazil jsem se dohladat analogie ve
foru ale nenasel. Poprosil bych o par minut casu nekoho ze zkusenejsich, moc by
mi to pomohlo. Dekuji.
Editoval pp (24. 2. 2020 9:22)
- cermakpavel
- Člen | 4
Ahoj,
Snažím se rozchodit Datagrid s Naja ale ne a ne to dostat do funkcni faze. Aktualne ajax nefunguje a v konzoli dostavam tyto chyby:
Uncaught TypeError: Cannot read property 'ext' of undefined at datagrid.js:13
Uncaught TypeError: Cannot read property 'ext' of undefined at datagrid.spinners.js:3
Uncaught TypeError: Cannot read property 'ajax' of undefined at HTMLDocument.<anonymous> at datagrid-instant-url-refresh.js:5
Aktualne pouzivam nette 3, datagrid files jsem doinstalovaval pres bower (oboje jsem i prohnal updatem, takze bych mel mit nejnovejsi verzi). Naja nacitam i inicializuji pred tim nez nacitam datagrid (zkousel jsem i nacist naja, pak datagrid a pak inicializovat naja, ale problem se nezmenil).
Někdo nějaké nápady co dělám špatně?
- nanuqcz
- Člen | 822
Ivorius napsal(a):
Nesetkal se někdo s tím, že by mu ublaboo (datagrid-instant-url-refresh) přepisovalo špatně url?
Mám např. url /admin/pages/?type=posts (což je v v modulu Pages – presenter Homepage –
action(type)
arender(type)
– router správně zachycen na ([<locale [a-z]{2}>/]admin/<module>/<presenter>[/<action>][/<id>]
)Jenže jakmile tam spustím componentu datagridu, tak se zavolá ajaxem grid-refreshState() a ta vrátí payloadem
state: {locale: "cs", grid-page: null, grid-per_page: 40, grid-sort: {created: "DESC"},…}
a následuje přepsání url adresy na něco takového: /admin/pages/?locale=cs&grid-per_page=40&grid-sort%5Bcreated%5D=DESC
Což jednak smaže type a navíc přidá locale (je @persistent), která je defaultní a standardně v url není.
Pokud type přidám do routeru, pak url zůstane správně /admin/pages/posts?locale=cs&grid-per_page=40&grid-sort%5Bcreated%5D=DESC, tzn. že to asi ořízne vše za otazníkem, což by ale asi nemělo?
@PavelJanda @Ivorius
Vim, že je ten dotaz 2 roky stary, ale bojoval jsem teď s tím stejným.
Zmiňovaná metoda refreshState
mi z URL odmazávala
&do=add
.
Nastavit DataGrid::setRefreshUrl(false)
nepomohlo, datagrid
pořád volal refreshState!
a odmazával mi mé parametry. Ostatně
v tomto souboru ani není vidět, že by byl pokus o jakoukoli
podmínku, skript se jednoduše volá vždy bez vyjímky.
Jediný hotfix, který mi zatím funguje, je nenačítat do stránky
zmíněný soubor .../datagrid-instant-url-refresh.js
. Doufám, že
tím nerozbiju něco jiného?
- dTTb
- Člen | 30
Ahoj,
myslis z jiny tabulky, nez kterou v datagridu zobrazujes?
Muzes udelat view, kam ten sloupec pridas, nebo si ho pridat joinem.
Nebo myslis mozny stavy generovat z db? Mozna neco jako
<?php
$col = $grid->addColumnStatus('status', 'Status');
foreach($db->table('status') as $s){
$col->addOption($s->id, $s->name)
->setIcon($s->icon)
->endOption();
}
?>
@PavelJanda Zrovna u https://contributte.org/…columns.html#… vypadly obrazky :)
- pp
- Člen | 50
Ahoj,
porad bojuju s tim, ze se mi nedari dostat fitrovana data z Gridu ven do
nadrazeneho presenteru.
Resp. data si ulozim do promenne v Modelu ale nedokazu je vykreslit.
Ja bych potreboval po kazde zmene filtru prekreslit snippet v sablone
presenteru.
Pravdepodobne se ale sablona presenteru vykresli uz drive a renderDefault()
v te dobe jeste nema data
A v eventu onAfterFilter[] prekresneni
$this->renderControl(‚filtered_data‘) taky nefunguje.
Mam v tom celkem zmatek.
class DataGrid2 extends \Ublaboo\DataGrid\DataGrid {
public function getDataModel(){
return $this->dataModel;
}
}
//presenter
public function createComponentMyGrid($name){
$grid = new DataGrid2($this, $name);
$grid->setDataSource($this->myManager->getDataSource());
$grid->getDataModel()->onAfterFilter[] = function($dataSource) {
$this->myManager->setFilteredData($dataSource->getData());
// tady mam data v sablone
$this->template->filtered_data = $this->myManager->getFilteredData();
// ale data obalena do snippetu se nezobrazi
$this->renderControl('filtered_data');
};
}
public function renderDefault(){
// sem se data dostanou ale asi pozde
$this->template->filtered_data = $this->myManager->getFilteredData();
$this->renderControl('filtered_data');
}
// presenter template
{snippet grid}
{control myGrid}
{/snippet}
{snippet filtered_data}
{dump $filtered_data}
{/snippet}
- Failips
- Člen | 54
Zdravím, pri načítaní stránky sa 2× opakuje rovnaké dotazovanie na databázu ( link na obrázok ). Deje sa to na všetkých stránkach kde je použitý ublaboo datagrid. Prvý dotaz je pri načítaní stránky a hneď potom je tam ajax na ublaboo handler refreshState.
Napadá niekoho čo to môže spôsobovať, prípadne ako toto chovanie odstrániť?
- jikki
- Člen | 73
Ahoj,
v konzoli mi vyskakují chyby, které nevím jak odstranit.
1. při každém načtení stránky s datagridem.
nette.ajax.js:225 Uncaught TypeError: this.handleXHR is not a function
at ajax (nette.ajax.js:225)
at HTMLDocument.<anonymous> (datagrid-instant-url-refresh.js:21)
Je nutné načítat tohle pro správný běh datagridu?
<script src="{$basePath}/node_modules/ublaboo-datagrid/assets/datagrid-instant-url-refresh.js"></script>
když to nenačítám, tak to chybu nehodí a zdá se, že vše funguje jak má. RefreshUrl mám vypnutý.
2. při ukončení editace small inline editu, tzn. kliknutím mimo editační pole.
nette.ajax.js:225 Uncaught TypeError: this.handleXHR is not a function
at ajax (nette.ajax.js:225)
at submit (datagrid.js:650)
at HTMLTextAreaElement.<anonymous> (datagrid.js:680)
at HTMLTextAreaElement.dispatch (jquery.js:5237)
at HTMLTextAreaElement.elemData.handle (jquery.js:5044)
Děkuji za rady
- Pavel Janda
- Člen | 977
Vydal jsem verzi 6.2.10 (packagist i npm), která by měla fix
obsahovat – https://github.com/…/tag/v6.2.10
cc @jikki
- jikki
- Člen | 73
@PavelJanda @radas stáhl jsem novou verzi a nyní to hází jinou chybu.
Uncaught TypeError: Cannot read property 'show' of null
at Object.start (spinner.ajax.js:11)
at Function.<anonymous> (nette.ajax.js:42)
at Function.each (jquery.js:373)
at Object.fire (nette.ajax.js:40)
at nette.handleXHR (nette.ajax.js:255)
at nette.ajax (nette.ajax.js:225)
at dataGridRegisterAjaxCall (datagrid-instant-url-refresh.js:15)
at HTMLDocument.<anonymous> (datagrid-instant-url-refresh.js:23)
- Čamo
- Člen | 798
Prosím vás kde je dokumentácia k Ublaboo datagridu? Všetky linky čo som našiel vedú sem https://contributte.org/…te/datagrid/ a tam nič nieje.
- IJVo
- Člen | 38
@Felix v Chrome, Firefox i v Opeře. (Windows 10).
Ukázka jak to vypadá je zde: https://1iq.cz/…2A/R49vY.jpg
Na odkazu https://contributte.org/…te/datagrid/ se v menu rozbalí
první skupina, tedy „Nette“.
- Čamo
- Člen | 798
Nainštaloval som datagrid nalinkoval pred jeho js súbory nette.ajax.js a
vyhadzuje mi to chybu: Uncaught Error: Include Naja.js or nette.ajax for
datagrids to work!
Problém je v tom že ten datagridový javascript nečaká na onload stránky
narozdiel od nette.ajax.js a hneď sa spustí. Čo to je prosím vás?
Inými slovami nette.ajax.js čaká
(function(window, $, undefined) {...}
Ale datagrid nie hneď sa pýta na niečo čo tam ešte nemôže byť
if (typeof naja !== "undefined") {...}
else if ($.nette) {...}
Editoval Čamo (12. 3. 2020 23:40)
- Pavel Janda
- Člen | 977
@Felix Mně se to menu vlevo taky nerozebaluje. Poslední OS X, předposlední Chrome
- sibka
- Člen | 24
Čamo napsal(a):
Nainštaloval som datagrid nalinkoval pred jeho js súbory nette.ajax.js a vyhadzuje mi to chybu: Uncaught Error: Include Naja.js or nette.ajax for datagrids to work!
Problém je v tom že ten datagridový javascript nečaká na onload stránky narozdiel od nette.ajax.js a hneď sa spustí. Čo to je prosím vás?Inými slovami nette.ajax.js čaká
(function(window, $, undefined) {...}
Ale datagrid nie hneď sa pýta na niečo čo tam ešte nemôže byť
if (typeof naja !== "undefined") {...} else if ($.nette) {...}
@Čamo Rozchodil jsi to nějak?
Editoval sibka (13. 3. 2020 19:20)
- Šaman
- Člen | 2659
Ee? $.nette.init()
je záležitost
nette.ajax.js
.
Naju inicializuješ
<script>
document.addEventListener('DOMContentLoaded', naja.initialize.bind(naja));
</script>
A to stačí až nakonec.
Edit: Aha, ty máš nette.ajax.js
. Tak to by mělo fungovat, ta
podmína že existuje $.nette
by měla být splněná hned po
přilinkování – inicializaci je možné provést az na konci. Tak nevím
jestli není nějaká chyba v nekompatibilitě, nebo co. Možná pošli ten kus
html kódu kde includuješ scripty.
Editoval Šaman (16. 3. 2020 19:12)
- n3t
- Člen | 37
Rozcházím DataGrid s Najou, a narazil jsem na 2 chybky v datagrid.js
1/ při použití textového filtru se neodesílá jen ajax, ale submitne se
celá stránka (datagrid.js používá form.submit(), to ale Naja neumí zpracovat)
2/ při použití confirmation se potvrzení vůbec nevyvolá. Before eventy
počítají s parametrem .nette, který ale v Naja neexistuje
PR zde
- Felix
- Nette Core | 1197
Nova URL pro demo je https://examples.contributte.org/…es/datagrid/.
Puvodni domena planette.io se jiz nebude dale prodluzovat. At netristime zdroje a energii.
- Čamo
- Člen | 798
Narazil som na rovnaký problém s filtrami + Naja.js ako n3t. V podstate je to nepoužiteľné. Pri písaní mi skáče celá stránka kôli refreshu a input vždy stratí focus. Keďže nette.ajax.js je mrtvy tak by bolo dobré to fixnuť.
A okrem toho sa mi nezobrazujú flash messages. Keď som skúšal kód podľa dokumentácie:
public function handleDeleteUser($id)
{
$presenter = $this->getPresenter();
if( $user = $this->orm->users->getById($id) )
{
$user->deleted = 'now';
$this->orm->users->persistAndFlush($user);
}
$presenter->flashSuccess('//components.usersDatagrid.deleteSuccess');
if ($presenter->isAjax())
{
$presenter->redrawControl('flash');
$this['grid']->reload();
}
else
{
$presenter->redirect('this');
}
}
Tak sa síce flash message vypíše ale okamžite nasleduje refresh takže ho nemám šancu prečítať.
Editoval Čamo (19. 3. 2020 13:41)
- teekey99
- Člen | 45
@PavelJanda Ahoj, před nějakým časem jsem psal na githubu, že bych rád pomohl s přepsáním frontendových assetů pro datagrid. Bylo to zatím ne úplně ideálně komunikovaný přes jedno issue, které jsem zakládal.
Každopádně myslím, že je čas se do toho pustit. Nicméně můj poslední dotaz byl, zda existuje nějaké repo, kde jsou rozběhnutý full-featured examply datagridu, abych z toho pro ten update mohl vycházet? Na vlastních projektech jsem zcela určitě zatím nevyčerpal veškerý potenciál datagridu, takže bych si to rád nejprve důkladně zmapoval.
Díky za info!
- teekey99
- Člen | 45
ppar napsal(a):
zkus https://github.com/…tte-datagrid , jen nevím, jestli tam je všechno
Myslím, že tohle je přesně to, co jsem hledal. Díky moc!
- Pavel Janda
- Člen | 977
@teekey99 Jsi slacku pehapkaru? Můžem tohle klidně komunikovat i s felixem v nějakém channelu, ať to tu nespamujem.. WDYT?
- cujan
- Člen | 410
@PavelJanda v com moye byt problem?
Problem 1
– ublaboo/datagrid v6.2.9 requires php ^7.2 → your PHP version (7.4.3)
overridden by „config.platform.php“ version (7.1) does not satisfy that
requirement.
– ublaboo/datagrid v6.2.8 requires php ^7.2 → your PHP version (7.4.3)
overridden by „config.platform.php“ version (7.1) does not satisfy that
requirement.
– ublaboo/datagrid v6.2.7 requires php ^7.2 → your PHP version (7.4.3)
overridden by „config.platform.php“ version (7.1) does not satisfy that
requirement.
– ublaboo/datagrid v6.2.6 requires php ^7.2 → your PHP version (7.4.3)
overridden by „config.platform.php“ version (7.1) does not satisfy that
requirement.
– ublaboo/datagrid v6.2.5 requires php ^7.2 → your PHP version (7.4.3)
overridden by „config.platform.php“ version (7.1) does not satisfy that
requirement.
– ublaboo/datagrid v6.2.4 requires php ^7.2 → your PHP version (7.4.3)
overridden by „config.platform.php“ version (7.1) does not satisfy that
requirement.
– ublaboo/datagrid v6.2.3 requires php ^7.2 → your PHP version (7.4.3)
overridden by „config.platform.php“ version (7.1) does not satisfy that
requirement.
– ublaboo/datagrid v6.2.2 requires php ^7.2 → your PHP version (7.4.3)
overridden by „config.platform.php“ version (7.1) does not satisfy that
requirement.
– ublaboo/datagrid v6.2.11 requires php ^7.2 → your PHP version (7.4.3)
overridden by „config.platform.php“ version (7.1) does not satisfy that
requirement.
– ublaboo/datagrid v6.2.10 requires php ^7.2 → your PHP version (7.4.3)
overridden by „config.platform.php“ version (7.1) does not satisfy that
requirement.
– ublaboo/datagrid v6.2.1 requires php ^7.2 → your PHP version (7.4.3)
overridden by „config.platform.php“ version (7.1) does not satisfy that
requirement.
– ublaboo/datagrid v6.2.0 requires php ^7.2 → your PHP version (7.4.3)
overridden by „config.platform.php“ version (7.1) does not satisfy that
requirement.
– Installation request for ublaboo/datagrid ^6.2 → satisfiable by
ublaboo/datagrid[v6.2.0, v6.2.1, v6.2.10, v6.2.11, v6.2.2, v6.2.3, v6.2.4,
v6.2.5, v6.2.6, v6.2.7, v6.2.8, v6.2.9].
vdaka
- Šaman
- Člen | 2659
V composer.json
máš (bývá to úplně na konci) nastavenou
platform
, což je nastavení verze PHP pro ktero má composer
vybírat závislosti i v případě, že na stroji máš jinou verzi PHP
(používá se to třeba pokud na produkci je PHP 7.1 ale ty už máš doma
7.4 a nechceš aby ti tam composer cpal aktualizace knihoven které nejsou
kompatibilní s produkcí).
Nastav tam víc, než 7.1
"config": {
"platform": {
"php": "7.4"
}
Editoval Šaman (23. 3. 2020 12:37)
- Petr Parolek
- Člen | 455
teekey99 napsal(a):
@PavelJanda Nejsem, koho můžu zkontaktovat, aby mě zaslal pozvánku do workspacu? Heroku appka na pozvánky zřejmě nefunguje nebo běží jinde, než je uvedenej link na webu pehapkari…
Nebo se hoši můžete potkat na starém dobrém gitter kanále https://gitter.im/ublaboo/help
- iru
- Člen | 110
dTTb napsal(a):
composer jde presvedcit pomoci
--ignore-platform-reqs
na locale mi to chodi, ale upgrade php/docker container je lepsi reseni
@dTTb díky moc, toto mi pomohlo, aespoň do doby, než udělám upgrade PHP. Běží mi tam i starší projekty.
V dokumentaci jsem našla odkaz na příklady: https://contributte.org/examples.html, je možné tyto příklady získat jinak, než přes git? Neporařilo se mi to totiž stáhnout.
Cloning into ‚playground‘…
git@github.com: Permission
denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
- Felix
- Nette Core | 1197
Ahoj @iru. Jedna se o tento repozitar https://github.com/…e/playground.
Lze to stahnout nekolika zpusoby:
git clone git@github.com:planette/playground.git
git clone https://github.com/planette/playground.git
- https://github.com/…e/master.zip
- iru
- Člen | 110
Ještě dotaz. Jde udělat to, aby zaškrtnutá pole pro hromadnou akci zůstala zaškrtnutá i při dalším filtrování? Mám na mysli to, že si člověk něco vyhledá, například podle čísla, zaškrtne, pak zase, pak třeba podle části názvu, potom podle kategorie… a pak to vše vybrané nakonec hromadně například poslat na email… To, co jsem zkoušela, tak se mi to, co už mám vybrané, při dalším výběru zase odebere. Totéž i při stránkování. Případ, když máte něco vybrat z několika set položek, tak to prostě bez filtrování nejde…
- Šaman
- Člen | 2659
Zkoušel jsem Nette 3.1 a (pokud se od včerešjka nic nezměnilo) fungovalo
všechno, ale Ublaboo\DataGrid
vyžaduje
"contributte/application"
a ta vyžaduje
"nette/application": "~3.0.0"
. Takže bez aliasu teď není možné
nainstalovat Nette 3.1 s Datagridem, ačkoliv tam není nekompatibilita kódu,
jen omezení na úrovni composeru.