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

Tomáš Vodička
Člen | 28
+
+2
-

jAkErCZ napsal(a):

Ahoj všem,
je nějaká možnost jak v datagridu obarvit daný řádek? Třeba pokud v db je neaktivní bude červený a pokud je aktivní bude zelený?

Díky všem za rady.

Třídu řádku můžeš ovlivnit pomocí setRowCallback()

https://contributte.org/…rid/row.html#…

d@rkWolf
Člen | 167
+
0
-

Zdravím, sem úplně zoufalý, nenarazil někdo na situaci, že mu addColumnStatus vypíše jen číslo, místo vytvoření toho buttonu na přepnutí stavu?

Už jsem datagrid párkrát použil a dycky to fungovalo, jediný rozdíl je o pár desetinek novější Nette oproti minulému použití a to, že teď tahám data přes Doctrine, místo Nette Database. Řádek se vypíše, tlačítka v Action se vytvoří, ale ve sloupci pro status mám místo buttonu „1“(1/0 – zapnuto/vypnuto)

Je úplně fuk, co tam dám, na nic to nereaguje, ani přesně skopírovaný kód z dokumentace jen úpravou názvu sloupce nevytvoří tlačítko.

Ozzrel
Generous Backer | 54
+
0
-

Ahoj, může mi někdo poradit jak se inlineeditu řekne že to je blbě :-) a má probliknout červeně a ne zeleně. V kodu jsem to trochu vyčuchal ale nevím jak mu nahlásit po validaci že to je prostě špatně a má použít třídu ‚edited-error‘.

Dokumentace jen zmiňuje, že to zeleně blikne a vlastní render. Bohatě mi stačí vestavěné funkce a proto se pídím po tomhle.

Pavel Janda
Člen | 977
+
0
-

@d@rkWolf Ahoj, mohl bys, pls, udělat nějaké sandbox-like repo na githubu? Nebo alespoň gist? Abych si to mohl rozjet a vyzkoušet. Zatím jsem se s tím nesetkal. Kdyby se to povedlo, usnadnilo by mi to testování. Díky moc! (Můžeš použít https://github.com/…rid-skeleton)

Pavel Janda
Člen | 977
+
0
-

@Ozzrel Teoreticky by mělo stačit vrátit nějaký error http kód. Obslužný JavaScript vypadá cca takto:

$.nette.ajax({
	url: cell.data('datagrid-editable-url'),
	data: {
		value: value
	},
	type: 'POST',
	success: function(payload) {
		// ...
		return cell.addClass('edited');
	},
	error: function() {
		cell.html(cell.data('originalValue'));
		return cell.addClass('edited-error');
	}
});

Editoval Pavel Janda (22. 2. 2022 10:13)

d@rkWolf
Člen | 167
+
0
-

@PavelJanda v pátek jsem s v tom dál vrtal, odpojil jsem datasource Doctriny a místo něj připojil obyčejné pole(stejný formát, jen sem ořezal pár sloupců), na nic dalšího jsem nešáhnul, jen záměna v setDatasource(pole místo funkce z repozitáže s queryBuilderem) a když sem dal F5, přepínač stavu tam byl…no a potom jsem vyměnil zpět zase tu funkce s queryBuilderem…a ten přepínač tam zůstal a od té doby tam je, nechápu, jak je něco takového možné…

jediné vysvětlení, co mě napadalo, je v addColumnStatus->addOption sem měl ten stavový parametr ve špatném formátu, ale nechápu, jak by se přehozením na pole změnil…mám to v Doctrine Entitě zadané jako column type boolean, v DB je to vygenerované jako tinyInt, zkoušel jsem tam dávat true, ‚true‘, 1, ‚1‘, nevím jaké další varianty a nic-a teď mi to funguje s použitím true…

cache sem mezitím smazal x-krát, takže ničím v cache to být nemohlo

Editoval d@rkWolf (24. 2. 2022 15:57)

Ozzrel
Generous Backer | 54
+
0
-

@PavelJanda tak jsem to zkoušel všelijak a úspěch se nedostavil.
Pak jsem zjistil omylem, že to funguje a stačí die(); ale bohužel jen u „malého“ inlineeditu.
Stejný postup u „velkého“ nefunguje a editace se chová tak, že se vrátí response ale editace se neukončí a tlačítko SAVE vypadá nefunkčně pro uživatele bez udání důvodu.

			$inlineEdit->onSubmit[] = function ($id, $values) {
			try {
				$this->model->findNeco()->get($id)->update($values);
			} catch ( \Nette\Database\UniqueConstraintViolationException $e) {
				$this->flashMessage('Už je to v databázi', 'error');
				$this->redrawControl('flash');
				die();
			}
			};

No nechám zelenou a ve flashmassage chybu co se děje. Užíci to poberou :)

datagrid 6.9.4 + Naja 2.1.4

Editoval Ozzrel (25. 2. 2022 19:31)

Pavel Janda
Člen | 977
+
0
-

@Ozzrel Velký inline edit funguje jinak, přes nette forms. Zkusil bych v takovém případě jednoduše přidat error do formu (Form/Input::AddError)

Felix
Nette Core | 1197
+
+4
-

Bootstrap 5

Pripravil jsem PR s aktualizaci bootstrapu na verzi 5.0 (https://github.com/…id/pull/1021).

Zaroven jsem upravil i ukazkovy skeleton contributte/datagrid-skeleton (https://github.com/…eton/pull/45).

Prosim o otestovani. Diky.

Melebius
Člen | 16
+
0
-

Chtěl bych vás poprosit o radu: Mám sloupec, který používá renderer (k formátování měny) a zároveň má být editovatelný (setEditableInputType()). To v zásadě funguje, ale na rozdíl od sloupců bez rendereru se při otevření editačního pole nepředvyplní stávající hodnota. Je možné takovému editačnímu poli nějak nastavit hodnotu, která se má předvyplnit? Představoval bych si třeba metodu setEditableValue()

Příklad: V gridu se vypisuje 10 Kč, když na to kliknu, mělo by se objevit 10, ale místo toho se objeví jen prázdné pole.

Šaman
Člen | 2659
+
0
-

Nedaří se mi rozchodit Datagrid s Naja2. A protože se v tomto vlákně už hodně špatně dohledávají už vyřešené problémy, položil jsem to jako dotaz ve vlastním vlákně. Ale týká se to nejspíš jen Datagridu. Aktuálně mi funguje jen s nette.ajaxNaja 1.8.x

NouF
Člen | 67
+
0
-

Ahoj,

chápu dobře že tento řádek generuje data attribute pro multi tlačítka?

https://github.com/…tiAction.php#L63

Jestli ano, tak bootstrap 5 vyžaduje tuto podobu „data-bs-toggle“

Pepino
Člen | 256
+
0
-

@NouF datagrid je pro b4, verze pro b5 zatím ještě není

NouF
Člen | 67
+
0
-

Ahoj, já odkazoval na branch, kde je příprava na bootstrap 5.

ale díky za info

Melebius
Člen | 16
+
+1
-

Chtěl bych vás poprosit o radu: Mám sloupec, který používá renderer (k formátování měny) a zároveň má být editovatelný (setEditableInputType()). To v zásadě funguje, ale na rozdíl od sloupců bez rendereru se při otevření editačního pole nepředvyplní stávající hodnota.

Nakonec jsem to s pomocí kolegy vyřešil pomocí DataGrid::addColumnCallback. JS je na to naštěstí připravený a očekává hodnotu k editaci v atributu data-datagrid-editable-value:

$grid->addColumnCallback('value', function ($column, $item) {
    $column->getElementPrototype('td')->addAttributes(['data-datagrid-editable-value' => $item->value]);
});
janvacek
Člen | 15
+
0
-

Ahoj, je prosím nějaký způsob/možnost, jak se kompletně odtrhnout s datagridem od Bootstrapu a napojit si jakýkoliv jiný framework/vlastní styly?

V CMS používám jiný framework a importovat si BS4 a řešit konflikty s mým frameworkem je něco, čemu bych se chtěl vyhnout

Děkuji

theo
Člen | 57
+
0
-

Snažím se pomocí metody addGroupButtonAction vytvořit funkcionalitu, která by mi vyexportovala vybrané (zaškrtnuté) položky z DG do XLS souboru (HTML soubor s tabulkou) a vrátil mi tento soubor ke stažení.
Potíž je ale v tom, že když zmáčknu tlačítko Export, tak se vše provede v AJAXovém volání, takže browser tento soubor nestáhne a nenabídne k uložení.

Existuje nějaký způsob jak donutit DG, aby nedělal obsluhu exportního volání AJAXem, ale normálním synchronním požadavkem? Dává to, jak se o to snažím vůbec smysl?

Domm
Člen | 4
+
+1
-

theo napsal(a):

Snažím se pomocí metody addGroupButtonAction vytvořit funkcionalitu, která by mi vyexportovala vybrané (zaškrtnuté) položky z DG do XLS souboru (HTML soubor s tabulkou) a vrátil mi tento soubor ke stažení.
Potíž je ale v tom, že když zmáčknu tlačítko Export, tak se vše provede v AJAXovém volání, takže browser tento soubor nestáhne a nenabídne k uložení.

Existuje nějaký způsob jak donutit DG, aby nedělal obsluhu exportního volání AJAXem, ale normálním synchronním požadavkem? Dává to, jak se o to snažím vůbec smysl?

GroupActiony jsou k tomuhle moc neohrabané, jak by jsi jako uživatel např. exportoval více stránek najednou?
Naštěstí v rámci datagridu existuje něco co tvůj požadavek řeší, viz. https://contributte.org/…/export.html#…
Je to exportní callback s možností exportu zafiltrovaných dat nebo všech dat, pak už je na tobě jakou formou to chceš předat uživateli.

d@rkWolf
Člen | 167
+
0
-

@PetrParolek s rozšiřováním šablony sem narazil u stránkování – jediný způsob, na který jsem přišel, je:

$grid->getPaginator()->setTemplateFile(__DIR__ . '/BaseGridPaginator.latte');

V tom souboru jsem nahradil původní verzi šablony stránkování za moji(všechny latte věci tam zůstaly, změny se týkají css tříd a vnořených html značek) – a výsledek je, že když změním počet položek na stránku, grid i stránkování se překreslí(ajax, všechny snippety tam jsou), aniž by se projevil výsledek. Z 20->50 u 24 položek má stránkování zmizet, ale zůstane tam a počet se taky nezmění, jen v tom výběru počtu se označní vybraná 50ka.
Nemůžu přijít na to, čím to je.

Pepino
Člen | 256
+
0
-

Problém 1:
Při použití naja.js mi u TreeView po rozbalení položky (1 úroveň) konzole hlásí

Uncaught TypeError: naja.load is not a function
    at dataGridLoad (datagrid.js:91:1)

Problém 2:
Možná to je kvůli problému 1, ale druhá úroveň už nejde rozbalit – resp neprovede se ajaxový požadavek ale klasický.

Melebius
Člen | 16
+
0
-

Je možné z PHP upravit hodnotu filtru Datagridu? Postup, který řeším: Vyfiltruji si určité položky podle stavu (vytvořen přes setFilterMultiSelect), použiju skupinovou akci (addGroupAction) na změnu stavu položek. Po znovunačtení položek Datagridu přes AJAX vybrané položky zmizí z obrazovky, protože se jim změnil stav. Pak jsem zde narazil na následující dotaz z roku 2016:

David Grudl napsal(a):

Narazil jsem na drobnost. Když filtru nastavím hodnotu:

$grid->addColumnText('status', 'Stav')
	->setFilterSelect([...])
	->setValue('value');

tak se sice zohlední při filtrování, ale ne při vykreslení selectboxu.

Ani mně kód $grid->getFilter()->setValue() nefungoval. Dá se to nějak řešit?

Ještě přikládám funkční kód pro změnu hodnoty filtru stavu, nicméně při tomhle postupu se vynulují všechny ostatní možnosti filtru:

$this->redirect($this->getAction(true), [
    'myGrid-filter' => [
        'state_id' => [
            getNewState1(),
            getNewState2(),
        ]
    ]
]);
Pavel Janda
Člen | 977
+
0
-

Ano, můžeš normálně šahat do persistentních proměnných tvé datagrid komponenty. Jmenuje se filter, myslím.

Melebius napsal(a):

d@rkWolf
Člen | 167
+
0
-

@Pepino čau jakou tam máš Naju? Koukal jsem se u sebe, TreeView mi funguje, žádné errory, ale mám starší Naju(1.8.3), protože sem potřeboval forceRedirect z payloadu a to je v 2.x odstraněno(a já to neumím udělat jinak…)

d@rkWolf
Člen | 167
+
0
-

@PavelJanda netušíš, proč nefunguje správně nahrazení šablony stránkování viz. můj dotaz 3 příspěvky nahoru(netuším, jak se dělá odkaz)? Resp. proč se přestane správně překreslovat grid(šablona jako taková se změní)? Snippety se pošlou, ale grid na ně nezareaguje.

Editoval d@rkWolf (6. 6. 2022 18:52)

Melebius
Člen | 16
+
0
-

Pavel Janda napsal(a):

Ano, můžeš normálně šahat do persistentních proměnných tvé datagrid komponenty. Jmenuje se filter, myslím.

@PavelJanda Díky za rychlou odpověď. Problém je, že v requestu, který přijde při AJAXové změně stavu, je proměnná $grid->filter prázdná a nastavení hodnoty se v prohlížeči neprojeví (ani když pak zavolám svůj navrhovaný redirect).

public function createComponentMyGrid() {
    $grid = new DataGrid();
    //...
    $grid->addGroupAction('Změnit stav')
        ->onSelect[] = [$this, 'changeState'];
}

public function changeState(array $ids) {
    changeState($ids);
    $grid = $this->getComponent('myGrid');
    $grid->filter['state_id'] = [
        getNewState1(),
        getNewState2(),
    ];
    $this->redirect($this->getAction(true));  // zkoušel jsem s tímto řádkem i bez něj
}
Pepino
Člen | 256
+
0
-

d@rkWolf napsal(a):

@Pepino čau jakou tam máš Naju?…

Už jsem našel čím to je https://github.com/…/issues/1000

d@rkWolf
Člen | 167
+
0
-

Pepino napsal(a):

d@rkWolf napsal(a):

@Pepino čau jakou tam máš Naju?…

Už jsem našel čím to je https://github.com/…/issues/1000

Jo, to vysvětluje, proč mi to s tou Najou 1.x funguje.

Melebius
Člen | 16
+
0
-

Melebius napsal(a):

Je možné z PHP upravit hodnotu filtru Datagridu? Postup, který řeším: Vyfiltruji si určité položky podle stavu (vytvořen přes setFilterMultiSelect), použiju skupinovou akci (addGroupAction) na změnu stavu položek. Po znovunačtení položek Datagridu přes AJAX vybrané položky zmizí z obrazovky, protože se jim změnil stav.

Nakonec jsem to vyřešil pomocí JS, což vypadá spolehlivě a zachová to původní hodnoty filtru:

        $this->template->addStateOptions = [
            getNewState1(),
            getNewState2(),
        ];
<div>
    {control myGrid}
</div>
<script n:ifset="$addStateOptions">
    $(document).ready(function () {
        // only append options if anything is filtered already
        if ($('#frm-myGrid-filter-filter-state_id option:selected').length > 0) {
            {foreach $addStateOptions as $option}
                $('#frm-myGrid-filter-filter-state_id option[value={$option}]').prop('selected', true);
            {/foreach}
            $('form#frm-myGrid-filter').first().submit();
        }
    });
</script>
MarekP
Člen | 3
+
0
-

Ahoj, nesetkali jste se někdy s takovou chybou https://postimg.cc/NL0S8pQv ?
Dělá to pravděpodobně pouze u robotů, protože HTTP_USER_AGENT je ‚Mozilla/5.0 (compatible; SentiBot/1.0; +https://www.sentibot.eu)‘. Uživatelsky se mi to nepodařilo vyvolat. Je to tím, že ta funkce getSessionData vrací null.

Nevíte, kde by mohl být problém?

Editoval MarekP (8. 6. 2022 17:07)

Melebius
Člen | 16
+
0
-

@MarekP A není podmínka if ($columns !== []) zbytečně úzká? Kdybys místo toho dal if ($columns), tak to null vyřeší.

MarekP
Člen | 3
+
0
-

@Melebius no problém je, že je to součástí kódu datagridu (je to ve funkci handleShowColumn).

Pavel Janda
Člen | 977
+
0
-

d@rkWolf napsal(a):

Pepino napsal(a):

d@rkWolf napsal(a):

@Pepino čau jakou tam máš Naju?…

Už jsem našel čím to je https://github.com/…/issues/1000

Jo, to vysvětluje, proč mi to s tou Najou 1.x funguje.

Good point. Nechtěl by někdo poslat opravný PR?

jikki
Člen | 73
+
0
-

Pavel Janda napsal(a):

d@rkWolf napsal(a):

Pepino napsal(a):

d@rkWolf napsal(a):

@Pepino čau jakou tam máš Naju?…

Už jsem našel čím to je https://github.com/…/issues/1000

Jo, to vysvětluje, proč mi to s tou Najou 1.x funguje.

Good point. Nechtěl by někdo poslat opravný PR?

Zdravím všechny @PavelJanda @Pepino @d@rkWolf
Jsem rád, že se k té issue dostali i další. Před časem jsem ji zakládal na Githubu a snažil se za pomoci @jiripudil to vyřešit. Potrápil jsme se s tím dost a přesto se mi to vyřešit nepovedlo, zřejmě zatím nemám dost znalosti. Jinak bych samozřejmě poslal PR. Nechtěli byste jako autoři Datagridu a Naji dát hlavy dohromady a kouknout na to? Mnoho lidí by vám jistě bylo vděčných. Co vy na to Pavle a Jirko? :)

pesMamlas
Člen | 8
+
0
-

Ahoj

doteď jsem používal starou verzi Datagridu společně s nette.ajax (starý server se starým PHP). V rámci přechodu na PHP 8 jsem musel aplikaci upravit a začít používat Naju. Datagrid mi jede a filtrování bez realoadu provede přes Ajax jako nic, ale nejde mi Big inline edit (nic se nestane) a Small odesílá pouze $id a nikoli $value (NULL). Pokoušel jsem se duplikovat problém na sandboxu Nette a tam se mi povedlo to, že nefunguje ani jeden Inline edit (Big ani Small). V každém zmíněném případě Tracy ukáže, že proběhl Ajax a konzole nevypisuje žádnou chybu.

Balíky jsem zkoušel přes NPM/Webpack i přímo přes CDN. Inicializace Naja proběhla v pohodě a Ajaxové prvky jako např. filtrování fungují.

Nesetkal se někdo s tímto problémem?

Verze:
„php“: „8.1“,
„nette/application“: „^3.1“,
„naja“: „^2.4.0“,
„ublaboo-datagrid“: „^6.9.1“,
„nette-forms“: „^3.3.1“

Díky moc za jakoukoli radu.

Editoval pesMamlas (19. 6. 2022 21:11)

NouF
Člen | 67
+
0
-

Je tam problém, od Naja 1.6+ to není podporované. Také jsem to nevyřešil, tak jsem si musel napsat vlastní „datagrid“

https://github.com/…/issues/1000#…

Pavel Janda
Člen | 977
+
+1
-

@jikki můžeme tomu dát nějakou cenovku, pokud se k tomu nikdo jiný nedostane a nezaloží PR. Mně osobně Naja 2 (zatím) netrápí, bo jí (zatím) nepoužívám.

Momentálně se snažím předběhnout dobu a zkusit naroubovat nette a datagrid na Hotwired Turbo. Má s tím někdo zkušenost?

jikki
Člen | 73
+
-8
-

@PavelJanda trochu zklamání. Ještě jsem se nesetkal, s tím, že několik lidí v rámci komunity narazí na chybu a nahlásí ji a autor projektu bude chtít, aby mu někdo zaplatil za její opravu. Nebo jsem to špatně pochopil? Za mě hlášení chyb a diskuse je pro dobro všech vývojářů, tak samo by mělo být i jejích odstraňování.

jiri.pudil
Nette Blogger | 1029
+
+15
-

Na vysvětlenou k mému palci dolů:

Za mě hlášení chyb a diskuse je pro dobro všech vývojářů, tak samo by mělo být i jejích odstraňování.

Však nikdo nikomu nebrání tu chybu odstranit a přispět do balíčku. Pokud to má být pro dobro všech, mělo by být ideálem, aby se na tom dobru podíleli všichni. Řada z nás dělá open-source pro zábavu a řada z nás to dělá ve volném čase, což je omezený zdroj. Proto prosím o pochopení, že ho alokujeme tak, aby to zůstala zábava.

Kromě téhle řekněme etické roviny to má i rovinu ekonomickou: datagrid myslím šetří ohromnému množství vývojářů spoustu času, a tedy i firmám spoustu peněz. Bylo by fér, kdyby byť jedna z nich nějakou část těch ušetřených peněz vrátila zpátky k dobru všech, třeba v podobě toho, že věnuje trochu svého vývojářského času na opravu chyby, která všechny trápí.

A na závěr ještě čistě prakticky: Pavel píše, že nepoužívá Naju 2, takže by musel zjišťovat, co se změnilo a co kde jak upravit. Já jsem sice autorem Naja, a mám proto trochu představu, kam je potřeba sáhnout, ale naopak nepoužívám datagrid, takže bych musel zdlouhavě zkoumat, jak funguje jeho client-side část a jak svou změnu patřičně otestovat. Pro nás oba by to byla nemalá investice volného času, kterou si sami před sebou musíme obhájit.

Pokud to nezalepí naši vlastní bolístku (což zjevně aktuálně ne) ani to pro nás nepředstavuje lepší zdroj zábavy v porovnání s jinými způsoby trávení volného času (což zjevně aktuálně ne), může tou obhajobou být to, že ten volný čas někdo zaplatí 🤷

Pavel Janda
Člen | 977
+
+9
-

@jiripudil Pěkně sepsáno, díky, souhlasím 100%.

Nerad bych nastartoval vlnu nevole vůči datagridu kvůli tomu, že nehodlám nějakou chybu opravit (no, chybu… situaci – ono to vzniklo příchodem nové major verze další knihovny třetí strany).

To, že se tento datagrid používá v každé druhé firmě, která jede na PHP, je celkem pochopitelné. Fakt to šetří tuny času. Myslím, že datagrid uspoří středním firmám statisíce každý měsíc. Malým méně. Dám vám insight – na féra řeknu, že za celý vývoj opensource datagridu jsem dosud inkasoval dohromady od 3 firem něco kolem 30 000 kč. Fun. To si dneska vyděláte za 3 dny práce, ne? :D

Momentálně jsem v situaci, kdy PHP není mým denním chlebem a pokud někdy datagrid potřebuji, nemám problém sáhnout po Naja 1, případně nette.ajax.js. Funguje to, tak co.

Navrhuji, chlapi, seberte se, kdo opravdu potřebujete nové featury a nové technologie, pomozte datagrid omladit. Klientská část datagridu stojí za vyližprtku od začátku. Plus se spoléháme na jQuery – uff, v 2022. Co by se mi líbilo:

  1. PR s vyházením jquery z JS datagridu, přepsání na vanilkový JS.
  2. PR s vyhozením nette.ajax.js, pojďme ponechat v další major verzi jen Naju
  3. PR s přidáním vanilkového datetime pickeru
  4. PR s přidáním vanilkového multiselect inputu

Kdyby se povedly tyto 4 body, můžeme říct byebye jQuery, nette.ajax.js a dokonce i Bootstrapu, pokud bude potřeba – mohou vzniknout jiné šablony pro jiné styly.

Kdo si bere který bod? Já tu budu, pracovat u kompu a sledovat mailového pošťáka, až do něj přiletí oznámení o dalším PR, kterému moc moc rád udělám review a třeba s něčím pomůžu. Díky za takové!

PS: stejně se mi neosvědčiolo propojení Nette a Hotwired Turbo. Funguje to parádně, o tom žádné, ale jen pro některé aplikace. Datagrid to nepokryje. :/ Tak asi skončím u Naja 2 a bod po bodu si budu pomalu plnit svůj seznam frontendových přání.

GN

NouF
Člen | 67
+
0
-

Ahoj,

btw. o jaké cenovce se tu bavíme?

Rád bych přispěl, ale nemám na to skill, abych mohl používat datagrid, musel jsem utéct k vlastnímu řešení, ale ani zdaleka to není tak dobré jako tento datagrid..

Croc
Člen | 270
+
+1
-

Dovolím si přidat také mojí zkušenost. Datagrid používéme už pěknou dobu a je opravdu pomocník. Z mého pohledu, dokud byl datagrid mimo contributte, vývoj a řešení problémů bylo výrazně rychlejší a nové verze nezpůsobovaly tolik problémů (tuším od verze 6), v minulosti funkčních věcech. Když jsme našli nějakou chybu, tak jsme ji nahlásili, v některých případech udělali i PR. Některé PR byly přijaty, jiné ne. Na některé chyby, na které jsme udělali PR, které nebylo přijato byla přidána cenovka. Nakonec jsme se rozhodli udělat fork datagridu a už přes rok jedeme na něm. Ten čas vyřešení chyby či přijetí PR byl prostě moc vysoký, hlavně když se jednalo o základní funkcionality, bez kterých byl datagrid nepoužitelný. Upřímě mám podobný pocit z více knihoven. Dokud byly mimo Contributte, tak to bylo fajn, ale pak rozvoj či dodělání umřelo a hlavně, pokud vyšla nová hlavní verze (např. kvůli php či nette), tak byla dost zabugovaná.

Neberte to jako nějaký hate, jen jsem napsal jak to cítím. Vím, že s časem to je většinou bídné (sám nic nestíhám a ve firmě taky máme co dělat).

Pavel Kravčík
Člen | 1195
+
+1
-

Zkusím popsat, proč PR nedokážu poslat například já. Přijde mi, že mi chybí insight, jakým směrem se chce ten balíček/nette vydat. Například PR přidáním vanilkového datetime pickeru. K tomu, aby to nebyl zbytečná práce si člověk musí odpověď na docela velkou spoustu otázek (má to smysl dávat do nette/forms, dokážu to napsat v kvalitě nette, není lepší použít vanilla picker kvůli překladům… etc).

Smysl by mi dávalo následující řešení:

  • Rozšířit nette/forms o DateInput (třeba takhle)
  • Upravit volání JS a generování addDateTime v datagridu, v podstatě jen použít jiný input a promazat data-att
  • Přidat možná možnosti min/man dle MDN

Funkční výsledek (nette3, bs5, grid6) by pak vypadal takhle

Možná nějak více specifikovat roadmapu s konkrétními technologii, co chce autor použít ve verzi 7?

Felix
Nette Core | 1197
+
0
-

Upřímě mám podobný pocit z více knihoven. Dokud byly mimo Contributte, tak to bylo fajn, ale pak rozvoj či dodělání umřelo a hlavně, pokud vyšla nová hlavní verze (např. kvůli php či nette), tak byla dost zabugovaná.

To je celkem zajimave. Nenapadlo me se na to takhle divat, tak presuneme datagrid mimo contributte a vsechno se tim vyresi, ne?

Pavel zase prejde zpet k dennimu programovani v PHP a bude delat na datagridu jako za mlada.

Neberte to jako nějaký hate, jen jsem napsal jak to cítím. Vím, že s časem to je většinou bídné (sám nic nestíhám a ve firmě taky máme co dělat).

Snazim se to tak nebrat. Spis me zajima co mame delat jinak a lepe. Aby jsi takovy pocit nemel. Mas napad?

Petr Parolek
Člen | 455
+
0
-

Ahoj, jsou tu i výjimky, kteří mají více volného času… @NouF mohl bys prosím ukázku, kde se problém projevuje s nejnovější Najou? Ideální poslat ukázkový jednoduchý projekt na GitHub. Aspoň se trochu naučím JS a TS, frontend je občas pro mě španělská vesnice. S Najou 2.x jsem nikdy nepozoroval nějaké chyby…

P.S. Pokud umíš JS, tak nám to půjde samo…

Čamo
Člen | 798
+
0
-

Ahoj, prosím vás ako funguje Ublaboo + Dibi? Konktrétne väzby 1:N a N:M.

Mám napríklad takýto select:

    public function getAllSuperLocations($approved = 0, $stats = 0, $from = '', $to = '')
    {
        $query = $this->db->select("sl.*")
            ->from('super_locations sl')
            ->where('sl.deleted=0')
            ->orderBy('location_order DESC, sl.city, sl.created DESC');

        if ($approved == 1) {
            $query->select("(select sum(number_of_display) from devices d where d.deleted = 0 and d.device_approved = 1 and d.active = 1 and d.super_location_id = sl.id) as device_count");
            $query->having('device_count > 0');
        } else {
            $query->select("(select sum(number_of_display) from devices d where d.deleted = 0 and d.super_location_id = sl.id) as device_count");
        }
        $query->select("(select sum(impressions_run) from campaigns_device_report cdr where sl.id = cdr.`global_location_id`) as products_show ");
        $query->select("(select group_concat(name SEPARATOR ', ') from locations l where sl.id = l.super_location_id) as locations ");

        return $query;
    }

Mám tam na poslednom riadku vnorený select + group_concat na tabuľku locations. Ak by som ale chcel filtrovať tie hodnoty v locations tak neviem ako. Ublaboo som doteraz používal s NextrasOrm čo fungovalo super. Dibi fakt neviem. Vie niekto poradiť? Tento kod plus setFilerText() mi vyhodí error unknown column locations in where clause

SELECT COUNT(*)
FROM (
SELECT sl.* , (
select sum(number_of_display)
from devices d
where d.deleted = 0 and d.super_location_id = sl.id) as device_count , (
select sum(impressions_run)
from campaigns_device_report cdr
where sl.id = cdr.`global_location_id`) as products_show , (
select group_concat(name SEPARATOR ', ')
from locations l
where sl.id = l.super_location_id) as locations
FROM super_locations sl
WHERE sl.deleted=0 AND (`sl`.`name` LIKE '%bory%') AND (`locations` LIKE '%char%')
ORDER BY location_order DESC, sl.city, sl.created DESC ) `data`

Díky.

Croc
Člen | 270
+
-3
-

@Felix

Felix napsal(a):

Upřímě mám podobný pocit z více knihoven. Dokud byly mimo Contributte, tak to bylo fajn, ale pak rozvoj či dodělání umřelo a hlavně, pokud vyšla nová hlavní verze (např. kvůli php či nette), tak byla dost zabugovaná.

To je celkem zajimave. Nenapadlo me se na to takhle divat, tak presuneme datagrid mimo contributte a vsechno se tim vyresi, ne?

Co já vim. Jen jsem chtěl poukázat na to, že jako pro člověka co nevidí pod pokličku, tak přechodem některých knihoven pod contributte to prostě na mě tak působilo. A nejen na mě. Netuším co se vše dělo a nedělo.

Pavel zase prejde zpet k dennimu programovani v PHP a bude delat na datagridu jako za mlada.

Neznám lidi co na tom dělají a neznám ani jejich život. Ale to prostě k tomu patří. Pokud člověk jde s kůží na trh a udělá nějakou open-source knihovnu, která je super, používá se a něco se změní (jak sám říkáš přestal řešit PHP) a najednou věci přestávají fungovat a na OPRAVY se dávají cenovky, tak se pak nesmí nikdo divit že se lidi ozvou.

Neberte to jako nějaký hate, jen jsem napsal jak to cítím. Vím, že s časem to je většinou bídné (sám nic nestíhám a ve firmě taky máme co dělat).

Snazim se to tak nebrat. Spis me zajima co mame delat jinak a lepe. Aby jsi takovy pocit nemel. Mas napad?

Hele mě je to jedno. Chtěl jsem jen slušně a v klidu napsat postřeh z vnějšku. Není nutné být pasivně agresivní.

Pavel Janda
Člen | 977
+
+6
-

@Croc rád bych podotkl, že se chyba neobjevila z ničeho nic, kvůli které by z ničeho nic přestal fungovat datagrid. Jedná se o BC break knihovny třetí strany. Nikdo tě nenutí používat Naja2. Naja1 funguje cajk. Proto mě to asi tolik netíží. O tom přeci opensource je, ne? Když potřebuje přidat něco nového někdo jiný, tak to prostě přidá. :)

Jedná se tedy o něco, co nebylo způsobeno přímo mnou. Rád s touto situací pomůžu, ale jaká je moje motivace? Pravděpodobně se k tomu v příštích měsících dosanu, nicméně nemám naspěch, ve starých pojektech stále používám nette.ajax.js a vše funguje. Za upgrade mi nikdo nezaplatí.

Přes to všechno, mám určitou motivaci v nových projektech úplně vyhodit jQuery a začít používat Naja – ideálně v nejnovější verzi. Nevím, jestli to bude trvat týden nebo rok, ale dostanu se tam.

Pokud někdo nechce čekat, feel free tu malou úpravu poslat..

Felix
Nette Core | 1197
+
+1
-

Pavel Kravčík napsal(a):
Možná nějak více specifikovat roadmapu s konkrétními technologii, co chce autor použít ve verzi 7?

Mrknem s @PavelJanda na to. Diky za postrceni. Obcas mam pocit, ze to nikdo necte a ono jo. :-)

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.