ublaboo/datagrid: mocný, rychlý, rozšiřitelný, hezký, anglicky dokumentovaný datagrid
- cujan
- Člen | 410
Pavel Janda napsal(a):
@cujan A ukážeš metodu
NavstevaManager::getRecords()
:)
@PavelJanda
<?php
namespace App\Model;
use Nette;
class NavstevaManager extends BaseManager {
const
TABLE_NAME = 'navsteva';
public function getRecords()
{
return $this->database->table(self::TABLE_NAME);
}
}
?>
- jikki
- Člen | 73
jikki napsal(a):
Ahoj, takto mám udělaný TreeView. Zobrazují se mi šipky na rozbalení u všech položek, i vnořených, i když položka nemá žádného potomka. Poradíte někdo co mám špatně prosím?
<?php public function createComponentTreeStructure() { $grid = $this->myTreeViewFactory->create(); $stock = $this->wh->em->find(Entity\Stock::class, 1); $qb = $this->wh->em->createQueryBuilder(); $qb->select('e') ->from('\App\Model\Entity\Stock', 'e') ->where('e.parent = :stock') ->setParameter('stock', $stock->id) ; $qb->getQuery()->getResult(); $grid['grid']->setDataSource($qb); $grid['grid']->setTreeView(function ($parent) { $qb = $this->wh->em->createQueryBuilder(); $qb->select('e') ->from('\App\Model\Entity\Stock', 'e') ->where('e.parent = :parent') ->setParameter('parent', $parent) ; return $qb->getQuery()->getResult(); }, 'id'); $grid['grid']->addColumnText('stockName', 'Název umístění'); $grid['grid']->addColumnText('parent.stockName', 'Nadřazené umístění'); $grid['grid']->addColumnNumber('id', 'Id'); $grid['grid']->setPagination(false); return $grid; } ?>
díky moc
Poradí pls někdo? díky
- jikki
- Člen | 73
Ahoj,
v tabulce mám přidanou groupAction, ale ten select se mi roztahuje přes celou šírku tabulky, další select závislý na tom prvním se přidá pod něj také roztažený. Vše mám v defaultu, neměnil jsem žádné styly. Poradí prosím někdo jak dosáhnout toho aby byly vedle sebe neroztažené?
Editoval jikki (26. 10. 2018 12:21)
- Jurix
- Člen | 11
jikki napsal(a):
Ahoj,
v tabulce mám přidanou groupAction, ale ten select se mi roztahuje přes celou šírku tabulky, další select závislý na tom prvním se přidá pod něj také roztažený. Vše mám v defaultu, neměnil jsem žádné styly. Poradí prosím někdo jak dosáhnout toho aby byly vedle sebe neroztažené?
Nejjednodušší asi bude do CSS přidat direktivu. Něco takového…
.row-group-adtions th select { width: 250px; }
- Petr Parolek
- Člen | 455
Ahoj, teď jsem narazil na nefunkční AggregationFunction, funkce se vykoná
(zkoušeno dumpem ve třídě
Ublaboo\DataGrid\AggregationFunction\FunctionSum
), ale
nevyrenderuje se do datagridu.
Vytvořil jsem testovací sandbox aplikaci na https://github.com/…tion-sandbox .
Mohli byste se na to prosím hoši kouknout, kde se co pokazilo?
Editoval ppar (26. 10. 2018 22:32)
- Petr Parolek
- Člen | 455
Nakonec jsem se na to kouknul a poslal jsem PR https://github.com/…rid/pull/718 . Mohl bys @Felix nebo @PavelJanda prosím PR začlenit?
EDIT
Objevil jsem druhou chybu v AggregationFunction při stránkování výsledků, opravu jsem zahrnul do výše uvedeného PR.
Editoval ppar (27. 10. 2018 13:37)
- cujan
- Člen | 410
@PavelJanda
vieme v com je problem v tom datovom type TIME? ci musim skoncit
s gridom…
vdaka
cujan napsal(a):
Pavel Janda napsal(a):
@cujan A ukážeš metodu
NavstevaManager::getRecords()
:)@PavelJanda
<?php namespace App\Model; use Nette; class NavstevaManager extends BaseManager { const TABLE_NAME = 'navsteva'; public function getRecords() { return $this->database->table(self::TABLE_NAME); } } ?>
- Pavel Janda
- Člen | 977
@jikki Ty šipičky se zobrazují s ohledem na property
has_children
, jméno té property lze změnit druhým argumentem
metody ::setTreeView()
. Zkus si v té entitě implementovat jinou
property/metodu, která bude správně vracet info o tom, zda má položka
další potomky.
@cujan
1, Můžeš to zkusit vyrenderovat ručně (přes callback nebbo šablonu)
2, Můžeš poslat celou chybovou hlášku? Případně najít místo, kde to
s nette database table drhne a poslat PR?
- jikki
- Člen | 73
@PavelJanda
@jikki Ty šipičky se zobrazují s ohledem na property
has_children
, jméno té property lze změnit druhým argumentem metody::setTreeView()
. Zkus si v té entitě implementovat jinou property/metodu, která bude správně vracet info o tom, zda má položka další potomky.
Zjistil jsem že položky, které by neměly mít šipku mají nastavenou classu hidden, ale šipečka se stejně zobrazuje.
<a data-toggle-tree="true" href="/wh/www/manage/places?treeStructure-grid-parent=6&do=treeStructure-grid-getChildren" class="hidden chevron ajax"><i class="fa fa-chevron-right"></i></a>
Zjistil jsem že css a js stažené přes bower, konktrétně datagrid.css neobsahuje tu třídu hidden. Když jsem použil stejný soubor, který máš ve \vendor\ublaboo\datagrid\assets\dist\ tak to funguje. Konečně, jupíí :) díky moc.
EDIT: tak neměl jsem aktualizované css a js přes bower. Po aktualizaci zmizly i další problémy. Např. group action je teď inline, atd.
Editoval jikki (30. 10. 2018 21:32)
- jikki
- Člen | 73
Ahojte, měl bych 2 dotazy:
- nabízí ublaboo možnost načíst tabulku se zaškrtnutými řádky pro group action? Případně jak zaškrtnout řádky po kliknutí např. na tlačítko v toolbaru?
- lze do ItemsDetail dát nějak jiná ublaboo tabulka či vlastní komponenta?
Díky moc
Editoval jikki (1. 11. 2018 14:17)
- sevca79
- Člen | 55
Ahoj,
prosím právě sem u mého cca rok starého projektu udělal composer update a
bower update a najednou se mi u gridu přestaly správně zobrazovat
filterMultiSelect… funkčně je vše jak má, ale nezobrazuje se to co sem
vybral v tom vybíracím buttonku, ale zobrazí se tam pouze caret bez
žádného textu…text se mi zobrazí jen když nad to najedu myší, tak se mi
to zobrazí jako plovoucí nápověda
Nesetkal se někdo s podobným problémem u filter selectů???
Případně nějaký nápad kde by mohl být nějaký problém..
díky za každou radu.. ;)
- Ondřej Kubíček
- Člen | 494
tak jestli jsi udělal update, podíval bych se jaký je rozdíl mezi tvou puvodní rok starou verzí a současnou verzí, třeba se něco změnilo a budeš si to muset upravit
- cujan
- Člen | 410
Pavel Janda napsal(a):
@jikki Ty šipičky se zobrazují s ohledem na property
has_children
, jméno té property lze změnit druhým argumentem metody::setTreeView()
. Zkus si v té entitě implementovat jinou property/metodu, která bude správně vracet info o tom, zda má položka další potomky.@cujan
1, Můžeš to zkusit vyrenderovat ručně (přes callback nebbo šablonu)
2, Můžeš poslat celou chybovou hlášku? Případně najít místo, kde to s nette database table drhne a poslat PR?
@PavelJanda
Warning
DateTime::createFromFormat() expects parameter 2 to be string, object given
chyba je oznacena na riadku 76
<?php
Source file
File: ...\ublaboo\datagrid\src\Utils\DateTimeHelper.php:76
66: }
67:
68: if ($value instanceof \DateTimeImmutable) {
69: $date = new \DateTime('now', $value->getTimezone());
70: $date->setTimestamp($value->getTimestamp());
71:
72: return $date;
73: }
74:
75: foreach ($formats as $format) {
76: if (!is_string($format) || !$date = \DateTime::createFromFormat($format, $value)) {
77: continue;
78: }
79:
80: return $date;
?>
Editoval cujan (5. 11. 2018 13:31)
- Pavel Janda
- Člen | 977
@cujan Mohl bys zjistit, jaký objekt tam přijde? Tedy například dumpnout:
74: Tracy\Debugger::barDump($value);
Díky.
- cujan
- Člen | 410
Pavel Janda napsal(a):
@cujan Mohl bys zjistit, jaký objekt tam přijde? Tedy například dumpnout:
74: Tracy\Debugger::barDump($value);
Díky.
@PavelJanda
doplnil som
<?php
Warning
DateTime::createFromFormat() expects parameter 2 to be string, object given search► skip error►
Source file
File: ...\ublaboo\datagrid\src\Utils\DateTimeHelper.php:76
66: }
67:
68: if ($value instanceof \DateTimeImmutable) {
69: $date = new \DateTime('now', $value->getTimezone());
70: $date->setTimestamp($value->getTimestamp());
71:
72: return $date;
73: }
74: \Tracy\Debugger::barDump($value);
75: foreach ($formats as $format) {
76: if (!is_string($format) || !$date = \DateTime::createFromFormat($format, $value)) {
77: continue;
78: }
79:
80: return $date;
?>
<?php
Dumps
DateInterval #0558
y => 0
m => 0
d => 0
h => 17
i => 0
s => 0
f => 0.0
weekday => 0
weekday_behavior => 0
first_last_day_of => 0
invert => 0
days => false
special_type => 0
special_amount => 0
have_weekday_relative => 0
have_special_relative => 0
?>
Editoval cujan (7. 11. 2018 11:40)
- sevca79
- Člen | 55
Nevím jestli byla chyba jen u mě, nebo to dělá problém více lidem, ale
stále mi nefungoval ten filterMultiSelect, poté co sem updatovat všechny
balíčky přes bower, tak se mi nezobrazovala hodnota v multiselectu. Nakonec
sem problém vyřešil tím, že sem downgradoval balíček bootstrap-select na
nižší verzi ..dal sem tam 1.12.0 a začlo to fungovat tak jak má.. (asi by
to šlo i s jinou vyšší, ale nechce se mi to testovat)..ale
s nejnovější verzí tuším 1.13.3 to fungovalo špatně
Prosím u ostatních je fiterMultiSelect s nejnovější verzí
bootstrap-selectu bez problému??
- Pavel Janda
- Člen | 977
@jikki Určitě to jde. Mrkni na demo + kód dema hned pod ním: https://ublaboo.org/…group-action
Když vybereš Add note
, ukáže se ti pak text input. :)
- jikki
- Člen | 73
Pavel Janda napsal(a):
@jikki Určitě to jde. Mrkni na demo + kód dema hned pod ním: https://ublaboo.org/…group-action
Když vyberešAdd note
, ukáže se ti pak text input. :)
add Note vím :) Ale je to jen polovina toho co bych potřeboval.
Potřeboval group action, která bude mít v sobě input select a následně
input text, abych to mohl použít pro následující scénař:
V tabulce mám zobrazené typy položek a jejích dostupné množství. V group action vyberu např. akci ‚Přesun‘, pak potřebuji ať to nabídne select s výběrem umístění. Vyberu umístění a pak bych potřeboval ať nabídne text input pro zadání množství :)
- NetteStudent
- Člen | 2
Pavel Kravčík napsal(a):
@NetteStudent: Zkoušel si je napsat v jiném pořadí? :)
Jasne ze som skusal :)
Napriklad delete mam uplne posledne $grid->addAction(‚delete‘, '', ‚delete!‘) .. ale ako vidno na obrazku je predposledne …
Na poslednom mieste je inline edit $grid->addInlineEdit() .. ktore mam na prvom mieste
- Jurix
- Člen | 11
jikki napsal(a):
Ahoj,
lze nějak nastavit, aby konkrétní řádky byly zaškrtnuty pro GroupdAction při načtení tabulky?
Případně, aby si tabulka pamatovala zaškrtnuté řádky při stránkování?díky moc
Nad checkboxy bych volal onchange funkci, která AJAXem uloží ID
zaškrtnutých řádků do session a následné zaškrtnutí po
reloadu/pagination bych řešil JavaScriptem nějak
takto: $('body').on('load', 'tvůj_checkbox_selector', function() { $(this).prop('checked', true); });
Editoval Jurix (25. 11. 2018 16:29)
- Honza.Mottl
- Člen | 104
Musis vyresit tyto veci:
- dostat sve zaskrtnuti ze serveru na klienta. Muzes udealt sablonu a nastavit class podle toho zda je zaskrtnute.
- osetri, aby pri se po doruceni snippetu gridu nastavily checkboxy
{define col-objednavka_id}
<span {if $item->objednavka_checked}class="checked" {/if}>{$item->objednavka_id}</span>
{/define}
$.nette.ext('datagrid.handling', {
success: function(payload) {
var processCreate = false;
var processResize = false;
if (payload && payload.snippets) {
Object.keys(payload.snippets).forEach(function(snippet,index) {
if ((snippet.indexOf('-table') !== -1) || (snippet.indexOf('-grid') !== -1)) {
processCreate = true;
} else if (snippet.indexOf('-tbody') !== -1) {
processResize = true;
}
});
}
if (processCreate || processResize) {
// nastavit checkbox. Kod je narychlo nastreleny
$('td.col-objednavka_id span.checked').closest('tr').find('input[type="checkbox"]').prop('checked', true);
}
}
});
- jAkErCZ
- Člen | 322
Čau,
hele řeším takovou divnou věc…
Snažím se po přidání nového řádku datagrid překreslit abych nemusel znovu načítat stránku ale nějak to nefunguje--
$grid->getInlineAdd()->onSubmit[] = function($values) {
$v='';foreach($values as $key=>$value){$v.="$key: $value, ";}$v=trim($v,', ');
$this->touramentRepository->saveSchool(null,$values);
$this->flashMessage("Škola byla úspěšně přidaná k turnaji.", 'success');
$this['schoolGrid']->redrawControl();
$this->redrawControl('flashMessages');
};
Dělám něco špatně? :O
- Jurix
- Člen | 11
jAkErCZ napsal(a):
Čau,
hele řeším takovou divnou věc…Snažím se po přidání nového řádku datagrid překreslit abych nemusel znovu načítat stránku ale nějak to nefunguje--
$grid->getInlineAdd()->onSubmit[] = function($values) { $v='';foreach($values as $key=>$value){$v.="$key: $value, ";}$v=trim($v,', '); $this->touramentRepository->saveSchool(null,$values); $this->flashMessage("Škola byla úspěšně přidaná k turnaji.", 'success'); $this['schoolGrid']->redrawControl(); $this->redrawControl('flashMessages'); };
Dělám něco špatně? :O
ahoj,
zkus překreslit takto: $this['schoolGrid']->reload();
Editoval Jurix (7. 12. 2018 6:51)
- cafesk8
- Člen | 103
Zdravím,
mám naprosto jednoduchhý datagrid, který mi funguje dokud si zaráz nerozkliknu k editaci více řádků zaráz, jakmile dám edit na více řádků a pak na různých řádcích klikám buď save nebo cancel, tak se automaticky vykonávají odkonce namísto u konkrétního řádku.
$grid = new DataGrid($this, $name);
$grid->setDataSource($this->myRepository->findAll());
$grid->addColumnText('input_price', 'Vstup')
->setSortable()
->setFilterText('input_price');
$grid->addColumnText('output_price', 'Výstup')
->setSortable()
->setFilterText('output_price');
$grid->addInlineEdit()
->onControlAdd[] = function($container) {
$container->addText('input_price', '');
$container->addText('output_price', '');
};
$grid->getInlineEdit()->onSetDefaults[] = function($container, $item) {
$container->setDefaults([
'input_price' => $item->input_price,
'output_price' => $item->output_price
]);
};
V js nemám nic jiného než:
<script>
$(function () {
$.nette.init();
});
</script>
Pokud kliknu např. na editaci řádku č. 3, udělám změny a dám save anebo cancel, tak se správně překreslí ať již ze změnami nebo bez správně řádek č. 3.
Pokud ale otevřu (v tomto pořadí) řádek 1, 2 a nakonec 3 tak poté pokud dám save/cancel u řádku č. 1, provede se změna u řádku č. 3 a po opětovném kliknutí na edit/cancel na řádku č. 1 se provede/překreslí řádek č. 2 a až na třetí pokus se to provede u řádku č. 1.
Pokud si však v js dám:
<script>
$.nette.ext('datagrid.handling', {
success: function(payload) {
console.log(payload);
}
});
</script>
Tak se mi do konzole vypíše správně ID upravovaných řádků.
Nevíte někdo co dělám špatně nebo čím by to mohlo být? Anebo prostě akorát ublaboo/datagrid neumí více big-editů zaráz?
Pro ujasnění přidávám screencast zde
- jikki
- Člen | 73
@PavelJanda Byla tato issue nějak vyřešená prosím? Nenašel jsem řešení.
díky moc
Pavel Janda napsal(a):
@chap Toto issue je už dlouho známé. Zmínil jsem to na Nette Campu.. Vysvětlím:
1, Inline editace se vyrenderuje do formuláře rovnou (pak se jen zviditelní při kliknutí na button)
2, Pokud je tam něco required, začne celý formulář při jakékoliv akci křičet, protože má formulář obalující datagrid blbě nastavený validation scope – zahrnuje InlineEdit/Add form (tuším, že v tom tkví jádro pudla).
3, Fix by měl být jednoduchý..
Jenže!
Přesto, že si na to lidé stěžují už delší dobu, ani jeden z těch cca 20 lidí, kteří o tom mluvili, neposlal PR, nepřišel diskutovat fix, nic.
Takže!
Kdyby byl alespoň nějaký náznak spolupráce, náznak toho, že chce do problému někdo strkat prstíky, budu moc rád nápomocen. Aktuálně to však na žádném svém projektu nepotřebuji, takže nechám toto issue ještě chvilku (třeba měsíc a kus) hnít jako takový průzkum opensource společnosti. Zpětně i předem se za to omlouvám a doufám, že se třeba najde někdo, kdo zlomek času, který třeba ušetřil použitím datagridu, věnuje pokusu o fixnutí validation scope.
- Petr Parolek
- Člen | 455
@jikki taky se s tím trápím dva dny a nemůžu to dořešit. Rád bych poslal PR, ale sám jsem nenašel řešení,
- Jurix
- Člen | 11
cafesk8 napsal(a):
Zdravím,
mám naprosto jednoduchhý datagrid, který mi funguje dokud si zaráz nerozkliknu k editaci více řádků zaráz, jakmile dám edit na více řádků a pak na různých řádcích klikám buď save nebo cancel, tak se automaticky vykonávají odkonce namísto u konkrétního řádku.
$grid = new DataGrid($this, $name); $grid->setDataSource($this->myRepository->findAll()); $grid->addColumnText('input_price', 'Vstup') ->setSortable() ->setFilterText('input_price'); $grid->addColumnText('output_price', 'Výstup') ->setSortable() ->setFilterText('output_price'); $grid->addInlineEdit() ->onControlAdd[] = function($container) { $container->addText('input_price', ''); $container->addText('output_price', ''); }; $grid->getInlineEdit()->onSetDefaults[] = function($container, $item) { $container->setDefaults([ 'input_price' => $item->input_price, 'output_price' => $item->output_price ]); };
V js nemám nic jiného než:
<script> $(function () { $.nette.init(); }); </script>
Pokud kliknu např. na editaci řádku č. 3, udělám změny a dám save anebo cancel, tak se správně překreslí ať již ze změnami nebo bez správně řádek č. 3.
Pokud ale otevřu (v tomto pořadí) řádek 1, 2 a nakonec 3 tak poté pokud dám save/cancel u řádku č. 1, provede se změna u řádku č. 3 a po opětovném kliknutí na edit/cancel na řádku č. 1 se provede/překreslí řádek č. 2 a až na třetí pokus se to provede u řádku č. 1.
Pokud si však v js dám:
<script> $.nette.ext('datagrid.handling', { success: function(payload) { console.log(payload); } }); </script>
Tak se mi do konzole vypíše správně ID upravovaných řádků.
Nevíte někdo co dělám špatně nebo čím by to mohlo být? Anebo prostě akorát ublaboo/datagrid neumí více big-editů zaráz?
Pro ujasnění přidávám screencast zde
Big inline edit tuším není konstruován pro editaci více řádků současně viz příklad
Zkontroluj si zavedené assety.
- jikki
- Člen | 73
ppar napsal(a):
@jikki taky se s tím trápím dva dny a nemůžu to dořešit. Rád bych poslal PR, ale sám jsem nenašel řešení,
Také jsem stále nenašel řešení. Provizorně jsem to vyrešil tak, že jsem nastavil ->setRequired(false)
<?php
$container->addText('serialNumber', 'messages.serialnumber')
->setAttribute('placeholder', 'messages.enterserialnumber')
->addRule(Form::MAX_LENGTH, 'messages.maxlength', 36)
->setRequired(false)
;
?>
A vložení prázdného textu jsem ošetřil v onSubmit[] pomocí flashMessage. Není to ideální, protože to zruší editační či vkládací řádek, ale nic lepšího mě nenapadlo.
Škoda, že @PavelJanda s tím nic neudělá.
- Petr Parolek
- Člen | 455
škoda, že nikdo z nás nenašel funkční řešení. Pojdme hoši spojit síly a vyřešit. https://github.com/…ters-sandbox zde je ukázka problému.
- Pavel Janda
- Člen | 977
@ppar Super, na tom sandboxu by se to snad mohlo podařit odladit. Já teď, bohužel, moc aplikací s frontendem nedělám a k inline editaci se vůbec nedostanu. Ale takovýhle sandbox je skvělý začátek a i mě teď dodal trochu síly a zvědavosti, abych si to repo přes svýtky vyklonoval.
- Petr Parolek
- Člen | 455
@PavelJanda ozval se mi jeden na webtrhu https://webtrh.cz/…te-extension, akorát by chtělo dát dohromady bakšiš. Byl bys @jikki ochotný finančně přispět? Mých 500 Kč bude zřejmě málo
Editoval ppar (21. 12. 2018 12:53)
- strear
- Člen | 1
Ahoj, obaluji sql dotaz fluentem a narazil jsem se na problém s defaultním řazením podle primárního klíče.
Původní sql:
select * from user order by name
Problematicky (obalený) sql:
SELECT * FROM ( select * from user order by name) val ORDER BY "id" ASC LIMIT 15
Datagrid přidává ORDER BY "id"
, který změní původní
order by. Dá se to nějak obejít?
p.s. přidával jsem issue na github:
https://github.com/…d/issues/731
- Petr Parolek
- Člen | 455
jikki napsal(a):
@PavelJanda Byla tato issue nějak vyřešená prosím? Nenašel jsem řešení.
díky moc
Pavel Janda napsal(a):
@chap Toto issue je už dlouho známé. Zmínil jsem to na Nette Campu.. Vysvětlím:
1, Inline editace se vyrenderuje do formuláře rovnou (pak se jen zviditelní při kliknutí na button)
2, Pokud je tam něco required, začne celý formulář při jakékoliv akci křičet, protože má formulář obalující datagrid blbě nastavený validation scope – zahrnuje InlineEdit/Add form (tuším, že v tom tkví jádro pudla).
3, Fix by měl být jednoduchý..
Jenže!
Přesto, že si na to lidé stěžují už delší dobu, ani jeden z těch cca 20 lidí, kteří o tom mluvili, neposlal PR, nepřišel diskutovat fix, nic.
Takže!
Kdyby byl alespoň nějaký náznak spolupráce, náznak toho, že chce do problému někdo strkat prstíky, budu moc rád nápomocen. Aktuálně to však na žádném svém projektu nepotřebuji, takže nechám toto issue ještě chvilku (třeba měsíc a kus) hnít jako takový průzkum opensource společnosti. Zpětně i předem se za to omlouvám a doufám, že se třeba najde někdo, kdo zlomek času, který třeba ušetřil použitím datagridu, věnuje pokusu o fixnutí validation scope.
Tak jsem trošku se posunul a zkoušel jsem zjišťovat, od jaké verze datagridu se bug objevil. verze 4.4.9 je ještě ok, verze 4.4.10 má zmíněný bug. Předpokládám, že od této verze je bug ve všech verzí. Zkoušel jsem jen některé, abych zjistil od jaké verze je chyba.
EDIT
vypadá, že je viníkem toto https://github.com/…/datagrid.js#…
EDIT:
Hurááá, vyřešno. Problém dělá AJAX https://github.com/…l-refresh.js . Řešením je nenačítat tento JS a vše jede ok.
EDIT:
nesmí se inicializovat v šabloně:
<!-- Initialize nette.ajax.js after loading the DOM. -->
<script>
$.nette.init();
</script>
Jinak se chyba projeví
Editoval ppar (29. 12. 2018 23:39)
- pavelinnuendo
- Člen | 33
Lze nějak zobrazit grid, který už má rovnou otevřený inline řádek pro zadání nové položky? Tj. aby nebylo nutné klikat na plus (přidat novou položku)?
Vyřešil jsem to takto:
$(document).ready(function (event) {
$('#snippet-mujGrid-tbody tr:first').removeClass('datagrid-row-inline-add-hidden');
});
Napadá vás lepší řešení? Děkuji za tip.
Editoval pavelinnuendo (18. 1. 2019 13:24)
- Pavel Janda
- Člen | 977
@Mart78 Pokud si uděláš custom šablonu, tak si udeš muset i ten href sám vytvořit a vyrenderovat.. Ideálně přes n:href :)
- jikki
- Člen | 73
Ahoj, v presenteru, kde používám tuto tabulku, mám nadefinovanou proměnnou typu Nette\Http\SessionSection. Podle její hodnoty přepínám zobrazení položek v tabulce mezi zobrazením položek jednotlivě nebo seskupeně. Tlačítko na přepnutí (addToolbarButton) volá ajaxem signál, který změní hodnotu v mé session proměnné a reloadne tabulku. Funguje to bezvadně do doby než použiji filter v tabulce a pak jej resetnu. Poté začne přepínač měnit zobrazení o jedno kliknutí zpozděně. Musím refreshnout celou stránku, aby to fungovalo opět správně. Netuší někdo proč to tak dělá?
díky moc za nakopnutí
Editoval jikki (7. 2. 2019 11:45)
- Mart78
- Člen | 31
Setkal se někdo s tím že
$grid->setDefaultSort(['id' => 'DESC']);
řadí jako ASC?
Do SQL dotazu to vygeneruje pouze ORDER BY invoices.id
. Pokud
změním default sort např na ['price' => 'DESC']
vše funguje
správně. Datasource je Nextras ORM –
$grid->setDataSource($this->db->invoices->findAll());
Neví někdo prosím?
- jAkErCZ
- Člen | 322
Zdravím,
mám jeden problém a jeden dotaz :D
Takže problém nevím proč ale po editaci statusu se mi nerefrešne grid i když postupuji podle dokumentace a mám také připojené potřebné js.
/**
* @param $id
* @param $new_status
*/
public function changeStatus($id, $new_status)
{
$this->projectRepository->updateStatus($id, $new_status);
$this->presenter->flashMessage('Oprávnění bylo změněno', 'success');
if ($this->presenter->isAjax()) {
$this->presenter->redrawControl('flashMessages');
$this['projectGrid']->redrawItem($id);
}
}
A další věc chci se zeptat jde nějak udělat že když mám možnost změnit status tak pokud vyberu nějaký status tak u něj mít nějakou podmínku že pokud třeba vyberu status zrušeno že mu vyskočí okno kde musí nastavit důvod proč? A pokud to prostě nevyplní tak se ten status nezmění?
Díky
- ali
- Člen | 342
Uz delsi dobu se trapim s jednim „mensim“ problemem.
Mam v gridu obycejnou hromadnou akci na stazeni PDFek (pomoci mPDF spojim
vice PDFek do jednoho souboru).
Problem mi nastane, ze jakmile vyberu akci a zmacknu submit button, provede se
pouze ajax request a soubor se nestahne.
Kdyz na submit button kliknu za pridrzeni klavesy CTRL (v Google Chrome se
otevre nova zalozka) tak se soubor stahne (z toho usuzuju ze response mam
napsanou spravne).
Napada nekoho, jak donutit prohlizec stahnout ten soubor?
Akce:
$grid->addGroupAction('PDF')
->onSelect[] = function (array $ids): void {
...
$this->sendResponse(new Responses\ForceDownload($mpdf->Output('', \Mpdf\Output\Destination::STRING_RETURN), 'mix.pdf'));
};
Response:
<?php
declare(strict_types=1);
namespace Service\Responses;
use Nette;
final class ForceDownload implements Nette\Application\IResponse
{
/** @var string */
private $content;
/** @var string */
private $fileName;
/** @var string */
private $contentType;
/**
* @param string $content
* @param string $fileName
* @param string $contentType
*/
public function __construct(string $content, string $fileName, string $contentType = 'application/octet-stream')
{
$this->content = $content;
$this->fileName = $fileName;
$this->contentType = $contentType;
}
/**
* @param Nette\Http\IRequest $httpRequest
* @param Nette\Http\IResponse $httpResponse
*/
public function send(Nette\Http\IRequest $httpRequest, Nette\Http\IResponse $httpResponse): void
{
$httpResponse->setContentType($this->contentType);
$httpResponse->setHeader('Content-Disposition', 'attachment; filename="' . $this->fileName . '"');
$httpResponse->setHeader('Content-Length', strlen($this->content));
if ($this->content !== null) {
echo $this->content;
}
}
}