ublaboo/datagrid: mocný, rychlý, rozšiřitelný, hezký, anglicky dokumentovaný datagrid

Edipo
Člen | 1
+
0
-

Ahoj.

  1. Dá ne nějak vypnout ajax pro daný grid? Nechci, nemůžu, vypnout ajax na celé stránce.
  2. 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 | 48
+
0
-

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
+
0
-

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
+
0
-

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) a render(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?

jAkErCZ
Člen | 321
+
0
-

Čau,
mám takový dotaz je nějaká možnost abych do addColumnStatus tahal nějak z db?

Díky

dTTb
Člen | 30
+
+1
-

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 :)

iru
Člen | 110
+
0
-

Ahoj, lze zprovoznit na kombinace php 7.1.3 a nette 3? Chtěla jsem vyzkoušet, ale při instalaci přes composer se mi to nepodařilo…

Petr Parolek
Člen | 455
+
0
-

máš velmi starou verzi PHP, cca 3 roky

dTTb
Člen | 30
+
+1
-

composer jde presvedcit pomoci --ignore-platform-reqs
na locale mi to chodi, ale upgrade php/docker container je lepsi reseni

Editoval dTTb (2. 3. 2020 13:37)

pp
Člen | 48
+
0
-

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
+
0
-

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ť?

dTTb
Člen | 30
+
0
-

Nemas tam nejaky js, ktery ti hned po nacteni zpusobi refresh datagridu?

Failips
Člen | 54
+
0
-

Tiež mi to napadlo, tak som hľadal ale nič také som nenašiel.

jikki
Člen | 73
+
0
-

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

radas
Člen | 221
+
+1
-

@jikki Mělo by to být fixnuto https://github.com/…rid/pull/871.

jikki
Člen | 73
+
0
-

@radas Děkuji za info. Instaluji přes npm a zatím to stále stahuje neopravenou verzi.

Pavel Janda
Člen | 977
+
+1
-

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
+
0
-

@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 | 786
+
0
-

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.

Petr Parolek
Člen | 455
+
0
-

@Čamo jsi zaspal dobu? Už dlouho Ublaboo datagrid je pod Contributte

Čamo
Člen | 786
+
0
-

To vidím. Pýtam sa kde je dokumentácia. @ppar

Editoval Čamo (12. 3. 2020 15:59)

IJVo
Člen | 38
+
0
-

Bohužel tento odkaz neotevře správně menu vlevo. Klepni v menu vlevo na „Nette UI“ a tam najdeš Datagrid.

@PavelJanda jde to nějak opravit, aby to lidi nemátlo?

Čamo
Člen | 786
+
0
-

@IJVo Díky.

Felix
Nette Core | 1189
+
0
-

@IJVo V jakem prohlizeci ti to dela? Me to otevira ve vsem v pohode.

Petr Parolek
Člen | 455
+
0
-

já to zkoušel ve firefoxu a nerozbalo se menu.

IJVo
Člen | 38
+
0
-

@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 | 786
+
0
-

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
+
0
-

@Felix Mně se to menu vlevo taky nerozebaluje. Poslední OS X, předposlední Chrome

sibka
Člen | 24
+
0
-

Č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 | 2635
+
0
-

Naju (i nette.ajax) je potřeba includovat dřív, než script Datagridu. Když pořadí porohodím, hlásí mi to stejnou chybu, ale když načtu hned po jQuery a Bootstrapu Naju a pak teprve ostatní scripty (Datagrid a moje vlastní), tak to funguje.

Čamo
Člen | 786
+
0
-

@Šaman čo myslíš pod tým includovať? Však poradie mám správne. Či aj main.js kde je $.nette.init() mám volať pred datagridom?

Šaman
Člen | 2635
+
0
-

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
+
+2
-

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 | 1189
+
+1
-

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 | 786
+
0
-

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)

n3t
Člen | 37
+
0
-

@Čamo vyšla verze 6.2.11, měla by to řešit…

teekey99
Člen | 45
+
0
-

@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!

Petr Parolek
Člen | 455
+
+2
-

zkus https://github.com/…tte-datagrid , jen nevím, jestli tam je všechno

teekey99
Člen | 45
+
0
-

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
+
0
-

@teekey99 Jsi slacku pehapkaru? Můžem tohle klidně komunikovat i s felixem v nějakém channelu, ať to tu nespamujem.. WDYT?

Čamo
Člen | 786
+
0
-

@n3t Vyšla ale iba pre Bower. Ja inštalujem balíčky cez npm. A tam to stále nieje.

teekey99
Člen | 45
+
0
-

@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…

cujan
Člen | 410
+
0
-

@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 | 2635
+
0
-

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
+
0
-

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
+
0
-

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 | 1189
+
+2
-

Ahoj @iru. Jedna se o tento repozitar https://github.com/…e/playground.

Lze to stahnout nekolika zpusoby:

  1. git clone git@github.com:planette/playground.git
  2. git clone https://github.com/planette/playground.git
  3. https://github.com/…e/master.zip
iru
Člen | 110
+
0
-

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…

Pavel Janda
Člen | 977
+
0
-

@iru Takové pamatování si teď, bohužel, datagrid neumí.

Šaman
Člen | 2635
+
0
-

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.