ublaboo/datagrid: mocný, rychlý, rozšiřitelný, hezký, anglicky dokumentovaný datagrid
- Tomáš Vodička
- Člen | 28
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()
- d@rkWolf
- Člen | 167
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
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
@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
@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
@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
@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
@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
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
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
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.ajax
a Naja 1.8.x
- NouF
- Člen | 67
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“
- Melebius
- Člen | 16
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]);
});
- theo
- Člen | 57
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
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
@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
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
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
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
@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
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
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
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
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
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)
- Pavel Janda
- Člen | 977
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
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
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
Je tam problém, od Naja 1.6+ to není podporované. Také jsem to nevyřešil, tak jsem si musel napsat vlastní „datagrid“
- Pavel Janda
- Člen | 977
@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
@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
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
@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:
- PR s vyházením jquery z JS datagridu, přepsání na vanilkový JS.
- PR s vyhozením nette.ajax.js, pojďme ponechat v další major verzi jen Naju
- PR s přidáním vanilkového datetime pickeru
- 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
- Croc
- Člen | 270
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
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 promazatdata-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
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
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
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
@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
@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..