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

n3t
Člen | 37
+
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ě.

nanuqcz
Člen | 822
+
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)

Failips
Člen | 54
+
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 :)

nanuqcz
Člen | 822
+
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?

Failips
Člen | 54
+
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.

rumcais1
Člen | 80
+
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

pavelinnuendo
Člen | 33
+
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.

Aleksandr
Člen | 14
+
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>
galab
Backer | 74
+
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?

Aleksandr
Člen | 14
+
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

galab
Backer | 74
+
0
-

A?

$grid->setItemsDetail(__DIR__ . '/../templates/datagrid/item-detail-grid.latte');
Aleksandr
Člen | 14
+
0
-

galab napsal(a):

A?

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

Tohle jsem taky zkoušel…

Aleksandr
Člen | 14
+
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"
  }
}
Pavel Janda
Člen | 977
+
0
-

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

Pavel Janda
Člen | 977
+
0
-

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

Aleksandr
Člen | 14
+
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;
}
Pavel Janda
Člen | 977
+
+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. 2020 22:24)

janvacek
Člen | 15
+
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. 2020 8:19)

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

jiri.pudil
Nette Blogger | 1028
+
+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. 2020 13:16)

Pavel Janda
Člen | 977
+
+2
-

@Semik .bind() fixed in 6.2.6.

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

TonnyVlcek
Člen | 31
+
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 :)

Pavel Janda
Člen | 977
+
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. 2020 10:50)

TonnyVlcek
Člen | 31
+
0
-

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

Failips
Člen | 54
+
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 :)

Pavel Janda
Člen | 977
+
+1
-

@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

chemikus
Člen | 47
+
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.

Gappa
Nette Blogger | 198
+
0
-

@chemikus

Bootstrap se autoloaduje pomocí composeru:

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

chemikus
Člen | 47
+
0
-

Gappa napsal(a):

@chemikus

Bootstrap se autoloaduje pomocí composeru:

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

Dobře, napsal jsem do příkazového řádku …

c:\xampp\htdocs\admin.deskovia.cz>composer dump-autoload

napsalo to …

Generating autoload files

A chyba stále stejná :(

Fatal error: Uncaught Error: Class 'App\Bootstrap' not found in C:\xampp\htdocs\admin.deskovia.cz\www\index.php

Co dělám špatně teď? :)

Gappa
Nette Blogger | 198
+
0
-

@chemikus

Pro kontrolu – ta odkazovaná část v composer.json v něm je? :)

chemikus
Člen | 47
+
0
-

Gappa napsal(a):

@chemikus

Pro kontrolu – ta odkazovaná část v composer.json v něm je? :)

Velmi dobrá poznámka :) Když se podívám do composer.json hned v kořenovém adresáři, tak je tam napsáno pouze:

{
    "require": {
        "ublaboo/datagrid": "^6.2"
    }
}

Takže nyní asi soutěžní otázka zní, proč? A jak tam dostat ten zbytek? :)

Gappa
Nette Blogger | 198
+
+1
-

chemikus napsal(a):

Gappa napsal(a):

@chemikus

Pro kontrolu – ta odkazovaná část v composer.json v něm je? :)

Velmi dobrá poznámka :) Když se podívám do composer.json hned v kořenovém adresáři, tak je tam napsáno pouze:

{
    "require": {
        "ublaboo/datagrid": "^6.2"
    }
}

Takže nyní asi soutěžní otázka zní, proč? A jak tam dostat ten zbytek? :)

Tam je jen a pouze tohle? Nic z nette? Jak se ti ho pak ale podařilo nainstalovat? :)

Btw, možná lepší založit nové vlákno někde na foru, téma se poněkud stočilo od datagridu někam úplně jinam.

chemikus
Člen | 47
+
0
-

Tam je jen a pouze tohle? Nic z nette? Jak se ti ho pak ale podařilo nainstalovat? :)

Ano ano, jen a pouze toto. Asi při instalaci dataGrid nějaká chybka. No, nicméně už vím, kde je problém, moc děkuju za pomoc!

Btw, možná lepší založit nové vlákno někde na foru, téma se poněkud stočilo od datagridu někam úplně jinam.

Možná navrhuji smazat všechny moje/tvoje komentáře, ať tím zbytečně nebereme místo?

Gappa
Nette Blogger | 198
+
0
-

chemikus napsal(a):

Tam je jen a pouze tohle? Nic z nette? Jak se ti ho pak ale podařilo nainstalovat? :)

Ano ano, jen a pouze toto. Asi při instalaci dataGrid nějaká chybka. No, nicméně už vím, kde je problém, moc děkuju za pomoc!

V tom případě by stálo za to se podělit o příčinu a řešení :)

Btw, možná lepší založit nové vlákno někde na foru, téma se poněkud stočilo od datagridu někam úplně jinam.

Možná navrhuji smazat všechny moje/tvoje komentáře, ať tím zbytečně nebereme místo?

Když už se to podařilo vyřešit, tak už to asi může zůstat – ale jak jsem psal výše, důležité je napsat řešení :)

Peca
Člen | 2
+
0
-

Ahoj,
prosím o radu,
existuje nějaká možnost, jak tento kód doplnit o třetí parametr funkce groupParamUpdate?

$grid->addGroupTextAction("Nazev")->onSelect[] = [$this, 'groupParamUpdate'];

abych se dostal k zavolání např.

groupParamUpdate($ids, $value, $treti_parametr)

Předem díky moc za rady!

pp
Člen | 48
+
0
-

Ahoj,
poprosil bych o radu,

V gridu zobrazuju seznam lokalit s atributy ‚latitude‘, ‚longitude‘.
Mam takovou predstavu, abych vyberem jedne lokality a zadanim parametru ‚maxdistance‘ prefiltroval zdroj dat a zobrazil jen ty, ktere spadaji do kruhu o zadanem polomeru a s vysledkem mohl dal pracovat.

Nabizi se mi k tomu „action“ – tam si zbrazim form k zadani parametru, vytahnu nova data, nastavim novy datasource a prekreslim grid.
Jenze pak pri jakekoli dalsi filtraci se mi datasource „prepise“ na ten puvodni (vsechny lokality).
Jak docilit toho, aby se novy datasource stal platnym (treba do resetu filteru) ?

Ivorius
Nette Blogger | 119
+
0
-

Lze v rámci inlineEdit nebo inlineAdd zobrazit chybu formuláře? Např. při definování Form::addRule a odeslání s chybnou hodnotou?

Datagrid v5.7.4

Aleksandr
Člen | 14
+
0
-

Zdravím,

chci se zeptat, zda by někdo poradil, jak udělat custom filtraci pro něco co má custom column a z toho plyne i custom render?

Pavel Janda
Člen | 977
+
0
-

@Aleksandr Vše by mělo být popsáno zde:

Renderer: https://contributte.org/…columns.html#…
Custom filter: https://contributte.org/…filters.html#…

Tímhle vyrenderuješ úplně custom data a aplikuješ úplně custom podmínku pro filtraci nad tím sloupcem.

Kamil Valenta
Člen | 752
+
0
-

Mám v gridu sloupec s datem a časem, chci nad ním filtrovat „od – do“:

$grid->addColumnDateTime('timestamp', 'Datum a čas')
            ->setFormat('d.m.Y H:i')
            ->setSortable()
            ->setFilterDateRange();

Funguje to dobře, problém nastane ve chvíli, kdy se mi filtry triggerují automaticky např. po 3 znacích.
Chci např. do filtru napsat datum „22.01.2020“, ale jakmile zadám „22.“, ajax vykopne exceptionu, protože datagrid/src/Utils/DateTimeHelper.php#tryConvertToDate() se pokusí nachroustat „22.“, což zatím ještě neodpovídá žádnému formátu data, takže to propadne až na: throw new DataGridDateTimeHelperException();

Takže v důsledku ani nemám možnost to datum dopsat do úplné podoby, ačkoliv bych chtěl :)

Vrátit null místo throw new DataGridDateTimeHelperException() není možné, protože pak to zahučí na volání tuším ->setFormat() on null. Zatím to řeším tak, že místo throw new DataGridDateTimeHelperException() vracím new \DateTime.

Zdá se to být jako možné řešení, ale nevím, zda to nemá někde jiné konsekvence.

Editoval kamil_v (29. 1. 2020 11:55)

Gappa
Nette Blogger | 198
+
0
-

@kamil_v Tohle by vyřešil nějaký JS kalendář, ne? :)

Kamil Valenta
Člen | 752
+
0
-

@Gappa ano i ne, je mnoho uživatelů (a já je chápu), kteří raději ťuknou do klávesnice, než proklikávají kalendář, je to mnohem rychlejší

Aleksandr
Člen | 14
+
0
-

Ahoj,

chci se zeptat jak dát tlačítko Reset filtrů nahoru, myslim jak to vyřešit nejčistejc (css, toolbar tlačítko nebo…)?
 – chci, aby se zobrazovalo jenom nahoře a jenom za podmínky, kdy je filter vyplněn

Editoval Aleksandr (11. 2. 2020 11:39)

Pavel Janda
Člen | 977
+
+1
-

@Aleksandr Tlačítko se teď zobrazuje jen a pouze v případě, kdy se něco ve filtru vyplněno. Umístění budeš muset upravit asi sám v poděděné šabloně.

Šaman
Člen | 2632
+
0
-

Nevím, jestli to tu už někdo řešil, ale zatím hledám marně a stejné problémy jsou i v demu:

  • Když kliknu na další stránku, změní se stránka a adresa. Ale když pak použiju jen tlačítko zpět, změní se adresa, ale stránka se nepřekreslí.
  • Když jednou změním počet řádků a pak ho vrátím na defaultní, tak stejně zůstává v adrese &grid-perPage=20. Stejně tak když adesu ručně promažu od parametrů, tak nenaskočí defaultní hodnoty, ale znovu se tam objeví.

A mimochodem, stránku http://ublaboo.paveljanda.com/datagrid/ mi Chrome odmítá otevřít kvůli neplatnému certifikátu. Nejspíš se vynutí https a ten pak neprojde přes certifikát. Použití http v adrese neprojde.

Editoval Šaman (17. 2. 2020 14:13)

Pavel Janda
Člen | 977
+
0
-

@Šaman dokumentace již jede na: https://contributte.org/…te/datagrid/

Na https mrknu, mělo by to pak stejně jen přesměrovat na contributte.org. Dík za info

Šaman
Člen | 2632
+
0
-

Jj, tuhle dokumentaci používám, ale ty dva problémy výše se mi nepodařilo vyřešit a jsou i v demu.
A propo, Datagrid používá nette.ajax.js, který je myslím už neudržovaný(?). Nebo bude fungovat i jinými knihovnami pro zajaxování Nette?

Pavel Janda
Člen | 977
+
+1
-

DataGrid již umí používat i knihovnu Naja.

TonnyVlcek
Člen | 31
+
0
-

TL;DR:
Po úspěšném zpracování inline editace potřebuji aby datagrid „přeskočil“ a otevřel editaci pro jiný (třeba následující) řádek.


Rád bych to provedl v jednom requestu a na serveru (tj. bez nutnosti mít js který třeba provede kliknutí na tlačítko editace).
Procházel jsem callstack a jako nejlepší kandidát se mi zdál callback onCustomRedraw – provádí se úplně na konci zpracování inlineEditu, a tak jsem doufal, že tam budu schopný zavolat handle dalšího inlineEditu:

$grid->getInlineEdit()->onCustomRedraw[] = function () {
			$this->grid->redrawItem(18);
			$this->grid->handleInlineEdit(19);
		};

(jen příklad, reálné id řádků bych si odněkud snad vytáhnul)

Výsledek:
https://gifyu.com/image/74L8
Změny se uloží, další řádek je editovatelný, ale původní řádek zůstane také editovatelný.

Je tohleto správná cesta, a pokud jo, jak donutit původní řádek aby se zavřel? Nebo, napadá někoho lepší způsob jak na to?