Nextras\Datagrid – datagrid se vsim jak ma byt
- sd
- Člen | 87
Jo jo, to je nesjpíš ono. Děkuji moc. Jen to neumím zakomponovat.
v presenteru mám:
public function createComponentGrid(){
$grid = new \Nextras\Datagrid\Datagrid;
$grid->addColumn('id', 'ID')->enableSort();
$grid->addColumn('name', 'Jméno')->enableSort();
$grid->addColumn('specialization', 'Specializace');
$grid->addColumn('experiences', 'Zkušenosti');
$grid->addColumn('user', 'rz');
$grid->setFilterFormFactory(function() {
$form = new Nette\Forms\Container;
$specializations = [
'..' => '..',
'Nějaké zaměření' => 'Nějaké zaměření', // blabla atd..
];
$form->addSelect('specialization', 'Zamerenie', $specializations);
$form->addText('experiences', 'Zkušenosti');
// these buttons are not compulsory
$form->addSubmit('filter', 'Filtrovať')->getControlPrototype()->class = 'btn btn-primary';
$form->addSubmit('cancel', 'Zrušiť filtráciu')->getControlPrototype()->class = 'btn';
return $form;
});
//$grid->setDataSourceCallback($this->getDataSource);
$grid->setDatasourceCallback(function($filter, $order) {
$filters = array();
foreach ($filter as $k => $v) {
if ($k == 'id' || is_array($v))
$filters[$k] = $v;
else
$filters[$k. ' LIKE ?'] = "%$v%";
}
$selection = $this->database->table('market')->where($filters);
if ($order[0])
$selection->order(implode(' ', $order));
return $selection;
});
$grid->addCellsTemplate(__DIR__ . '/../templates/@grid.latte');
return $grid;
}
- @grid.latte
{define col-user}
<td>
{$row->user->firstName} {$row->user->lastName}
</td>
{/define}
default.latte
...
{control grid}
...
sloupec ‚user‘ z tabulky ‚market‘ je propojen cizím klíčem na tabulku ‚users‘ (sloupec ‚id‘)
Nyní pokud tam pouze doplním jak psal @secmi, tak mi vypíše
>‚Trying to get propery of non-object‘
Neví někdo co s tím, prosím?
- secmi
- Člen | 19
Tady je problém v názvosloví, pokud chceš přistupovat k datům v cizí tabulce, nesmíš použít přesný název sloupce.
Řešení je nahradit definici v šabloně, například takto (použije se libovolná část názvu sloupce, která nekoliduje s jiným):
<?php
{define col-user}
<td>
{$row->use->firstName} {$row->use->lastName}
</td>
{/define}
?>
A nebo změnit název sloupce v tabulce market na user_id a pak použít Tvoji variantu.
- petrf
- Člen | 15
Ahoj, poslední dobou řeším tento problém – rád bych udělal export
dat z gridu do CSV, ale nevím, jak se k nim dostat – respektive dostat
tak, aby byly zohledněny vybrané filtry a řazení, ale nebyl použit
paginator. Nějak přes payload, či přes getData (která je protected, nevím
jestli by pomohla), nebo jinak?
Koukal jsem, že ve dvou příspěvcích se nějaké filtry, order řešilo, ale
nebyl jsem z toho jako spíše začátečník příšli moudrý – díky
za rady.
- Azathoth
- Člen | 495
@Tirus91 k té doctrine: doporučuji naklikat si nějaké filtry, stránkování a řazení a pak si dumpnout parametry, se kterými se volá callback dataSource (nebo jak se to jmenuje). no a u svou metodu na získání dat si upravíš tak, aby filtrovala a řadila data podle filtru, orderby a paginatoru. já používám kdyby doctrine a jako zdroj dat mi stačí u entityrepository metoda findby, jen musím některé parametry z toho datagridu trochu přeskládat.
- sd
- Člen | 87
secmi napsal(a):
Myslíš něco v tomhle smyslu:
<?php $grid->addColumn('user_id', 'rz'); ?>
kde sloupec user_id je odkazem na cizí tabulku a pak v šabloně
<?php {define col-user_id} <td> {$row->user->name} {$row->user->surname} </td> {/define} ?>
Ještě si nevím rady, jak vyřešit pokud chci vypsat více sloupců
z tabulky odkazované cizím klíčem. (Tedy ne jen jméno a příjmení, ale
i další údaje).
Stejný název použít nemohu, a například místo user_id
jsem
zkoušel user
, data se mi vypsat podařilo způsobem výš
uvedemým (jen místo $row->user->...
je
$row->us->...
).
Ale nefunguje řazení a vyhledávání. Vypíše chybu:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'us' in 'where clause'
Děkuji za radu.
- Azathoth
- Člen | 495
@Tirus91 já to mám takhle:
/**
* @param array $filter
* @param array $order
* @param Paginator $paginator
* @return Entity\User[]
*/
public function getUsers($filter = [], $order = [], Paginator $paginator = NULL)
{
foreach ($filter as $field => $value) { //přechod z přesné shody na LIKE
$filter["$field LIKE"] = "%$value%"; //jestli tam všude nejsou stringy, tak je lepší to oifovat, já tam mám všude textinputy, tak všude narvu LIKE
unset($filter[$field]);
}
if (count($order) > 0) { //přijde mi to jako ['field', 'hodnota'] a já chci ['field' => 'hodnota']
$order[$order[0]] = $order[1];
unset($order[0]);
unset($order[1]);
}
if ($paginator != NULL) {
return $this->userRepository->findBy($filter, $order, $paginator->getItemsPerPage(), $paginator->getOffset());
}
return $this->userRepository->findBy($filter, $order);
}
Editoval Azathoth (4. 9. 2015 19:22)
- Azathoth
- Člen | 495
u nás jsme to řešili tím, že jsem udělal custom template, kam jsem vykopírovalten paginator a upravil jsem si ho dle libosti. to mi umožnilo tak dát dokonce úplně jinak vypadající paginator. jinak se podívej do souboru datagrid.latte, jak se ro vykresluje. možná to jde přes translator, který by ti asi mohl pomoct, ale nejsem si jistý.
- MW
- Člen | 626
Jde to. Jednak od určité verze funguje Translator. Ja na jedné starší verzi to nastavuji takto :
$grid->setFilterFormFactory(function() {
$form = new Nette\Forms\Container;
$form->addText('name');
$form->addSubmit('filter', 'Filtrovat')->getControlPrototype()->class = 'btn btn-primary';
$form->addSubmit('cancel', 'Zrušit filtr')->getControlPrototype()->class = 'btn';
return $form;
});
Editoval MW (7. 10. 2015 8:46)
- Azathoth
- Člen | 495
použití je jednoduché. musíš se podívat do kódu datagridu, jaké překladové texty se tam používají. a pode toho s napíšeš ty překlady do neonu. protože to, myslím, nepoužívá žádný domain (překlady jsou tam jednoslovné, bez tečky), doporučuji si u kdyby translation udělat třeba datagrid.cs.neon a do něj to házet. a do datagtidu poslat PrefixedTranslator toho datagridu takhle: $this->translator->domain(‚datagrid‘);
- n.u.r.v.
- Člen | 485
Azathoth: Díky za radu, ale nějak jsem se zasekl:
1)k již existujícím slovníkům jsem přidal datagrid.cs.neon
(kdyby-translator slovník načetl)
2)chtěl jsem zkusit např. přeložit tlačítko pro filtrování
„Filter“ – dal jsem tedy do neonu: Filter: „Filtrovat“
3)předal jsem datagridu translator:
$grid->setTranslator($this->translator); – $this->translator je
\Kdyby\Translation\Translator
Ale jaksi to nic neudělalo jen mi to v debug baru u translatoru vypsalo chyby (chybí překlda filter a dalších položek zobrazených datagridu)
Problém asi je, že se nějak musí předat ten slovník, ale jak? V datagridu jsem žádnou vhodnou metodu nenašel…(samotný translator si slovník našel – je zobrazen v seznamu Loaded resources)..
díky za pomoc
Edit: aha, tak jsem zkusil dát $grid->setTranslator($this->translator->domain(‚datagrid‘)) a už to začíná překládat – jen to do tlačítka před ten překlad dalo ještě datagrid. – takže např. datagrid.Filtrovat
Editoval n.u.r.v. (7. 10. 2015 15:23)
- artemevsin
- Člen | 61
ahoj,
před chvíli jsem na to taky narazil – jde o to, že do row-actions se
nemá psát tag <td></td>, stačí jen
<button>Tlačítko</button>.
Kdyby to třeba někomu pomohlo
kikinet napsal(a):
MW napsal(a):
kikinet napsal(a):
Nemůžu to nikde najít, snad se nebudu opakovat.
…no přesně tak {define row-actions}
To ale není to co chci.
{define row-actions}
vytvoří NOVÝ sloupec s tlačítky. Já chci dát tlačítka do sloupcegrid-col-actions
, který se vytvoří při nastavení filtru.Ukázka na kódu. Grid pouze s filtrem.
<thead> <tr class="grid-columns"> <th class="grid-col-username">Username</th> <th class="grid-col-actions"></th> </tr> <tr class="grid-filters"> <th class="grid-col-username"><input type="text"></th> <th class="grid-col-actions"><input type="submit" value="Filter"></th> //Btn Filter </tr> </thead> <tbody> <tr> <td>A</td> <td class="grid-col-actions"></td> //Prázdná buňka </tr> <tr> <td>B</td> <td class="grid-col-actions"></td> //Prázdná buňka </tr> <tr> <td>C</td> <td class="grid-col-actions"></td> //Prázdná buňka </tr> </tbody>
Ukázka na kódu. Grid s filtrem a přidaným
{define row-actions}
.<thead> <tr class="grid-columns"> <th class="grid-col-username">Username</th> <th class="grid-col-actions"></th> </tr> <tr class="grid-filters"> <th class="grid-col-username"><input type="text"></th> <th class="grid-col-actions"><input type="submit" value="Filter"></th> //Btn Filter </tr> </thead> <tbody> <tr> <td>A</td> <td class="grid-col-actions"></td> //Pořád prázdná buňka <td>Update</td> //DALŠÍ buňka </tr> <tr> <td>B</td> <td class="grid-col-actions"></td> //Pořád prázdná buňka <td>Update</td> //DALŠÍ buňka </tr> <tr> <td>C</td> <td class="grid-col-actions"></td> //Pořád prázdná buňka <td>Update</td> //DALŠÍ buňka </tr> </tbody>
Chci, aby se „DALŠÍ buňka“ nevytvářela a „Update“ se vložil do „Pořád prázdná buňka“
- Azathoth
- Člen | 495
n.u.r.v. napsal(a):
Azathoth: Díky za radu, ale nějak jsem se zasekl:
1)k již existujícím slovníkům jsem přidal datagrid.cs.neon (kdyby-translator slovník načetl)
2)chtěl jsem zkusit např. přeložit tlačítko pro filtrování „Filter“ – dal jsem tedy do neonu: Filter: „Filtrovat“
3)předal jsem datagridu translator: $grid->setTranslator($this->translator); – $this->translator je \Kdyby\Translation\TranslatorAle jaksi to nic neudělalo jen mi to v debug baru u translatoru vypsalo chyby (chybí překlda filter a dalších položek zobrazených datagridu)
Problém asi je, že se nějak musí předat ten slovník, ale jak? V datagridu jsem žádnou vhodnou metodu nenašel…(samotný translator si slovník našel – je zobrazen v seznamu Loaded resources)..
díky za pomoc
Edit: aha, tak jsem zkusil dát $grid->setTranslator($this->translator->domain(‚datagrid‘)) a už to začíná překládat – jen to do tlačítka před ten překlad dalo ještě datagrid. – takže např. datagrid.Filtrovat
to s tím přidáním datagrid., koukni se, jestli to správně překládá. to už není otázka datagridu, ale kdyby translation. koukni se, co ti jde do překladu a na co se to přeloží.
- n.u.r.v.
- Člen | 485
Mno, koukal jsem do datagridu a některé položky (např. paginaotr) je překládán až v latte šabloně datagrid.latte a některé jsou překládány v Datagrid.php (např. formulářové prvky)
Ty texty co se překládají v latte jsou přeloženy správně, ale ty co jsou v tom Datagrid.php mají přidáno do překladu ten název slovníku…
Nevím čím to je… Jediný co jsem našel, tak je u tebou doporučované metody translator->domain() napsáno v komentáři toto: messagePrefix – tak jestli to nemá sloužit k nějakému přidávání textu k překladu…
Edit: Tak změna – už to začíná fungovat, stačilo přidat do filterFormFactory toto:
$form->addSubmit('filter', 'Filter')->getControlPrototype()->class = 'btn btn-next btn-sm';
$form->addSubmit('cancel', 'Cancel')->getControlPrototype()->class = 'btn btn-prev btn-sm';
A pak už to šlo.
Ale je tu ještě jeden problém – u filtru mám jeden selectbox kam načítám hodnoty DB a ty tedy nemůžu mít přeloženy (text vkládá do db user). U těchto položek se mi pořád vkládá před text slovo datagrid.
Je nějak možné vypnout u konkrétního prvku překlad?
Editoval n.u.r.v. (12. 10. 2015 14:34)
- Efault
- Člen | 2
Zdravim,
mohl by mi nekdo poradit, jak u datagridu dosahnout jevu z Full dema,
kdy pri stisnuti tlacitka EDIT dojde k vyfiltrovani jen konkretniho radku?
Muj kod v zasade nevybocuje ze zdrojaku full dema na githubu .
class DatagridPresenter extends BasePresenter
{
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function createComponentGrid()
{
$grid = new Nextras\Datagrid\Datagrid;
$grid->addColumn('id')->enableSort();
$grid->addColumn('name', 'Jméno')->enableSort();
$grid->addColumn('email')->enableSort();
$grid->setPagination(3, $this->getDataSourceSum);
$grid->setDatasourceCallback($this->getDataSource);
$grid->setEditFormFactory($this->editData);
$grid->setFilterFormFactory(function() {
$form = new Nette\Forms\Container;
$form->addText('name');
return $form;
});
$grid->setEditFormCallback($this->saveData);
return $grid;
}
public function getDataSourceSum($filter, $order)
{
return $this->prepareDataSource($filter, $order)->count('*');
}
public function getDataSource($filter, $order, Paginator $paginator = NULL)
{
$selection = $this->prepareDataSource($filter, $order);
if ($paginator) {
$selection->limit($paginator->getItemsPerPage(), $paginator->getOffset());
}
return $selection;
}
public function prepareDataSource($filter, $order)
{
$filters = array();
foreach ($filter as $k => $v) {
if ($k == 'id' || is_array($v))
$filters[$k] = $v;
else
$filters[$k. ' LIKE ?'] = "%$v%";
}
$selection = $this->database->table('datagrid')->where($filters);
if ($order[0])
$selection->order(implode(' ', $order));
return $selection->order('id ASC');
}
public function editData($row) {
$form = new Nette\Forms\Container;
$form->addText('name');
$form->addText('email');
!$row ?: $form->setDefaults($row);
return $form;
}
public function saveData(Nette\Forms\Container $form)
{
$data = $form->getValues();
$this->database->table('datagrid')->where('id', $data->id)->update($data);
}
}
- MW
- Člen | 626
Zdravím a prosím o radu.
Mám grid, kde mám mimo jiné sloupec USERS_ID a také EDITOR.
V tabulce ukládám obojí jako ID z tabulky USERS.
Jako Datasource pro grid mám
public function getData() {
return $this->database->table('bankaccess');
}
Přeložit si v gridu ID na jméno jde krásně u USERS_ID přímo v šabloně gridu:
{define col-users_id}
<td>
{$row->users->name}
</td>
{/define}
Toto funguje podle kliče nazvu sloupce users_id a tabulky users, kde je name, ale jak toto udělám pro sloupec EDITOR, který potřebuju joinovat ze stejné tabulky USERS?
Moc díky !
EDIT:
prozatím takto, ale nelíbí se mi to:
public function getData() {
return $this->database->table('bankaccess')->select('bankaccess.*, (SELECT name FROM users WHERE users.id = bankaccess.created_by) AS editor');
}
a
{define col-created_by}
<td>
<i>{$row->editor}</i>
</td>
{/define}
Editoval MW (1. 12. 2015 14:59)
- MW
- Člen | 626
Ještě prosím jedna věc:
pokud si manuálně vykresluji filtr pro sloupec:
{define col-filter-users_name}
{input users_id, class => 'input-sm form-control'}
{/define}
tak musím přesto mít ve setFilterFormFactory alespoň
$form->addHidden(‚users_name‘) jinak se me nic nevykresli… přesto že
tam mám
form->addSelect('users_id', 'Uživatel', $this->bankModel->getUsers())->setPrompt('Zvolte');
nebo dělám něco blbe?
Díky !
- MW
- Člen | 626
Napadá vás někoho, jak udělat export do csv tak jak je grid vizualizovaný? Tedy vč. aplikovaných formátů..
Když to udělam přes $this->getData(); tak je do dotaz do db ale pokud
tam mam třeba formáty v latte jako
{$cell|date:‚Y-m-d‘}
nebo cizi tabulku …
Lze si nějak sáhnout na vyrendrovaná data?
Přes JS se mě to moc nelíbí…
Díky!
Editoval MW (8. 1. 2016 9:57)
- IlCommendatore
- Člen | 8
Šlo by nějak do headeru přidat css třídu?
<th class=„col-name hidden-xs“>Title</th>
(jinak než jQuery)
Editoval IlCommendatore (22. 1. 2016 15:52)
- hury
- Člen | 56
Aloha,
par otazek, prosel jsem diskusi a nenasel odpoved, mozna jsem to prehlidl
- jak udelam externi filter? (abych mohl filter zobrazit nad gridem, nikoli u jeho sloupcu)
- jak mohu jednoduse filtrovat z jednoho inputu pres vice sloupcu z DB (input, do krereho neco napisu a hleda to jmeno OR prijmeni OR adresa OR jina_tabulka.email)
- jak nastavim template celemu gridu? (ten co je v defaultu Datagrid.latte)
- je tento projekt jeste zivy?
diky za info :-)
- H0w4rd
- Člen | 96
Azathoth napsal(a):
když si stahnete nejnovější verzi datagridu, najdete tam event onRender. Ten se spustí před vykreslením, tedy hned po připojení do stromu komponent. Tehdy už je datagrid inicializovaný a template k dispozici. tak proměnnou do template pošlete v callbacku, který dáte do eventu onRender. asi takhle:
$grid = new Datagrid(); ... $grid->onRender[] = function(Datagrid $datagrid) { $datagrid->template->stavy = $this->stavy; }
řešení je rychlé a elegantní. v dokumentaci tenhle event není, protože je z mého asi týden starého pullrequestu.
@petrf @H0w4rd udělejte to takhle, je to čisté a leší než statická proměnná.
Ještě dodatečně díky za ten onRender, který je už nějakou dobu
v nové verzi 2.1.3.
Podařilo se mi tímhle docílit plno skvělých featur :)
A taky jsem mohl konečně zrušit statické prasárny.
- pfilipek
- Člen | 25
Zdravím,
chtěl jsem se zeptat, zda je to bug nebo je to tak správně.
Jako model používám Nextras/ORM a mám entitu Test, která
má virtuální property test a pokud ji chci dát na první
pozici v tabulce tak mi to vyhodí chybu: Result row does not have
‚test‘ column., ale když dám na první pozici id,
tak to funguje. Více napoví následující ukázky kódů.
Funkční řešení:
<?php
protected function createComponentTable() {
$grid = $this->getDataGrid();
$grid->addColumn('id', '#');
$grid->addColumn('test', 'Test');
$grid->addColumn('name', 'Název');
$grid->addCellsTemplate(__DIR__ . '/templates/Extension/table.columns.latte');
$grid->setDatasourceCallback(function($filter, $orders) {
$extensions = $this->orm->tests->findAll($filter);
return $extensions;
});
return $grid;
}
?>
Nefunkční řešení:
<?php
protected function createComponentTable() {
$grid = $this->getDataGrid();
$grid->addColumn('test', 'Test');
$grid->addColumn('id', '#');
$grid->addColumn('name', 'Název');
$grid->addCellsTemplate(__DIR__ . '/templates/Extension/table.columns.latte');
$grid->setDatasourceCallback(function($filter, $orders) {
$extensions = $this->orm->tests->findAll($filter);
return $extensions;
});
return $grid;
}
?>
Můžete mi někdo poradit co dělám špatně?
- petrknap
- Člen | 6
Zdravím,
mám relativně jednoduchý grid s filtrem a potřebuji dostat svůj obsah pod tlačítko filter.
+---------+------+----------+
| sloupec | akce | |
| [input] | | [filter] |
+---------+------+----------+
| A | edit | |
| B | edit | |
+---------+------+----------+
Napadlo mne editovat bloky col-filter-*
, ale ty jsou určeny
k editaci hlavičky. Zatím nejblíže jsem se dostal skrz prázdný sloupec,
{define col-}{/define}
a
{redefine row-actions}Edit{/redefine}
, ale to je žalostné
řešení.
+---------+-+----------+
| sloupec | | |
| [input] | | [filter] |
+---------+-+----------+
| A | | edit |
| B | | edit |
+---------+-+----------+
Nevíte někdo jak toto spáchat?
- igor.pocta
- Člen | 100
Ahoj, nemáte někdo tento Datagrid napojen na Nextras/Orm a vyřešené filtrování s LIKE?
Já už si nějak spáchal stránkování, inline editaci ale s tím filtrem mám problém :/
public function createComponentGrid()
{
$grid = new Datagrid();
$grid->addCellsTemplate(__DIR__ . '/../templates/Grid/@bootstrap3.datagrid.latte');
$grid->addColumn('id')->enableSort();
$grid->addColumn('vorna')->enableSort();
$grid->addColumn('nachn')->enableSort();
$grid->setPagination(10, function($filter, $order) {
$selection = $this->prepareData($filter, $order);
return $selection->count();
});
$grid->setRowPrimaryKey('id');
$grid->setDatasourceCallback(function($filter, $order, $page) {
return $this->prepareData($filter, $order, $page);
});
$grid->setEditFormFactory(function($row) {
$form = new Container;
//$form->addDateTimePicker('created_time');
$form->addText('vorna')
->setRequired();
$form->addText('nachn')
->setRequired();
// set your own conditions
// set your own fileds, inputs
// these buttons are not compulsory
$form->addSubmit('save', 'Save data')->getControlPrototype()->class = 'btn btn-primary';
$form->addSubmit('cancel', 'Cancel editing')->getControlPrototype()->class = 'btn';
if ($row) {
$form->setDefaults($row->toArray());
}
return $form;
});
$grid->setEditFormCallback(function(Container $form){
$values = $form->getValues();
/** @var \App\Model\Employee $employee */
$employee = $this->orm->employees->getById($values["id"]);
$employee->nachn = $values["nachn"];
$employee->vorna = $values["vorna"];
$this->orm->employees->persistAndFlush($employee);
});
return $grid;
}
private function prepareData($filter, $order, $page = null) {
// Active users only
$selection = $this->orm->employees->findBy(["active" => 3]);
// Paginator
if($page)
$selection = $selection->limitBy($page->itemsPerPage, $page->page * $page->itemsPerPage);
// Order
if($column = $order[0]) {
if($order[1] == 'ASC') {
$selection = $selection->orderBy($column, ICollection::ASC);
} else {
$selection = $selection->orderBy($column, ICollection::DESC);
}
}
return $selection;
}
Editoval igor.pocta (18. 6. 2016 20:19)
- ViPEr*CZ*
- Člen | 817
hrach napsal(a):
@ViPEr*CZ* mergnu a vydam verzi :) Posli.
OK. Mrknu se na to… jak to poupravím pošlu.
PS: možná mi pomůžeš… nemám s tím zkušenost… když si k sobě na
disk naklonuju repo datagridu, upravím, tak jak to pak přes git můžu poslat
zpět jako pull request, aby jsi to mohl mergnout?
Zatím jsem si s tím moc neměl možnost pohrát… naposledy to po mě
chtělo heslo a samozřejmě přes můj účet mi to akorát řeklo, že
nemůžu zapisovat. Jde to přímou editací přes www rozhranní, ale to je
samozřejmě nepohodlné.
Za případné nakopnutí díky.
- hrach
- Člen | 1838
@n.u.r.v – upravy redefine macra jsem mergnul do masteru: https://github.com/…acros/pull/8.
- n.u.r.v.
- Člen | 485
díky, tak tuhle chybu to vyřešilo, teď dostávám tuto noticku přímo v souboru
datagrid-src-Datagrid.latte–ca34421b9a.php přímo v temp/cache/latte/
cache jsem smazat zkoušel…
- n.u.r.v.
- Člen | 485
Ahoj, mám ještě problém s aktualizací přes composer
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for nextras/datagrid dev-master -> satisfiable by nextras/datagrid[dev-master].
- nextras/datagrid dev-master requires nextras/latte-macros ~1.1.0 -> satisfiable by nextras/latte-macros[v1.1.0, v1.1.1, v1.1.2] but these conflict with your requirements or minimum-stability.
V json mám toto:
{
"name": "nette/web-project",
"description": "Nette: Standard Web Project",
"type": "project",
"license": ["MIT", "BSD-3-Clause", "GPL-2.0", "GPL-3.0"],
"require": {
"php": ">= 5.6.0",
"nette/application": "^2.4",
"nette/bootstrap": "^2.4",
"nette/caching": "^2.4",
"nette/database": "^2.4",
"nette/di": "^2.4",
"nette/finder": "^2.4",
"nette/forms": "^2.4",
"nette/http": "^2.4",
"nette/mail": "^2.4",
"nette/robot-loader": "^2.4",
"nette/safe-stream": "^2.3",
"nette/security": "^2.4",
"nette/utils": "^2.4",
"latte/latte": "^2.4",
"tracy/tracy": "^2.4",
"nextras/datagrid": "dev-master",
"nextras/latte-macros": "dev-master"
}
}
Prosím o radu co s tím. díky
- Jan Tvrdík
- Nette guru | 2595
@simPod měnit minimum-stability je skoro vždycky chyba; stačí
když tam místo dev-master
dá @dev