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

Croc
Člen | 270
+
0
-

@PavelJanda Ale já vůbec nemluvím o chybě ohledně Naja. Naju nepoužíváme a už cca rok jedeme vlastním forku datagridu. Popisoval jsem stav předtím a co nás vedlo jít cestou vlastního forku.

Čamo
Člen | 768
+
0
-

Vie mi niekto povedať ako do Ublaboo dostanem Dibi 1:N reláciu a ako nad ňou filtrovať? Ďakujem.

Čamo
Člen | 768
+
0
-

Ako fakt by mi to pomohlo… Teraz to riešim cez vnorene selecty a tíško dúfam, že existuje aj iné riešenie.

Čamo
Člen | 768
+
0
-

Dúfaj ďalej.

Pepino
Člen | 185
+
0
-

@Čamo střílím od boku, ale neslouží k tomu setCondition (https://examples.contributte.org/…eton/filters) ?

Čamo
Člen | 768
+
0
-

@Pepino O to nejde. Problém je že Datagrid berie ako datasource query objekt a Dibi zase 1:N väzby vytvorí až po zavolaní fetchAssoc(‚id‘). A ten fetchAssoc ja nemám ako zavolať. Alebo teda neviem ako.

Pepino
Člen | 185
+
0
-

@Čamo Tak to asi neporadím. Já používám datagrid + doctrine a tam pošlu jako datasource querybuilder který má joiny a pak přes setCondition querybuilderu nastavím filtrování v joinutých tabulkách. Podle mě to tak samo musí fungovat i s použitím dibi.

Čamo
Člen | 768
+
0
-

@Pepino Obávam sa že nie. Používal som tento grid spolu s Nextras/Orm a ano tam to funguje lebo väzby sú definované v ORM, ale Dibi toto nemá. Keby mi to aspoň niekto potvrdil alebo vyvrátil…

Editoval Čamo (22. 7. 2022 10:16)

Čamo
Člen | 768
+
0
-

Prosím vás ako sa robí filtrovanie keď datasource je array?
Mám to teraz takto:

->setFilterSelect($hasAgenciesAll)
				->setCondition(function($datasource, $value) use ($agencies) {
					if( $value == 'all' ) return $datasource;
					$return = [];
					foreach ($datasource as $row) {
						if( $value == 1 && isset($agencies[$row['agency_id']]) ) $return = $row;
						if( $value == 0 || !isset($agencies[$row['agency_id']]) ) $return = $row;
					}
					return $return;
				});

ale dostávam z toho error

PropertyAccessor requires a graph of objects or arrays to operate on, but it found type "integer" while trying to traverse path "id" at property "id"

EDIT

Tak som na to prišiel. Treba proste upraviť to vstupné pole a to sa predáva odkazom takže sa to vlastne prejaví aj na celom datasource.

Editoval Čamo (5. 9. 2022 9:01)

krkabol
Člen | 5
+
0
-

ahoj,
pro vyfiltrované položky (datasource Doctrine) bych chtěl udělat proklik na samostatnou stránku kde se vykreslí jinou Latte šablonou – pro položky tiskneme štítky s čárovým kódem, takže v gridu si krásně vyfiltruje a potom se chce podívat na preview.. A nemohu to vymyslet – addExportCallback() mi sice zpřístupní filtrovaný subset, ale poradili byste mi prosím někdo kudy dál, jak si ho přehodit někam na úroveň presenteru nebo jinak se dostat k tomu abych si filtrovaný set položek zpracoval nezávisle na gridu?

díky předem

dms
Člen | 55
+
0
-

Snad jsem spravne pochopil ale zkusil bych Group akcí a v te udelat redirect s ideckama v get parametru (oddelil bych je carkou pres implode) na pozadovany jiny presenter. V tom pak idecka explodnout a mel bys mit pozadovana data

Melebius
Člen | 16
+
0
-

@PavelJanda Bylo by, prosím, možné opět zpřístupnit dokumentaci? Web ublaboo.org už nefunguje, stránka https://ublaboo.paveljanda.com/datagrid/, avizovaná na GitHubu, hlásí 404 a ještě má problém s certifikátem pro HTTPS…

Pavel Janda
Člen | 973
+
+2
-

Melebius napsal(a):

@PavelJanda Bylo by, prosím, možné opět zpřístupnit dokumentaci? Web ublaboo.org už nefunguje, stránka https://ublaboo.paveljanda.com/datagrid/, avizovaná na GitHubu, hlásí 404 a ještě má problém s certifikátem pro HTTPS…

Ahoj, github.com/dg/ublaboo-datagrid je nějaký davidům starší klon.

Tady je oficiální repozitář: https://github.com/…tte/datagrid
Dokumentace: https://contributte.org/…te/datagrid/
Demo se snippety kódu: https://examples.contributte.org/…id-skeleton/

krkabol
Člen | 5
+
0
-

dms napsal(a):

Snad jsem spravne pochopil ale zkusil bych Group akcí a v te udelat redirect s ideckama v get parametru (oddelil bych je carkou pres implode) na pozadovany jiny presenter. V tom pak idecka explodnout a mel bys mit pozadovana data

@dms díky, vyzkouším

Edit: jede, takže ještě jednou díky!

Editoval krkabol (7. 11. 2022 13:27)

theo
Člen | 57
+
0
-

Narazil jsem na zajímavý problém. Z nějakého důvodu nechci použít CSV export přímo z datagridu (špatně mi escapuje řetězce), takže používám League\Csv jako komponentu pro export do CSV. Funguje pěkně, ale zákazník by si přál, aby se do CSV exportu dostaly jen sloupce, které jsou zapnuté (viditelné). Myslel jsem si, že to udělám skrze $grid->getColumnsVisibility() a nastavení hodnoty 'visible' daného sloupce, ale narazil jsem na to, že tato hodnota vůbec nereflektuje aktuálně nastavenou viditelnost daného sloupce. Chápu význam této vlastnosti špatně, nebo je to chyba? Kde tedy najdu nějaký příznak viditelnosti sloupců? (Podotýkám, že nemám na mysli defaultHide).

Martin Vágovszký
Člen | 7
+
0
-

Zdravím, poradí mi někdo prosím jak udělat editaci řádku datagridu doubleclickem místo tlačítka? Napadlo mě řešit to něják javascriptem, ale třeba je nějáké hezčí řešení o kterém nevím. Díky za radu

igi
Člen | 10
+
0
-

Zdravím, začal jsem používat tuto komponette a musím ho pochválit. Dá se v něm jednoduše použít jako zdroj sql tabulky spojené joinem? Respektive možná to ani nepotřebuji, stačilo by mi aby tam byl i sloupec typu select(to jsem nikde v dokumentaci nenašel), kde by klíč byl cizí klíč a hodnota by byla hodnota z té připojené tabulky. Selectem to chci z důvodu, že by to mělo být editovatelné, takto by to bylo docela pohodlné, že uživatel by si vybral z dostupných jiných hodnot. Jak to prosím jednoduše implementovat? Děkuji.
EDIT: ještě tu mám další problém, nevím jestli je to chyba v gridu nebo dělám něco špatně, ale když jsem přidal možnost inline přidání řádku přesně dle návodu, tak místo toho se mi objevila „komponenta“ pro skrývání sloupců.

Editoval igi (20. 1. 14:42)

tom
Člen | 154
+
0
-

Ahoj,
v ramci datasource mam nektere slouce takove CAST(AES_DECRYPT(u.telefon, 'SALT') AS CHAR(255)) as telefon a kdyz pak pouzivam filtr $grid->addFilterText('telefon', 'Telefon')->setSplitWordsSearch(false); tak mi to nefunguje, protoze misto WHERE (CAST(AES_DECRYPT(u.telefon, 'SALT') AS CHAR(255)) LIKE '%777%') ` se vytvori dotaz `AND (telefon` LIKE ‚%77%‘) `

Jde s tim neco delat? nebo si v ramci stranky musim udelat cely svuj novy filtr?

Diky

Felix
Nette Core | 1167
+
+4
-

👋 Pripravujeme novou verzi datagridu. S podporou PHP 8, bootstrap 5 a prepsanym javascriptem. Postupne muzete testovat v next vetvi.

https://github.com/…id/pull/1060
https://github.com/…ton/pull/168

Pavel Kravčík
Člen | 1111
+
0
-

@Felix: Super práce! Akorát data-provide=datepicker asi není nikde definovaný v JS.

Zkus {input $input, type => date} v šabloně dateFilteru a dateRangeFilteru, funguje to perfektně a bez dalšího JS.

Ozzrel
Generous Backer | 28
+
+1
-

@Felix: Když si potřebuju odchytit Paginator a použiju $grid->getPaginator() tak přestane fungovat ItemsPerPage a další věci.

Sranda je že stačí bdump($grid->getPaginator()); Testováno na skeletonu a stejný výsledek.

Edit: vyřešeno jinak

// Toto nahrazeno:
$grid->getPaginator()->setTemplateFile(__DIR__.'/templates/data_grid_paginator.latte');

// Nedokumentovanou funkcí:
$grid->setCustomPaginatorTemplate(__DIR__.'/templates/data_grid_paginator.latte');

Kdyby někdo potřeboval Bootstrap Paginator:

{*
 * @param Paginator $paginator
 * @param array     $steps
 * @param string    $iconPrefix
 *}

{var $link = [$control->getParent(), link]}

<nav n:if="$paginator->pageCount > 1" aria-label="DataGrid Paginator">
	<ul class="pagination pagination-sm">
		<li n:class="page-item, $paginator->isFirst() ? disabled"><a class="page-link ajax" href="{$link('page!', ['page' => $paginator->page - 1])}"><i n:block="{$iconPrefix}arrow-left" class="{$iconPrefix}arrow-left"></i> {='ublaboo_datagrid.previous'|translate}</a></li>

		{foreach $steps as $step}
				<li n:class="page-item, $step == $paginator->page ? active">
					<a class="page-link ajax" {if $step !== $paginator->page}href="{$link('page!', ['page' => $step])}"{/if}>{$step}</a>
				</li>
			<span n:if="$iterator->nextValue > $step + 1" class="mx-3">&mldr;</span>
		{/foreach}

		<li n:class="page-item, $paginator->isLast() ? disabled"><a class="page-link ajax" href="{$link('page!', ['page' => $paginator->page + 1])}">{='ublaboo_datagrid.next'|translate} <i n:block="{$iconPrefix}arrow-right" class="{$iconPrefix}arrow-right"></i></a></li>
	</ul>
</nav>

Editoval Ozzrel (Dnes 9:28)