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

před měsícem

n3t
Člen | 26
+
0
-

Cca před třemi týdny jsem rozjížděl projekt na Nette 3 / DataGrid 6, můj první projekt v Nette a v celku bez problémů jsem Datagrid rozchodil. Pravda nepoužil jsem bower, ale skripty a CSS jsem si pořešil ručně.

před měsícem

nanuqcz
Člen | 823
+
0
-

@n3t Díky, tohle mě konečně nakoplo správným směrem. Takže v čem byl problém:

  1. Kvůli tomu, že pořád používám Nette 2.4, mi composer stáhl Datagrid ve verzi 5.7.4.
  2. O tom Bower samozřejmě nevěděl, a tak příkazem bower install ublaboo-datagrid stáhl nejnovější JS+CSS (pro verzi 6.2.5).

Oprava / úprava instalace pro verzi 5.* tedy spočívá ve stáhnutí staršího bower balíčku:

bower uninstall --save ublaboo-datagrid
bower install --save ublaboo-datagrid@5 happy@1 bootstrap-select font-awesome@4

a úpravě cest k JS+CSS souborům tak, aby pasovaly. Taky doporučuju downgradovat happy.js (v nové verzi chybí adresář dist), doinstalovat bootstrap-select a natáhnout font-awesome (verzi 4, protože s 5 a výše není tato verze DataGridu v základu kompatibilní).

Oprava suma sumárum v jednom commitu:
https://gitlab.com/…830a984f9049?w=1

Editoval nanuqcz (11. 12. 2019 17:03)

před měsícem

Failips
Člen | 45
+
0
-

Ahoj,

mám stránku s tlačítkami, na ktoré keď sa klikne, tak sa cez JS ajaxom zavolá handle metóda v presenteri. Tá vykoná istú akciu a zmenia sa dáta slúžiace na filtrovanie obsahu načítavaného v datasource gridu. Následne sa zavolá $this[‚myGrid‘]->redrawControl() a očakávam, že sa obsah v tabuľkách zmení. K tomu však nedôjde aj napriek domu, že výsledné dáta vo funkcii build sa zmenili (zistené pomocou volania bdump). {control myGrid} nie je obalený v žiadnom snippete ani v snippetArea.

Nevie niekto ako to spojazdniť? Ďakujem :)

před měsícem

nanuqcz
Člen | 823
+
0
-

@Failips Datagrid používám krátce, ale není ta metoda $this['myGrid']->reload()? Co pak ten AJAX požadavek vrací prohlížeči za data, když se podíváš do konzole prohlížeče?

před měsícem

Failips
Člen | 45
+
0
-

nanuqcz napsal(a):

@Failips Datagrid používám krátce, ale není ta metoda $this['myGrid']->reload()? Co pak ten AJAX požadavek vrací prohlížeči za data, když se podíváš do konzole prohlížeče?

Skúšal som aj reload() s rovnakým výsledkom. To isté platilo aj pre obalenie control do snippetu/snippetArea a následným redraw snippetu. V build funkcii boli vždy nové data avšak stránka sa neprekreslila. Nakoniec som prišiel na chybu. Spôsobovalo to volanie handleFunkcie pomocou klasického jQuery AJAXu, a teda keď som ho nahradil Nette AJAXom tak už všetko išlo ako malo. Takže opäť ďalšia chyba z nepozornosti.

před 29 dny

rumcais1
Člen | 79
+
0
-

Ahoj,
nevíte jak udělat, aby se group action otevřelo v novém okně. Mám tam pdfResponse a potřebovali by to do nového okna. Díky

před 17 dny

pavelinnuendo
Člen | 13
+
0
-

Asi mi odpovíte, že je to špatný použití, ale lze při inline editaci nějak zalomit řádek? Respektive mám sloupců víc, než se mi pohodlně vejde na stránku a potřeboval bych je nějak inline editovat, tedy ideálně aby byl záznam na dva řádky. Díky.

před 16 dny

Aleksandr
Člen | 10
+
0
-

Zdravím mám problém s Datagrid items
nemůžu zobrazit jakýkoliv ItemDetails, přitom AJAX request proběhne a např. při sortování funguje…
Verze datagridu: 6.2.5
Verze Nette 3.0
Takový nepodstatný detail, co by nic neměl ovlivnit, data si táhám z API a ne z DB
Druhy nepodstatny detail, v zoufalosti jsem si docesne pustil online knihovny z DEMA

Presenter:

public function createComponentDatagrid()
  {
    $grid = new DataGrid;

    $grid->setDataSource($this->userManager->getUsers());
    //columns
    $grid->addColumnNumber('id', 'ID');
    $grid->addColumnText('name', 'Jmeno')->setSortable();
    $grid->addColumnText('superuser', 'Admin');
    $grid->addColumnText('email', 'E-mail');
    $grid->addColumnDateTime('lastLoginDate', 'Naposled přihlašen');
    $grid->addColumnStatus('state', 'Status');
    //filters
    $grid->addFilterSelect('state', 'Status', State::ALL);
    $grid->addFilterText('name', 'Jmeno');
    $grid->setItemsDetail();

    $grid->setTemplateFile(__DIR__ . '/../templates/datagrid/item-detail-grid.latte');

    return $grid;
  }

template pro detail, ostatní věci mi měnit přes {block} jdou, ale detail se jako jedinej nezobrazuje

{extends $originalTemplate}
{block detail}
	<button class="btn btn-default btn-secondary btn-sm">Just a button</button>
{/}

template Presentru

{block content}
<div class="container">
  <h1 n:block="title" class="text-center">Titulek nefunkcni stranky</h1>
    {control datagrid}
</div>

před 16 dny

galab
Člen | 37
+
0
-

Aleksandr napsal(a):

Zdravím mám problém s Datagrid items
nemůžu zobrazit jakýkoliv ItemDetails, přitom AJAX request proběhne a např. při sortování funguje…

bower update jsi dělal?

před 16 dny

Aleksandr
Člen | 10
+
0
-

galab napsal(a):

Aleksandr napsal(a):

Zdravím mám problém s Datagrid items
nemůžu zobrazit jakýkoliv ItemDetails, přitom AJAX request proběhne a např. při sortování funguje…

bower update jsi dělal?

Jo zkoušel jsem to tahat i přes bower a nikdy se nic nezmění…ChromeDev konzole je stále bez chyb

před 16 dny

galab
Člen | 37
+
0
-

A?

$grid->setItemsDetail(__DIR__ . '/../templates/datagrid/item-detail-grid.latte');

před 16 dny

Aleksandr
Člen | 10
+
0
-

galab napsal(a):

A?

$grid->setItemsDetail(__DIR__ . '/../templates/datagrid/item-detail-grid.latte');

Tohle jsem taky zkoušel…

před 13 dny

Aleksandr
Člen | 10
+
0
-

Tak jsem tady s dalším reportem, kdyby někdo prosím dokázal pomoct…
Stáhnul jsem si playground ukázku z GITu se vším všudy…a pořád mi nejde zobrazit Detail u row.
V ChromeDevu jsem si prohlížel jaký data vrací online ukázka a můj localhost s playgroundem

Tohle je localhost s repositařem z playgroundem

{
  "_datagrid_toggle_detail": "1",
  "_datagrid_name": "grid",
  "state": {
    "grid-page": null,
    "grid-perPage": "100",
    "grid-sort": {
      "email": "ASC"
    },
    "grid-filter": null
  }
}

Tohle je online ukázka

{
  "_datagrid_toggle_detail": "29",
  "_datagrid_name": "grid",
  "state": {
    "grid-page": null,
    "grid-sort": null,
    "grid-filter": null
  },
  "_datagrid_redrawItem_class": "",
  "_datagrid_redrawItem_id": 29,
  "snippets": {
    "snippet-grid-item-29-detail": "\t\t\t\t\t\t\t\t\t\n\n\n\t\t\t\t\t\t\t\t\t\t\t<td colspan=\"5\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"item-detail-content\">\n\t<h3>29 - Beautiful Boar <small>7. 7. 1987 12:30:12</small></h3>\n\n\t<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur vitae diam non enim vestibulum interdum. Nulla quis diam. Integer in sapien. Nullam dapibus fermentum ipsum. Curabitur bibendum justo non orci. Etiam neque. Nullam dapibus fermentum ipsum. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Etiam posuere lacus quis dolor. Aliquam ornare wisi eu metus. Nulla non lectus sed nisl molestie malesuada. Vivamus ac leo pretium faucibus. Aliquam ante. Aliquam erat volutpat.</p>\n\n\t<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur vitae diam non enim vestibulum interdum. Nulla quis diam. Integer in sapien. Nullam dapibus fermentum ipsum. Curabitur bibendum justo non orci. Etiam neque. Nullam dapibus fermentum ipsum. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Etiam posuere lacus quis dolor. Aliquam ornare wisi eu metus. Nulla non lectus sed nisl molestie malesuada. Vivamus ac leo pretium faucibus. Aliquam ante. Aliquam erat volutpat.</p>\n\n\t<button class=\"btn btn-default btn-secondary btn-sm\">Just a button</button>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</td>\n"
  }
}

před 12 dny

Pavel Janda
Backer | 883
+
0
-

@Aleksandr No jo, taky se mi to děje. Hodím na to oko

před 12 dny

Pavel Janda
Backer | 883
+
0
-

@Aleksandr Hm, tak jsem měl chybu v něčem jiném 😅všechno mi funguje OK

před 12 dny

Aleksandr
Člen | 10
+
0
-

Ahoj Pavle (@PavelJanda),

mám ještě jeden dotaz. Jak získám id aktulní row, prosím, potřebuji to do actiony.

public function create(): DataGrid
{
    $grid = $this->dataGrid->create();

    //columns
    $grid->addColumnNumber('id', 'ID')
        ->setSortable();
    $grid->addColumnText('name', 'Jméno')
        ->setSortable()
        ->setFilterText();
    $grid->addColumnText('superuser', 'Admin')
        ->setSortable();
    $grid->addColumnText('email', 'E-mail')
        ->setSortable()
        ->setFilterText();
    $grid->addColumnDateTime('lastLoginDate', 'Naposled přihlášen')
        ->setSortable();
    $grid->addColumnText('state', 'Status')
        ->setSortable()
        ->setReplacement(State::ALL)
        ->setFilterSelect(State::ALL);
    $multiAction = $grid->addMultiAction('subjects', 'Subjekty');

    foreach ($userSubjects as $subject) {
        $multiAction->addAction($this->getUserSubject($semChciIDaktualniROW), $subject, 'this', ['id']);
    }

    //sets details for user
    $grid->setDataSource($this->userManager->getUsers());

    return $grid;
}

před 12 dny

Pavel Janda
Backer | 883
+
+1
-

@Aleksandr Asi si bude# muset udělat vlastní renderer callback, do kterého ti přijde celá row.

https://contributte.org/…columns.html#api

Editoval Pavel Janda (9. 1. 22:24)

před 7 dny

janvacek
Člen | 6
+
0
-

Ahoj,

chci se zeptat, je tu možnost ručně určit, kdy se má datagrid inicializovat? Konkrétně tedy datagrid.js, kdy potřebuji aby se načetl až po tom, co se načte Naja v údálosti DOMContentLoaded

Díky :)

Editoval janvacek (15. 1. 8:19)

před 6 dny

semi
Člen | 4
+
+1
-

Ahoj,

řeším asi něco podobného jako @janvacek
Mám v projektu Nette 3.0, Naja 1.7.0, a snažím se rozchodit Ublaboo datagrit 6.0.1

dostávám se k chybě

TypeError: naja.addEventListener(...).bind is not a function

Předpokládám, že se to snaží zaregistrovat listener dřív, než je Naja inicializovaná?

před 6 dny

jiri.pudil
Člen | 890
+
+2
-

Předpokládám, že se to snaží zaregistrovat listener dřív, než je Naja inicializovaná?

Předně je tam podle mě chyba. Listenery můžeš registrovat teoreticky kdykoliv, s výjimkou init, kterážto událost se vyvolává jen v momentě, kdy se Naja inicializuje. Beru zpět. Pravda to sice je, ale v datagrid.js se listenery navěšují v extensioně, ta musí být zaregistrovaná před inicializací.

Editoval jiri.pudil (15. 1. 13:16)

před 6 dny

Pavel Janda
Backer | 883
+
+2
-

@Semik .bind() fixed in 6.2.6.

před 5 dny

semi
Člen | 4
+
0
-

@PavelJanda @jiripudil Díky za odpověď, povýšení verze pomohlo. Nepochopil jsem, proč se mi composerem nainstalovala ta stará verze datagridu, ikdyž jsem měl v composer.json verzi ^6.2

před 5 dny

TonnyVlcek
Člen | 32
+
0
-

TL;DR:
Používáte někdo (ideálně na produkci) editovatelný datagrid s 30+ sloupci?


Na projektu kde používáme contributte/datagrid téměř na všechno, přišlo oddělení obchoďáků s iniciativou, které říkají „Excelifikace“. Cílem je spravovat entity s relativně velkým množstvím parametrů v rámci jednoho inline-editovatelného datagridu. Některé sloupce budou potřebovat callback rendery atp…

Než se pustím do nějakého testování a „benchmarků“, tak jsem se chtěl zeptat tady, máte-li s tím někdo zkušenost. Případě nějaké zkušenosti, jak jste se s něčím podobným vypořádali?

Díky moc :)

před 5 dny

Pavel Janda
Backer | 883
+
0
-

@TonnyVlcek Myslím, že by to nemusel být problém. Dělal jsem i docela velké gridy, šlo to easy.
Spíš bych se zamyslel nad tím, abyste neměli v rámci kódu „nepořádek“. Třeba bych factory gridu rozdělil mezí víc factories (na akce, na sloupce, atd).
Nicméně výkonnostně by to asi neměl být problém. Navíc inline edit callback se volá pouze pro jednu položku jednoho sloupce, easy..

Spíš zkus obchoďákům říct, ať pošlou pořádnou donation, ať se zas vývoj datagridu pohne. :D Můžeš to obhájit třeba tak, že se opraví nějakej superzávažnej bug, kterej vám hrozně brání v práci. :D

Každopádně, až to budete mít hotovo, poděl se o výsledky benchmarku! Rád se na ně mrknu, pokud to nebude tajné.

Editoval Pavel Janda (17. 1. 10:50)

před 5 dny

TonnyVlcek
Člen | 32
+
0
-

@PavelJanda
Pecka, díky!
Nějak to zkusím ukecat ;) A dám vědět, jak to nakonec dopadne.

před 12 hodinami

Failips
Člen | 45
+
0
-

Ahoj, chceli by sme urobiť ukladanie stavu jednej tabuľky (grid state) per užívateľ. Ide o to, že po prihlásení by užívateľ mal tabuľku v takom rozložení ako ju naposledy zanechal. Pôvodný nápad bol vytiahnuť z gridu jeho stav napr. vo forme JSONu a uložiť to do databáze, následne pri prihlásení a otvorení stránky s touto tabuľkou by sme načítali tieto hodnoty z DB.

Vie niekto o spôsobe, ktorým pri každej zmene rozloženia (filtre, zobrazené stĺpce, max. počet riadkov) dalo získať tieto hodnoty nejakým jednoduchým spôsobom? Vďaka :)

před 9 hodinami

Pavel Janda
Backer | 883
+
0
-

@Failips Myslím, že to úplně nesouvisí s datagridem, ale jako nejjednodušší způsob vidím toto: udělal bych si nějaký session handler, který budu umět dobře ovládat (já s oblibou používám https://github.com/…/Handler.php). Těsně před odhlášením uživatele bych vzal jeho data session týkající se datagridu/ů a to bych někam uložil. A po přihlášení bych to zase do session prdnul. Asi bude muset někdo víc zasvěcený říct, jestli je to blbý nápad či nikoliv. :P

před 7 hodinami

chemikus
Člen | 44
+
0
-

Ahoj,
prosím pomoc, jsem zoufalý! :-)

Měl jsem funkční administraci pro můj projekt. Používám poslední dostupné Nette 3.0 (staženo přes composer cca 3 týdny zpět). Nainstaloval jsem si tam přes composer ještě pár plug-inů (kdyby/translation a tomaj/nette-bootstrap-form). Vše mi fungovalo v pořádku.

Dnes jsem přes příkaz composer require ublaboo/datagrid stáhl tenhle DataGrid a po aktualizaci prohlížeče (aniž bych cokoli kdekoli měnil ve zdrojových souborech) mám následující chybovou hlášku:

Fatal error: Uncaught Error: Class 'App\Bootstrap' not found in C:\xampp\htdocs\admin.deskovia.cz\www\index.php:7 Stack trace: #0 {main} thrown in C:\xampp\htdocs\admin.deskovia.cz\www\index.php on line 7

Což mě teda tak trochu navádí k tomu, že App\Bootstrap nebylo nalezeno, ale Bootstrap.php soubor je v namespace App

<?php
declare(strict_types=1);
namespace App;
use Nette\Configurator;
class Bootstrap {
...
?>

Tak já nevím co mám zle :( Můžete mi prosím někdo hodit pomocné lano, jak zprovoznit DataGrid / nebo odinstalovat, abych měl zas zpět funkční administraci? :)

PS: composer uninstall --save ublaboo/datagrid nefunguje a vyhodí hlášku [Symfony\Component\Console\Exception\CommandNotFoundException] Command "uninstall" is not defined.

před 7 hodinami

Gappa
Člen | 102
+
0
-

@chemikus

Bootstrap se autoloaduje pomocí composeru:

Zkusit tedy dát něco jako composer dump-autoload? :)