ublaboo/datagrid: mocný, rychlý, rozšiřitelný, hezký, anglicky dokumentovaný datagrid
- MW
- Člen | 626
Pavel Janda napsal(a):
@MW Pokud nepůjde alias, tak callback: https://ublaboo.org/datagrid/column#…
Mohu poprosit o nakopnutí, jak bych mohl upravit ten SUM?
Předpokládám, že mu budu muset místo názvu sloupce podstrčit celé
„cena/CONCAT(“1.„,dph)“ .. ale není mě jasné jak.
Moc díky
Editoval MW (24. 1. 2018 20:39)
- Pavel Janda
- Člen | 977
@MW
$grid->setColumnsSummary(['price'], function($item): float {
return $item->price * (1 + $item->dph);
})->setRenderer(function($sum): string {
return 'Cena: ' $sum . ' Kč s DPH';
});
- Karlito
- Člen | 18
Ahoj, zkouším ublaboo a narazil jsem na problém s překreslováním
jedním řádkem.
Mám normálně columnStatus ano/ne a při změně volám funkci která si do DB
zavolá pro danou instanci a tu změní a uloží a pak dávám
$this['moderatorsGrid']->redrawItem($id);
a to mi hodí chybu
Cannot use object of type App\Model\Entities\Moderator as array
ale vůbec nevím kde bych to mohl špatně používat
s
$this['moderatorsGrid']->reload();
to funguje
Dále filter se mi nedaří rozjet nad enitami.
Kod
$grid->addColumnText('user.fullName', 'Uživatel')->setFilterText(['user.fullName']);
mi vrací
Component name must be non-empty alphanumeric string, 'user.fullName' given
Editoval Karlito (28. 1. 2018 15:19)
- ZDDorS
- Člen | 6
Ahoj,
používám ublaboo datagrid a potřeboval bych získat SQL nebo DQL dotaz,
kterým se vytahují z databáze data, a to včetně filtrů a řazení, které
si uživatel v datagridu nastavil.
Jde o to, že uživatel si v rozsáhlém datagridu vyfiltruje, co potřebuje,
uloží si svůj „pohled“ a ten bude později sloužit k další práci
s daty, při které už datagrid nebude figurovat.
Jako zdroj dat používám Doctrine.
Nejblíž k výsledku, jsem se dostal přes
$grid->getDataSource()->getQuery()->getSql()
, ale to
vrací dotaz bez filtrů a řazení. Dokázal byste prosím někdo poradit, jak
získat dotaz celý?
- Pavel Janda
- Člen | 977
@ZDDorS Výsledný dotaz se tvoří až při renderování. Zavěs si
event handler do DataGrid::$onRedner
, nebo jak se ten event
jmenuje. :)
Btw, je jich tam víc.
Editoval Pavel Janda (30. 1. 2018 16:01)
- ZDDorS
- Člen | 6
Pavel Janda napsal(a):
@ZDDorS Výsledný dotaz se tvoří až při renderování. Zavěs si event handler do
DataGrid::$onRedner
, nebo jak se ten event jmenuje. :)Btw, je jich tam víc.
Děkuju za nasměřování. Bohužel to úplně nezabralo. Zkoušel jsem
event handler zavěsit na onRender a na onFiltersAssembled, ale to taky ještě
vrací dotaz bez filtrů a řazení. Jinou vhodnou událost jsem nenašel.
Zkoušel jsem ve tvém zdrojáku přehodit
/**
* Invoke possible events
*/
$this->onRender($this);
až za
$items = Nette\Utils\Callback::invokeArgs(
[$this->dataModel, 'filterData'],
[
$this->getPaginator(),
$this->createSorting($this->sort, $this->sort_callback),
$this->assembleFilters(),
]
);
, což by pro mé použití fungovalo tak, jak potřebuju.
Nenapadá tě prosím ještě nějaká jiná možnost, jak to udělat. Mě totiž ne. :(
- sevca79
- Člen | 55
Ahoj,
jak prosím udělat aby text na tlačítkách akcí byl dle nějakýho sloupce
z datasource??
Mám něco jako seznam zápasů (hráč1, hráč2) a chci u toho seznamu
vždy dvě tlačítka s akcema (vyhrál Pavel) (vyhrál Radim)
a na dalším řádku akce třeba (vyhrál Tomáš) (vyhrál Martin)
prostě dle toho co je konkrétním řádku..nechce se mi tam mít na každým řádku (vyhrál hráč1) (vyhrál hráč2)
díky za nakopnutí
–sevča
- Pavel Janda
- Člen | 977
@ZDDorS Můžeš podědit DataGrid
a použít eventy:
$this->dataModel->onBeforeFilter[] = [$this, 'beforeDataModelFilter'];
$this->dataModel->onAfterFilter[] = [$this, 'afterDataModelFilter'];
$this->dataModel->onAfterPaginated[] = [$this, 'afterDataModelPaginated'];
- Pavel Janda
- Člen | 977
@sevca79 Použij vlastní renderer u Action
. Do textu
tlačítka pak dej $item->player1
..
- Petr Parolek
- Člen | 455
Ahoj,
jak mám prosím nahradit mezeru za nedělitelnou mezeru v datu?
Toto mi nefunguje:
<?php
$grid->addColumnDateTime('date', 'Datum')
->setRenderer(function($item) {
return str_replace(' ', ' ', $item->date->format("j. n. Y"));
});
//->setFormat('j. n. Y')
?>
EDIT
vyřešenoo
<?php
return str_replace(' ', "\xc2\xa0", $item->date->format("j. n. Y"));
?>
Editoval ppar (31. 1. 2018 16:42)
- Pavel Janda
- Člen | 977
@ppar To první by fungovalo, kdybys nastavil template escaping na false u toho sloupce.
- sevca79
- Člen | 55
Ahoj,
ještě jedna věcička u těch mých zápasů..
mám tabulku hřišť, která má mimo jiné dva sloupce pozice v turnaji
(first_position_id, second_position_id) – zápas na hřišti je prostě mezi
dvěma pozicemi v turnaji
tyto dva sloupce ukazují cizím klíčem do tabulky pozic v turnaji
tabulka pozic v turnaji má strukturu něco jako (id, player_id), takže je jasné, že zase ukazuje do tabulky hráčů
a tabulka hráčů má něco jako (id, jmeno, prijmeni)
a já teď chci udělat z toho jednoho zápasu jeden sloupec, který mi ale
bude i umožňovat filtrovat
mám tedy
<?php
$grid->addColumnText('match', 'Zápas', ['first_position_id', 'second_position_id'])
->setRenderer(function ($item) {
//pres refy vytahnu jmeno a prijmeni obou hracu
return $firstPlayer . " - " . $secondPlayer;
});
$grid->addFilterText('match', '',
['first_position_id.player_id.name', 'first_position_id.player_id.surname',
'second_position_id.player_id.name', 'second_position_id.player_id.surname'])
?>
ve sloupci se mi normálně zobrazí zápas např. Pavel Novák – Petr
Novotný
avšak, když chci něco vyfiltrovat, tak mi to hodí chybovou hlášku
Table alias ‚player_id‘ from chain ‚.second_position_id.player_id‘ is already in use by chain ‚.first_position_id.player_id‘. Please add/change alias for one of them.
jak tam prosím mám hodit ten alias či co??
díky
- jAkErCZ
- Člen | 322
Zdravím,
mám takový problém ale absolutně si nevím rady co s tím…
https://ctrlv.cz/…/01/NOhE.png
a kód
<?php
public function createComponentArticleGrid($name) {
$grid = new DataGrid($this, $name);
$grid->setPrimaryKey('article_id');
$grid->setDataSource($this->articleRepository->getArticles());
$grid->addColumnNumber('article_id', 'id.language')
->setSortable();
$grid->addColumnText('title', 'id.name')
->setSortable()
->addAttributes(['class' => 'text-center']);
$grid->addColumnText('url', 'id.mail')
->setSortable()
->addAttributes(['class' => 'text-center']);
/** Set item per page list */
$grid->setItemsPerPageList([self::ITEMS_PER_PAGE], FALSE); /** Nastavení počtu záznamu na stránce, FALSE zruší možnost vybrat všechny záznamy */
}
?>
Nevíte někdo kde jsem udělal chybu nebo co dělám špatně? Nikdy jsem s tím to neměl problém a vše fungovalo..
Díky
Editoval jAkErCZ (1. 2. 2018 11:11)
- Pavel Kravčík
- Člen | 1195
@jAkErCZ: Máš to tam napsané. V session máš uloženo nastavení
filtru article_id
a v gridu ten filter nemáš. Smaž session,
vytvoř filtr nebo pravděpodobně máš stejně pojmenovaný filtr ještě
někde. Případně nepoužíváš vhosts.
- Petr Parolek
- Člen | 455
Pavel Janda napsal(a):
@ppar To první by fungovalo, kdybys nastavil template escaping na false u toho sloupce.
Myslíš vytvořit latte soubor pro sloupec? Nebo jak vypnout escape?
- Mistrfilda
- Člen | 76
@ppar takto:
<?php
$grid->addColumnText('name', 'Label')->setTemplateEscaping(FALSE);
?>
Editoval Mistrfilda (1. 2. 2018 13:06)
- sevca79
- Člen | 55
Zkusím to ještě jednou, pač hned po mé otázce, se tu nahromadilo pár dalších otázek a odpovědí, tak sem byl možná přehlídnut..
mám tabulku hřišť, která má mimo jiné dva sloupce pozice v turnaji
(first_position_id, second_position_id) – zápas na hřišti je prostě mezi
dvěma pozicemi v turnaji
tyto dva sloupce ukazují cizím klíčem do tabulky pozic v turnaji
tabulka pozic v turnaji má strukturu něco jako (id, player_id), takže je jasné, že zase ukazuje do tabulky hráčů
a tabulka hráčů má něco jako (id, jmeno, prijmeni)
a já teď chci udělat z toho jednoho zápasu jeden sloupec, který mi ale
bude i umožňovat filtrovat
mám tedy
<?php
$grid->addColumnText('match', 'Zápas', ['first_position_id', 'second_position_id'])
->setRenderer(function ($item) {
//pres refy vytahnu jmeno a prijmeni obou hracu
return $firstPlayer . " - " . $secondPlayer;
});
$grid->addFilterText('match', '',
['first_position_id.player_id.name', 'first_position_id.player_id.surname',
'second_position_id.player_id.name', 'second_position_id.player_id.surname'])
?>
ve sloupci se mi normálně zobrazí zápas např. Pavel Novák – Petr
Novotný
avšak, když chci něco vyfiltrovat, tak mi to hodí chybovou hlášku
Table alias ‚player_id‘ from chain ‚.second_position_id.player_id‘ is already in use by chain ‚.first_position_id.player_id‘. Please add/change alias for one of them.
jak tam prosím mám hodit ten alias či co??
díky
- cujan
- Člen | 410
Caute, potreboval by som tahat data cez dve tabulky
tabulky:
clenoviaKurzu(id, idKurz, idOsoba)
kurz(id, idNazovKurzu, datumKurzu) idNazovKurzu odkazuje na tabulku
nazovKurzu(id, nazov)
ako zobrazim do stlpca nazvy vsetkych kurzov, pre konkretneho cloveka?
samozrejme vsade su nastaven cudzie kluce…
datumKurzu nemam problem zobrazit…
vdaka
- Petr Parolek
- Člen | 455
Pavel Janda napsal(a):
@H0w4rd DataGrid podporuje složitější agregace. Jako jediná featura datagridu není zdokumentovaná.
$grid->addAggregationFunction( new Ublaboo\DataGrid\AggregationFunction\FunctionSum('price', IAggregationFunction::DATA_TYPE_FILTERED) )
Druhým parameterm konstruktoru třídy
FunctionSum
určuješ, zda se mají brát v potaz data všechny, nebo jen vyfiltrované výsledky, a nebo pouze jedna stránka.Můžeš si s tím zkusit pohrát. Všechno je v traitě
Ublaboo\DataGrid\AggregationFunction\TDataGridAggregationFunction
.FunctionSum
je jediná – ukázková – implementace interfacuIAggregationFunction
. Můžeš si napsat své a pak je předat datagridu.
@H0w4rd
Taky jsem to nedávno řešil a vyřešil :)
Editoval ppar (10. 2. 2018 11:34)
- raketoplan2005
- Člen | 147
Ahoj,
používám Doctrine a mám dejme tomu entity Dům a Pokoj (kuchyň, obývací pokoj, toaleta, jídelna…). Z entity dům není vazba do pokoje (přistupuje se k tomu zatím vždy jen z druhé strany přes repozitář, případně přes join s WITH pro filtrování), každý pokoj má vazbu na Dům.
Mám grid kde jsou primárně vypsané domy a k nim bych chtěl – v jednom sloupci – vypsat i všechny pokoje, oddělené čárkami.
K tomu bych použil vlastní šablonu sloupce.
1.) Jak nejsnáze dostanu do datasource pro grid ty entity Pokoj pro každý
řádek? Budu muset přidat tu vazbu z Domu? Nedá se nějak získat seznam
entit které budou v aktuálním view gridu zobrazeny abych si pro ně dotáhl
data pro custom render?
2.) Je možné k takovémuto use-case nějak udělat
multiselect/checkboxlist filtr?
Díky moc
- H0w4rd
- Člen | 96
Díky za radu se sumou přes všechny stránky.
Ještě bych se rád zeptal, proč když zakomentuju všechna setFilterText(…), tak mi to hází chybu
Ublaboo\DataGrid\Exception\DataGridFilterNotFoundException
Session filter: Filter [user_id] not found
user_id je první sloupec. Předtím byl grid vykreslen se všemi filtry, pokud je ale zakomentuju, hodí to chybu.
EDIT: našel jsem řešení:
$grid->setStrictSessionFilterValues(FALSE);
Editoval H0w4rd (10. 2. 2018 18:17)
- petaak
- Člen | 2
@H0w4rd (16:13) Myslím, že než jsi filtry odebral tak jsi měl použité filtrování podle user_id. V gridu máš pravděpodobně nastaveno remember_state na true, takže grid si ukládá použité filtry do session aby je při další návštěvě stránky mohl přednastavit. Když jsi teď přišel na stránku, grid se snaží nastavit filtr na user_id, ale ten už jsi mu smazal, proto ta chyba. Řešením je buď smazat session, nebo vrátit do kódu přislušný filtr, na stránce s gridem resetovat filtery a pak je zase odebrat.
Editoval petaak (10. 2. 2018 17:30)
- sevca79
- Člen | 55
ahoj,
tak ještě jednou..nevšim sem si náznaku odpovědi od @PavelJanda a
ted zas mezi jeho náznakem a touto zprávou je spousty dalších
komentů..takže to rozepíšu znovu a dopodrobněji
mám tabulku hřišť mimo jiné se sloupci a cizími klíčí
hriste (id, first_position_id, second_position_id)
cizí klíče first_position_id a second_position_id ukazují do jedné a té
samé tabulky positions.id
oba sloupce jsou tedy definovaný, že mohou být null
v tabulce positions jsou mimo jiné sloupce takovéto
positions (id, player_id) samozřejmě player_id je cizí
klíč do tabulky players.id
tady taktéž player_id může být null
a tabulka players (id, jmeno, prijmeni)
ve svém gridu mám takto definovaný sloupec
$grid->addColumnText('match', 'Zápas', ['first_position_id', 'second_position_id'])
->setSortable()
->setRenderer(function ($item) {
if (empty($item[BoardsModel::COLUMN_DRAW_POSITION1_ID])) {
return "";
}
$player1jmeno=$item->ref('positions', 'first_position_id')->ref('players', 'player_id')['jmeno'];
$player1prijmeni=$item->ref('positions', 'first_position_id')->ref('players', 'player_id')['prijmeni'];
$player2jmeno=$item->ref('positions', 'second_position_id')->ref('players', 'player_id')['jmeno'];
$player2prijmeni=$item->ref('positions', 'second_position_id')->ref('players', 'player_id')['prijmeni'];
return $player1jmeno . " " . $player1prijmeni . " - " . $player2jmeno . " " . $player2prijmeni;
});
$grid->addFilterText('match', '',
['first_position_id.player_id.jmeno', 'first_position_id.player_id.prijmeni',
'second_position_id.player_id.jmeno', 'second_position_id.player_id.prijmeni'])
ve sloupci se mi normálně zobrazí zápas např. Pavel Novák – Petr
Novotný
avšak, když chci něco vyfiltrovat, tak mi to hodí chybovou hlášku
Table alias ‚player_id‘ from chain ‚.second_position_id.player_id‘ is already in use by chain ‚.first_position_id.player_id‘. Please add/change alias for one of them.
jak tam prosím mám hodit ten alias či co??
datasource načítám tedy pouze jednoduše pres ntdb
$this->database->table(‚hriste‘);
díky za nějakou nápovědu
- H0w4rd
- Člen | 96
Sorry ale teď tu asi budem psát dotazy jeden přes druhého :)
Potřebuju nutně vědět, jak javascriptem:
- vyvolám refresh gridu (proč: ikonkou vyvolám editaci ve fancyboxu, po zavření chci grid aktualizovat)
- zavěsím funkci na událost překreslení gridu (proč: potřebuju znovu zinicializovat nějaké jquery bláboly v buňkách a to se musí znova udělat po překreslení – ajaxComplete znám, ale jak tam poznám, že šlo o grid? případně nějak jinak?)
- Pavel Janda
- Člen | 977
@H0w4rd
a, Třeba: Udělej si link na custom signal v presenteru a v tom presenteru
zavolej $this['grid']->redrawControl()
.
b, Blbě. :D Zkus to třeba dělat pokaždé, ale jen pokud je na
stránce grid?
- H0w4rd
- Člen | 96
Dík, ale problém je, že když přejdu na jinou stránku a vyvolam redrawControl, grid se vrátí na původní stránku.
Nemůže být trochu problém, pokud na stránce bude víc než jeden
grid?
Koukám, že třeba linkům pro sortování se dává
id=„datagrid-sort-nazev_sloupce“, takže když budu mít 2 gridy se
stejnými sloupci, bude to asi dělat paseku.
Editoval H0w4rd (12. 2. 2018 21:08)
- Jiří Nápravník
- Člen | 710
Zdravím,
přešel jsem na tento datagrid, vypadá velmi dobře, díky za něj!
Nemohu však najít, zda je možné řadit i podle sloupce, který nevykresluji. Mám v entitě atribut position. Podle něj bych chtěl řadit, ale opravdu jej nechci vykreslovat, protože uživatele nezajímá. Je nějaká možnost?
- romiix.org
- Člen | 343
Riešim to predvoleným skrytím stĺpca. Nie je to ideálne, ale ide to.
Jiří Nápravník napsal(a):
Nemohu však najít, zda je možné řadit i podle sloupce, který nevykresluji. Mám v entitě atribut position. Podle něj bych chtěl řadit, ale opravdu jej nechci vykreslovat, protože uživatele nezajímá. Je nějaká možnost?
- Pavel Kravčík
- Člen | 1195
Ahoj @PavelJanda,
mám komponentu grid
a v ní nějakou funkčnost a odkazy.
Trait TLink
mi přijde, že se chová nestandardně v produkčním
režimu oproti debugu. Jasně, že ty odkazy jsou špatně zapsány, ale
v debug režimu to projde bez chyby a ta se objeví až na ostré (po
nasazení :)).
$grid->addAction('detail', '', 'Acquirer:detail', ['id' => 'id'])
–
funguje dobře acquirer/detail
$grid->addAction('detail', '', NULL, ['id' => 'id'])
–
funguje dobře v debug režimu acquirer/detail
$grid->addAction('detail', '', NULL, ['id' => 'id'])
–
produkční generuje pouze #
Editoval Pavel Kravčík (14. 2. 2018 9:16)
- Pavel Janda
- Člen | 977
@PavelKravčík Tak to je hodně divné.. Mohl bys zkusit udělat
sandbox-like appku, kde bude toto fungování ukázané a nahrát nějak na
github?
Nemůže být problém v jiné verzi datagridu na produkci?
- sevca79
- Člen | 55
ahoj,
tak napotřetí to tu zkouším, pač sem zas byl přeskočen a možná
nevšimnut :) kopíruju zprávu co sem psal už výše a na kterou ještě
výše byla už nějaká reakce, avšak nedotažená dokonce… :(
…
tak ještě jednou..nevšim sem si náznaku odpovědi od @PavelJanda a
ted zas mezi jeho náznakem a touto zprávou je spousty dalších
komentů..takže to rozepíšu znovu a dopodrobněji
mám tabulku hřišť mimo jiné se sloupci a cizími klíčí
hriste (id, first_position_id, second_position_id)
cizí klíče first_position_id a second_position_id ukazují do jedné a té
samé tabulky positions.id
oba sloupce jsou tedy definovaný, že mohou být null
v tabulce positions jsou mimo jiné sloupce takovéto
positions (id, player_id) samozřejmě player_id je cizí
klíč do tabulky players.id
tady taktéž player_id může být null
a tabulka players (id, jmeno, prijmeni)
ve svém gridu mám takto definovaný sloupec
$grid->addColumnText('match', 'Zápas', ['first_position_id', 'second_position_id'])
->setSortable()
->setRenderer(function ($item) {
if (empty($item[BoardsModel::COLUMN_DRAW_POSITION1_ID])) {
return "";
}
$player1jmeno=$item->ref('positions', 'first_position_id')->ref('players', 'player_id')['jmeno'];
$player1prijmeni=$item->ref('positions', 'first_position_id')->ref('players', 'player_id')['prijmeni'];
$player2jmeno=$item->ref('positions', 'second_position_id')->ref('players', 'player_id')['jmeno'];
$player2prijmeni=$item->ref('positions', 'second_position_id')->ref('players', 'player_id')['prijmeni'];
return $player1jmeno . " " . $player1prijmeni . " - " . $player2jmeno . " " . $player2prijmeni;
});
$grid->addFilterText('match', '',
['first_position_id.player_id.jmeno', 'first_position_id.player_id.prijmeni',
'second_position_id.player_id.jmeno', 'second_position_id.player_id.prijmeni'])
ve sloupci se mi normálně zobrazí zápas např. Pavel Novák – Petr
Novotný
avšak, když chci něco vyfiltrovat, tak mi to hodí chybovou hlášku
Table alias ‚player_id‘ from chain ‚.second_position_id.player_id‘ is already in use by chain ‚.first_position_id.player_id‘. Please add/change alias for one of them.
jak tam prosím mám hodit ten alias či co??
datasource načítám tedy pouze jednoduše pres ntdb
$this->database->table(‘hriste’);
díky za nějakou nápovědu
- Pavel Janda
- Člen | 977
@sevca79 Být tebou, udělám si view, kde to budeš mít smysluplně
pospojované a jako data source použiješ to view.
Taky můžeš zkusit napsat vlastní filtrační podmínky. :)
- Pavel Kravčík
- Člen | 1195
@PavelJanda: Tak pokud se vyplní třetí parametr – funguje to dobře. Ale jen je to trochu matoucí to chování v debug režimu a pak v produkci.
Composer webproject + require ublaboo. Když v boostrapu vypneš debugMode
tak se ten link vygeneruje.
https://github.com/…ublaboo-test
- sevca79
- Člen | 55
Ahoj,
mám tu takové dvě otázky v jedné
jak prosím ošetřit doubleClick na action?? nechci, aby se mi handler provedl
víckrát..
chtěl sem to udělat tak, že přidám do action nějakou třídu např.
doubleClickDisable
$grid->addActionCallback('paid', '')
->setIcon('dollar')
->setTitle('Zaplatit')
->setClass('btn btn-xs btn-success doubleClickDisable ajax')
->onClick[] = [$this, 'handlePaid'];
a v javascriptu mít někde definované něco jako
$('body').on('click', '.doubleClickDisable', function (e) {
//tady ten double click nejak osetrit
console.log("double click pres body");
});
//nebo
$('.doubleClickDisable').on('click', function (e) {
//nebo tadz ten double click osetrit
console.log("double click primo");
});
avšak ten první jquery přes body se neprovede vůbec a ten druhý pouze jednou, avšak podruhý (když to ajaxově překreslím) se už neprovede
bo jak mám nějak ošetřit aby když uživatel dvojklikne na akci se provedlo pouze jednou..
děkuji
- Pavel Kravčík
- Člen | 1195
@sevca79: Ošetři tohle v handleru – je to výhodnější. Pokud si otevřu dvě záložky – stejně je Ti takhle konhrola k ničemu. :)
public function disable($id)
{
$entity = $this->repository->getById($id);
if($entity->active)
{
$entity->active = 0;
}
else
{
// ošetření - např. flashMessage, že akce se již nedá provést
}
}
- sevca79
- Člen | 55
dvě záložky otevřené už je chyba uživatele..dvojklik sice taky, ale
občas prostě někdo ten dvojklik udělá…
já bych to radši dělal přes jquery, kde bych si s tim ještě trošku
graficky pohrál, že bych např. to tlačítko zatmavil, jako, že už bylo
zmáčknuto a pod…
ale vůbec nechápu proč to přes jquery a body nefunguje..pač každej jinej
odkaz, kterýmu nastavim tento class, mimo grid funguje bez problému :(
- Pavel Kravčík
- Člen | 1195
A co když bude jedna záložka a mezitím se interně změní stav a ty nezmáčkneš F5, než budeš operaci provádět (tj. mám ten tab otevřený 20 minut). :) Každopádně to asi bude stačit přidat do nějakého ajax extension.
- sevca79
- Člen | 55
a jak se tadyto dá řešit?? když se to změní interně či někdo jinej někde jinde?? přes nějaký websockety?? či nějak jinak??
jinak to jquery bylo tím, že tam byla i třída ajax, která to jquery nějak zakazovala či co..Když sem ji vyhodil pryč, tak už to jquery fungovalo..
Takže sem to udělal tak, že sem ajax vyhodil a vyřeším to snad nějak, že ten ajax zavolám až v tom jquery (není to moc prasečina? bo je to normální řešení??)
např. nějak takto
$('body').on('click', '.gridDoubleClickDisable', function (e) {
e.preventDefault();
//ziskani kam sem to chtel poslat
var href=$(this).attr('href');
//zatim jednoduse vyresen nemoznost doubleclick - jinak trosku sloziteji :)
$(this).hide();
//a poslani ajaxove
$.nette.ajax({url: href});
});
Editoval sevca79 (16. 2. 2018 14:11)
- raketoplan2005
- Člen | 147
Ahoj,
od svého minulého dotazu jsem pokročil a udělal jsem nakonec tu asociaci obousměrnou a vlastní šablonu buňky kde se to concatuje + jeden join navíc jen pro filtrování.
Nicméně otázku na jednosměrné asociace bych měl stále – dá se prosím nějak v datagridu pracovat s Doctrine QueryBuilderem který vrátí pole, protože je do jeho výsledku přijoinovaná i entita bez asociace z té primární (asociace tam je ale pouze jednosměrná)?
Děkuji
- r2294743
- Člen | 16
@PavelJanda Řeším takový problém – je nějaká možnost předávaných proměnných do šablony?
Vytvářím komponentu, která vypadá nějak takto.
public function createComponentSuggestions($name)
{
$grid = new DataGrid($this, $name);
$grid->setDataSource($this->facade->getAllSuggestions());
$grid->addColumnText('text', '');
$grid->setTemplateFile(__DIR__ . '/templates/Vote/datagrid.latte');
}
/templates/Vote/datagrid.latte
{extends $original_template}
{define col-text}
<div class="widget" >
<div class="panel-body">
<div class="row">
<div class="col-md-1 col-sm-1 text-center">
<i class="fas fa-heart circle"></i>
</div>
<p>{$item->text}</p>
</div>
</div>
</div>
</div>
{/define}
Editoval r2294743 (4. 3. 2018 0:27)
- H0w4rd
- Člen | 96
ppar napsal(a):
Pavel Janda napsal(a):
@H0w4rd DataGrid podporuje složitější agregace. Jako jediná featura datagridu není zdokumentovaná.
$grid->addAggregationFunction( new Ublaboo\DataGrid\AggregationFunction\FunctionSum('price', IAggregationFunction::DATA_TYPE_FILTERED) )
Druhým parameterm konstruktoru třídy
FunctionSum
určuješ, zda se mají brát v potaz data všechny, nebo jen vyfiltrované výsledky, a nebo pouze jedna stránka.Můžeš si s tím zkusit pohrát. Všechno je v traitě
Ublaboo\DataGrid\AggregationFunction\TDataGridAggregationFunction
.FunctionSum
je jediná – ukázková – implementace interfacuIAggregationFunction
. Můžeš si napsat své a pak je předat datagridu.@H0w4rd
Taky jsem to nedávno řešil a vyřešil :)
Je to řešitelné pro Nette Database?
Hází mi to error:
Ublaboo\DataGrid\Exception\DataGridException
Used DataSource has to implement IAggregatable for aggegations
to work
Data source je klasicky Nette\Database\Table\Selection.
Editoval H0w4rd (4. 3. 2018 11:13)