Nový Nette DataGrid pro Bootstrap s možností vypsat strom

kralik
Člen | 230
+
0
-

Ahoj,
trochu mě začal zlobit DataGrid a vůbec nevím proč.
Trápí mne to, že když chci použít custom filtr a nebo rozkliknout subgrid tak se grid chová tak, že napíší nějaké jmnéno do filtru příjmení a kliknu na Filtr.
Nic se nestane, ani žádnou chybu do konzole nedostanu, resp. do konzoli dostanu GET … 200 OK
Ale až Stisknutím F5(nebo dám refresh stránky) se správně vyfiltrují data.

Nesetkali jste se s tímto chováním?

Zápasím s tím už dva dni a zatím nevím co s tím je. Řekl bych, že se mi asi budou někde prát JS mezi sebou…

Moc díky
Tom

Editoval kralik (15. 7. 2015 12:10)

mesour
Nette Blogger | 236
+
0
-

kralik napsal(a):

Ahoj,
trochu mě začal zlobit DataGrid a vůbec nevím proč.
Trápí mne to, že když chci použít custom filtr a nebo rozkliknout subgrid tak se grid chová tak, že napíší nějaké jmnéno do filtru příjmení a kliknu na Filtr.
Nic se nestane, ani žádnou chybu do konzole nedostanu, resp. do konzoli dostanu GET … 200 OK
Ale až Stisknutím F5(nebo dám refresh stránky) se správně vyfiltrují data.

Nesetkali jste se s tímto chováním?

Zápasím s tím už dva dni a zatím nevím co s tím je. Řekl bych, že se mi asi budou někde prát JS mezi sebou…

Moc díky
Tom

Stáhni si dev-master už se to tu s custom filtrem řešilo, zatím je to fixnuté pouze tam.

kralik
Člen | 230
+
0
-

Ahoj,
právě že jsem zkoušel dev-master verzi, ale grid se chová stejně.
Tak nevím čím by to ještě mohlo být.
Všechny JS jsem zneplatnil abych vyloučil nějaké problémy a grid se cová stejně, tedy zobrazí správná data až po refresh.

Díky

jEhLa
Člen | 70
+
0
-

Zdravím,
jde nějak nastavit text Buttonu ve sloupci actions, podle proměnné právě zobrazovaného řádku? Jako u addText třeba callback?

$actions = $grid->addActions('');
$actions->addButton()
	->setClassName('btn-default')
	->setText('Zpracovat') //tento text potřebuji změnit podle toho jestli $row['status'] je 1,2,nebo 3
	->setIcon('right glyphicon-triangle-right') //tady to stejné
	->setAttribute('href', new \Mesour\DataGrid\Components\Link('Requests:show', array(
		'id' => '{id}'
)));

Dalo by se to vyřešit třeba takto:

$grid->addText('')
	->setOrdering(false)
	->setCallback(function($row){
		$button = \Nette\Utils\Html::el('a')
				->addAttributes(
						array(
							'href'=>$this->link('Requests:show',array('id'=>$row['id'])),
							'class'=>'btn btn-default'
							)
						);
		if($row['request_status'] == 3){
			$button->setText('Upravit');
		}
		else {
			$button->setText('Zpracovat');
		}
		return $button;
	});

Ale to se mi nezdá jako moc dobrý řešení. Nebo jo?

Editoval jEhLa (21. 7. 2015 11:21)

mesour
Nette Blogger | 236
+
0
-

kralik napsal(a):

Ahoj,
právě že jsem zkoušel dev-master verzi, ale grid se chová stejně.
Tak nevím čím by to ještě mohlo být.
Všechny JS jsem zneplatnil abych vyloučil nějaké problémy a grid se cová stejně, tedy zobrazí správná data až po refresh.

Díky

Dořešeno v mailu :-) Pro úplnost se jednalo o to, že @kralik používal nette.ajax.js od @VojtěchDobeš. Tyhle problémy už nebudou nastávat s verzí 2.0.7, která bude zveřejněná už zanedlouho ;-)

Editoval mesour (25. 7. 2015 20:51)

mesour
Nette Blogger | 236
+
0
-

jEhLa napsal(a):

Zdravím,
jde nějak nastavit text Buttonu ve sloupci actions, podle proměnné právě zobrazovaného řádku? Jako u addText třeba callback?

$actions = $grid->addActions('');
$actions->addButton()
	->setClassName('btn-default')
	->setText('Zpracovat') //tento text potřebuji změnit podle toho jestli $row['status'] je 1,2,nebo 3
	->setIcon('right glyphicon-triangle-right') //tady to stejné
	->setAttribute('href', new \Mesour\DataGrid\Components\Link('Requests:show', array(
		'id' => '{id}'
)));

Dalo by se to vyřešit třeba takto:

$grid->addText('')
	->setOrdering(false)
	->setCallback(function($row){
		//...
	});

Ale to se mi nezdá jako moc dobrý řešení. Nebo jo?

Asi jedině, akorát klidně můžeš použít Button místo toho dělat všechno z Nette\Utils\Html ;-) Asi takto:

$grid->addText('')
	->setOrdering(false)
	->setCallback(function($row) {
		$button = new Mesour\Components\Button;
        $button->setPresenter($this); // předpokládám, že v $this je Nette\..\UI\Presenter a verze PHP je vyšší nebo rovna 5.4

		//další nastavení na $button, ikona atp

		if ($row['request_status'] == 3) {
            $button->setText('Upravit');
        } else {
            $button->setText('Zpracovat');
        }
        return $button;
	});

Editoval mesour (25. 7. 2015 21:03)

mesour
Nette Blogger | 236
+
0
-

Zdravím všechny :-)

Takže do dev-master jsem hodil nové úpravy ;-) Jedná se o dlouho očekávané nové featury. Zatím to je pouze v dev-master, není tam žádný BC break. Takže to nechám do konce příštího týdne pouze takto, prosím testujte a pokud vás napadne ještě nějaká vychytávka, kterou tam přidat, tak dejte vědět. Kolem toho konce příštího týdne z toho udělám 2.0.7 ;-)

Co je nového a co testovat:

1. Přidal jsem možnost nastavit relace plus k nim také inline edit (select s daty z číselníku). Pro info, DibiDataSource to neumí, kvůli tomu, že se posílá pouze \DibiDataSource a ne \DibiFluent :( Názorně se používá takto, pouze nastavím na DataSourcu, ostatní vše už se vyřeší automaticky:

//\Mesour\DataGrid\IDataSource::setRelated($table, $key, $column, $as = NULL, $primary = 'id')
$source->setRelated('group', 'group_id', 'name', 'group_name');

Ta relace tam přidá sloupec „group_name“, ale kdyby se nespecifikovaly ostatní, tak by vybral jen ten „group_name“ a grid by řval, že ID v datech neexistuje. Už jsem tam i pro ten případ upravil exceptionu, aby řekla že se mají nastavit sloupce v SELECTu, pokud jsou nastavené nějaké relace, pokud nejsou, tak řve to samé jako dřív.

$source = new NetteDbDataSource(
	$this->db->table('user')
		->select('user_id,user.name,action,surname,email')
		->select('last_login,amount,avatar,order,timestamp,group_id'),
	$this->db
);

Také je potřeba poslat v konstruktoru jako druhý parametr \Nette\Database\Context. U ArrayDataSource je to zase trochu jiné, pak popíši v dokumentaci. Pokud by bylo hodně požadavků, aby toto uměl DataSource pro DIBI, tak by bylo možné udělat něco jako DibiFluentDataSource, tím by se zachovala zpětná kompatibilita a bylo by možné to mít i pro DIBI.

2. Pořád jste chtěli implementovat nette.ajax.js od @VojtěchDobeš. Nakonec jsem ale místo nějakého nastavení a dalších blbostí udělal to, že reload snippetů je nyní součástí gridu, takže už nebude potřeba mít jakýkoliv nette.ajax nebo jquery.nette, ale vše bude fungovat samo. Tím jsem také odstranil jednu položku z required ;-)

3. Protože přibyly relace, tak nastal problém s tím, že třeba tabulka group měla sloupec name a tabulka user také. Na sloupcích, které dědí od \Mesour\Column\Filter přibyla metoda setRealColumnName.

$grid->addText('name', 'Name')
	->setRealColumnName('user.name');

Editoval mesour (6. 8. 2015 21:47)

cecko
Člen | 1
+
0
-

mesour napsal(a):

Zdravím všechny :-)

Takže do dev-master jsem hodil nové úpravy ;-) Jedná se o dlouho očekávané nové featury. Zatím to je pouze v dev-master, není tam žádný BC break. Takže to nechám do konce příštího týdne pouze takto, prosím testujte a pokud vás napadne ještě nějaká vychytávka, kterou tam přidat, tak dejte vědět. Kolem toho konce příštího týdne z toho udělám 2.0.7 ;-)

Co je nového a co testovat:

1. Přidal jsem možnost nastavit relace plus k nim také inline edit (select s daty z číselníku). Pro info, DibiDataSource to neumí, kvůli tomu, že se posílá pouze \DibiDataSource a ne \DibiFluent :( Názorně se používá takto, pouze nastavím na DataSourcu, ostatní vše už se vyřeší automaticky:

//\Mesour\DataGrid\IDataSource::setRelated($table, $key, $column, $as = NULL, $primary = 'id')
$source->setRelated('group', 'group_id', 'name', 'group_name');

Ta relace tam přidá sloupec „group_name“, ale kdyby se nespecifikovaly ostatní, tak by vybral jen ten „group_name“ a grid by řval, že ID v datech neexistuje. Už jsem tam i pro ten případ upravil exceptionu, aby řekla že se mají nastavit sloupce v SELECTu, pokud jsou nastavené nějaké relace, pokud nejsou, tak řve to samé jako dřív.

$source = new NetteDbDataSource(
	$this->db->table('user')
		->select('user_id,user.name,action,surname,email')
		->select('last_login,amount,avatar,order,timestamp,group_id'),
	$this->db
);

Také je potřeba poslat v konstruktoru jako druhý parametr \Nette\Database\Context. U ArrayDataSource je to zase trochu jiné, pak popíši v dokumentaci. Pokud by bylo hodně požadavků, aby toto uměl DataSource pro DIBI, tak by bylo možné udělat něco jako DibiFluentDataSource, tím by se zachovala zpětná kompatibilita a bylo by možné to mít i pro DIBI.

2. Pořád jste chtěli implementovat nette.ajax.js od @VojtěchDobeš. Nakonec jsem ale místo nějakého nastavení a dalších blbostí udělal to, že reload snippetů je nyní součástí gridu, takže už nebude potřeba mít jakýkoliv nette.ajax nebo jquery.nette, ale vše bude fungovat samo. Tím jsem také odstranil jednu položku z required ;-)

3. Protože přibyly relace, tak nastal problém s tím, že třeba tabulka group měla sloupec name a tabulka user také. Na sloupcích, které dědí od \Mesour\Column\Filter přibyla metoda setRealColumnName.

$grid->addText('name', 'Name')
	->setRealColumnName('user.name');

Ahoj,

zkousel jsem pouzit propojeni na relaci dle tveho navodu:

<?php
//					relacni		klic	  sloupec	vlastni		primarni
//					tabulka							nazev		klic
$source->setRelated('pokoje', 'pokoj_id', 'nazev','pokoj_nazev','pokoj_id');
?>

nette my ovsem vraci exception
No reference found for $rezervace->pokoje

pritom, kdyz se podivam do debuggeru, tak dotaz

SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = DATABASE() AND REFERENCED_TABLE_NAME IS NOT NULL AND TABLE_NAME = ‚rezervace‘

skutecne vraci referenci:
constraint_name rezervace_ibfk1
column_name pokoj_id
referenced_table_name pokoje
referenced_column_name pokoj_id

obe tabulky jsou ulozeny na INNODB a z composeru mam stazeny dev-master

Muzes mi prosim poradit, co delam spatne? Mockrat dekuji

mesour
Nette Blogger | 236
+
0
-

cecko napsal(a):

mesour napsal(a):

Zdravím všechny :-)

Takže do dev-master jsem hodil nové úpravy ;-) Jedná se o dlouho očekávané nové featury. Zatím to je pouze v dev-master, není tam žádný BC break. Takže to nechám do konce příštího týdne pouze takto, prosím testujte a pokud vás napadne ještě nějaká vychytávka, kterou tam přidat, tak dejte vědět. Kolem toho konce příštího týdne z toho udělám 2.0.7 ;-)

Co je nového a co testovat:

1. Přidal jsem možnost nastavit relace plus k nim také inline edit (select s daty z číselníku)…

Ahoj,

zkousel jsem pouzit propojeni na relaci dle tveho navodu:

<?php
//					relacni		klic	  sloupec	vlastni		primarni
//					tabulka							nazev		klic
$source->setRelated('pokoje', 'pokoj_id', 'nazev','pokoj_nazev','pokoj_id');
?>

nette my ovsem vraci exception
No reference found for $rezervace->pokoje…

Muzes mi prosim poradit, co delam spatne? Mockrat dekuji

Ahoj, to je zvláštní. Můžeš mi prosím poslat create scripty i s altery? Ať to můžu otestovat na tvém schématu :-) Klidně na http://mesour.com/contact/

George
Člen | 8
+
0
-

Zdravim,

vzhledem k potrebe subgridu jsem sahl po tomto datagridu, ale hned na zacatku jsem narazil na nekolik bugu (tedy doufam, ze to nejsou moje bugy ;) )

Jako datasource pouzivam ArrayDataSource.
Data ziskavam v JSON formatu a nasledne je prevadim na Array.

Na test mam v presenteru takovyto zakladni grid

protected function createComponentGridTest($name)
{
	$json = '{	"status":1,
			  	"data":[
						{"id":1,"value1":"1111","value2":"2222","value3":true,"value4":false},
						{"id":2,"value1":"3333","value2":null,"value3":false,"value4":true}
				]
	}';

	$arr = json_decode($json, true)['data'];

	$source = new ArrayDataSource($arr);
	$source->setPrimaryKey('id');

	$grid = new Grid($this, $name);
	$grid->setDataSource($source);
	$grid->enablePager(20);
	$grid->enableFilter();
	$grid->enableExport(__DIR__ . '/../../temp/cache');

	return $grid;
}

Prvni bug spociva v tom, ze jakmile data obsahuji hodnotu null, tak pri nacteni gridu dostanu do javascript konzole hlasku „Uncaught TypeError: Cannot read property ‚replace‘ of null“ a nefunguje dropdown menu filtru.
Napr. s daty ktere jsem zde pouzil funguje filtr pro polozky ‚id‘ a ‚value1‘, ale pro polozku ‚value2‘, ‚value3‘ a ‚value4‘ jiz nejde filtr rozkliknout.
Mohu to samozrejme resit zamenou null za "", ale myslim, ze by si to mel osetrit grid.

Druhy bug se tyka exportu. V dev-master verzi dostanu po kliknuti na button „Export to csv“ chybove hlaseni

Call to a member function fetchAll() on a non-object
File: mesour/datagrid/src/DataSources/ArrayDataSource.php:68
68:            return $this->getExportSelect()->fetchAll();

Teprve pokud aktivuji filtr, tak export funguje.
Ve verzi 2.0.6 export funguje i bez filtru, takze chybka v devel verzi.

Treti bug nevim jestli je bug nebo jen delam neco spatne. Pokud je v datech hodnota true nebo false, napr. v mem pripade value3:true, tak Grid misto true zobrazi 1 a misto false 0 coz beru jako ok. Filtr mi da ale na vyber hodnoty true a false a at vyberu kteroukoliv, tak nevrati zadna data a grid je prazdny.

Dalsi a zatim posledni co me zajima je pouziti custom filtru.
Pokud si nadefinuji vlastni filtr, tak mi nevyhledava zadany retezec case insensitive a take vyhledava jen cely retezec. Stacilo by mi kdyby na retezec pouzil CONTAINS a case insensitive.

Snad jsem to popsal srozumitelne :)
Jsou to bugy nebo delam neco spatne ?

Jinak pekny grid.

Diky

Editoval George (24. 8. 2015 21:18)

petak23
Člen | 16
+
0
-

Pekný deň,
chcem sa opýtať. Mám Gride aj sub-grid. Ale niektoré položky hlavného gridu neobsahujú obsah pre sub-grid. Je možné pre tieto konkrétne riadky výpis sub-grid-u vypnúť? T.j. aby sa mi tam nezobrazovalo ani to +.
Vďaka.

Phalanx
Člen | 310
+
0
-

Ahoj, dnes jsem přešel v verze 2.0.5 na 2.0.6 a custom filtry mi nefiltrují (standartní ano).

Uncaught TypeError: Cannot set property ‚filterValues‘ of undefined
<script>mesour.dataGrid[„grid“].filterValues = [];</script>

Chci na tuto chybu jen upozornit. Přešel jsem zpět k verzi 2.0.5

Re4DeR
Člen | 71
+
0
-

Ahoj, perfektní. Můžu se zeptat: je možné, aby se editable buňka uložila i při kliknutí jinam (=bez entru) ?
s js se moc nekamarádím :(

roman.campula
Člen | 60
+
0
-

Zdravím,
potvrzuji, že ve verzi 2.0.6 nefunguje standardní filtr, vyhazuje hlášku Uncaught TypeError: Cannot read property ‚replace‘ of null

roman.campula
Člen | 60
+
0
-

Kromě toho, je možné nějak získat data z řádku DB, která pak použiji v zobrazení tlačítka?

Níže uvedený PHP kód funguje, vygeneruje to cca:

<a data="123"></a>
$actions->addButton()
        ->addAttribute("data", "{id}")

Níže uvedený PHP kód však funguje, vygeneruje to cca:

<a data="Text {id}"></a>
$actions->addButton()
        ->addAttribute("data", "Text {id}")

Já právě potřebuji to číslo ID dále zpracovávat (zjistit podle něho něco z DB) a pak zobrazit ne ID, ale něco jiného. Jakmile však použiji druhý uvedený tvar, k ID už se nemohu dostat, a to jak v prostém výpise, tak i třeba ho použít jako parametr funkce.

kralik
Člen | 230
+
0
-

Ahoj,
snažím se zprovoznit novou feature ve verzi 2.0.7, resp. verzi dev, ale nedaří se mi.
Jedná se o inline editaci FK do tabulky.

<?php
$source->setRelated('group', 'group_id', 'name', 'group_name');
?>

Podařilo se vám to někomu zprovoznit?
Nevím kam přesně s tím databse context
Chyba: „Related require set Nette database context in constructor.“

Super by byl příklad přímo v dokumentaci.

Moc díky

kralik
Člen | 230
+
0
-

Ahoj,
ještě bych rád požádal o radu.
Je možné nějak dostat do Presenteru info, že je použit ten a ten filtr s hodnotou?
třeba $filtr[‚CreateName‘] = ‚Svoboda‘;

Na základě tohoto bych pak potřeboval provést $this->redrawControl(‚infoSnippet‘);

Je toto možné nějak provést?

Moc díky

kralik
Člen | 230
+
0
-

cecko napsal(a):

mesour napsal(a):

Zdravím všechny :-)

Takže do dev-master jsem hodil nové úpravy ;-) Jedná se o dlouho očekávané nové featury. Zatím to je pouze v dev-master, není tam žádný BC break. Takže to nechám do konce příštího týdne pouze takto, prosím testujte a pokud vás napadne ještě nějaká vychytávka, kterou tam přidat, tak dejte vědět. Kolem toho konce příštího týdne z toho udělám 2.0.7 ;-)

Co je nového a co testovat:

1. Přidal jsem možnost nastavit relace plus k nim také inline edit (select s daty z číselníku). Pro info, DibiDataSource to neumí, kvůli tomu, že se posílá pouze \DibiDataSource a ne \DibiFluent :( Názorně se používá takto, pouze nastavím na DataSourcu, ostatní vše už se vyřeší automaticky:

//\Mesour\DataGrid\IDataSource::setRelated($table, $key, $column, $as = NULL, $primary = 'id')
$source->setRelated('group', 'group_id', 'name', 'group_name');

Ta relace tam přidá sloupec „group_name“, ale kdyby se nespecifikovaly ostatní, tak by vybral jen ten „group_name“ a grid by řval, že ID v datech neexistuje. Už jsem tam i pro ten případ upravil exceptionu, aby řekla že se mají nastavit sloupce v SELECTu, pokud jsou nastavené nějaké relace, pokud nejsou, tak řve to samé jako dřív.

$source = new NetteDbDataSource(
	$this->db->table('user')
		->select('user_id,user.name,action,surname,email')
		->select('last_login,amount,avatar,order,timestamp,group_id'),
	$this->db
);

Také je potřeba poslat v konstruktoru jako druhý parametr \Nette\Database\Context. U ArrayDataSource je to zase trochu jiné, pak popíši v dokumentaci. Pokud by bylo hodně požadavků, aby toto uměl DataSource pro DIBI, tak by bylo možné udělat něco jako DibiFluentDataSource, tím by se zachovala zpětná kompatibilita a bylo by možné to mít i pro DIBI.

2. Pořád jste chtěli implementovat nette.ajax.js od @VojtěchDobeš. Nakonec jsem ale místo nějakého nastavení a dalších blbostí udělal to, že reload snippetů je nyní součástí gridu, takže už nebude potřeba mít jakýkoliv nette.ajax nebo jquery.nette, ale vše bude fungovat samo. Tím jsem také odstranil jednu položku z required ;-)

3. Protože přibyly relace, tak nastal problém s tím, že třeba tabulka group měla sloupec name a tabulka user také. Na sloupcích, které dědí od \Mesour\Column\Filter přibyla metoda setRealColumnName.

$grid->addText('name', 'Name')
	->setRealColumnName('user.name');

Ahoj,

zkousel jsem pouzit propojeni na relaci dle tveho navodu:

<?php
//					relacni		klic	  sloupec	vlastni		primarni
//					tabulka							nazev		klic
$source->setRelated('pokoje', 'pokoj_id', 'nazev','pokoj_nazev','pokoj_id');
?>

nette my ovsem vraci exception
No reference found for $rezervace->pokoje

pritom, kdyz se podivam do debuggeru, tak dotaz

SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = DATABASE() AND REFERENCED_TABLE_NAME IS NOT NULL AND TABLE_NAME = ‚rezervace‘

skutecne vraci referenci:
constraint_name rezervace_ibfk1
column_name pokoj_id
referenced_table_name pokoje
referenced_column_name pokoj_id

obe tabulky jsou ulozeny na INNODB a z composeru mam stazeny dev-master

Muzes mi prosim poradit, co delam spatne? Mockrat dekuji

Ahoj, prosím tě mohl by si poskytnou část kódy kde používáš $source->setRelated(‚…‘).
Nějak se mi nedaří to rozjet. Nevím co a kam s tím konstrukterem.
Moc díky.
Tom

esorimer
Člen | 114
+
0
-

Zdravím,
existuje nějaká podpora pro editaci enum sloupců? (Aby si uživatel mohl vybrat ze selectu …)

PS: A ještě jeden dotaz. Když se nepodří editace editovatelné cell, jak zobrazit chybu?

PSS: Jak můžu nastavit třídění podle více sloupců? Jde něco jako
$grid->setDefaultOrder('IF(price IS NULL, 0, 1)', 'ASC')->setDefaultOrder('price','ASC'); ?

Editoval esorimer (16. 10. 2015 14:04)

vojty
Člen | 19
+
0
-

Ahoj,

před časem jsem tady četl, že někdo pracuje na Doctrine data source. Nevíte, jak to s ním vypadá?

Díky.

mesour
Nette Blogger | 236
+
0
-

kralik napsal(a):

Ahoj,
ještě bych rád požádal o radu.
Je možné nějak dostat do Presenteru info, že je použit ten a ten filtr s hodnotou?
třeba $filtr[‚CreateName‘] = ‚Svoboda‘;

Na základě tohoto bych pak potřeboval provést $this->redrawControl(‚infoSnippet‘);

Je toto možné nějak provést?

Moc díky

Ahoj,

Updatuj na 2.0.7 a takto:

$filter = $grid->enableFilter();
$defaultFilterValues = $filter->getDefaultFilterValues();

Na starších verzích:

$grid->enableFilter();
$defaultFilterValues = $grid['filter']->settings;

Editoval mesour (2. 11. 2015 16:49)

mesour
Nette Blogger | 236
+
0
-

kralik napsal(a):

cecko napsal(a):

mesour napsal(a):

Zdravím všechny :-)

Ahoj,

zkousel jsem pouzit propojeni na relaci dle tveho navodu:

<?php
//					relacni		klic	  sloupec	vlastni		primarni
//					tabulka							nazev		klic
$source->setRelated('pokoje', 'pokoj_id', 'nazev','pokoj_nazev','pokoj_id');
?>

nette my ovsem vraci exception
No reference found for $rezervace->pokoje

pritom, kdyz se podivam do debuggeru, tak dotaz

SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = DATABASE() AND REFERENCED_TABLE_NAME IS NOT NULL AND TABLE_NAME = ‚rezervace‘

skutecne vraci referenci:
constraint_name rezervace_ibfk1
column_name pokoj_id
referenced_table_name pokoje
referenced_column_name pokoj_id

obe tabulky jsou ulozeny na INNODB a z composeru mam stazeny dev-master

Muzes mi prosim poradit, co delam spatne? Mockrat dekuji

Ahoj, prosím tě mohl by si poskytnou část kódy kde používáš $source->setRelated(‚…‘).
Nějak se mi nedaří to rozjet. Nevím co a kam s tím konstrukterem.
Moc díky.
Tom

Ahoj, na zdrojáky se můžeš podívat na GitHubu :-)

mesour
Nette Blogger | 236
+
0
-

kralik napsal(a):

Ahoj,
snažím se zprovoznit novou feature ve verzi 2.0.7, resp. verzi dev, ale nedaří se mi.
Jedná se o inline editaci FK do tabulky.

<?php
$source->setRelated('group', 'group_id', 'name', 'group_name');
?>

Podařilo se vám to někomu zprovoznit?
Nevím kam přesně s tím databse context
Chyba: „Related require set Nette database context in constructor.“

Super by byl příklad přímo v dokumentaci.

Moc díky

Do konstruktoru toho data sourcu, když ho vytváříš :-)

Už jsem přidal ten příklad do dokumentace: http://grid.mesour.com/…on2/related/ :-)

Editoval mesour (3. 11. 2015 12:28)

mesour
Nette Blogger | 236
+
0
-

roman.campula napsal(a):

Kromě toho, je možné nějak získat data z řádku DB, která pak použiji v zobrazení tlačítka?

Níže uvedený PHP kód funguje, vygeneruje to cca:

<a data="123"></a>
$actions->addButton()
        ->addAttribute("data", "{id}")

Níže uvedený PHP kód však funguje, vygeneruje to cca:

<a data="Text {id}"></a>
$actions->addButton()
        ->addAttribute("data", "Text {id}")

Já právě potřebuji to číslo ID dále zpracovávat (zjistit podle něho něco z DB) a pak zobrazit ne ID, ale něco jiného. Jakmile však použiji druhý uvedený tvar, k ID už se nemohu dostat, a to jak v prostém výpise, tak i třeba ho použít jako parametr funkce.

Tohle už se tu řešilo, ideálně použít sloupec text a v callbacku vytvořit a vrátit instanci Buttonu :-)

mesour
Nette Blogger | 236
+
0
-

roman.campula napsal(a):

Zdravím,
potvrzuji, že ve verzi 2.0.6 nefunguje standardní filtr, vyhazuje hlášku Uncaught TypeError: Cannot read property ‚replace‘ of null

Jak už se tu řešilo, použít dev-master a teď už je to i v 2.0.7 :-)

mesour
Nette Blogger | 236
+
0
-

Re4DeR napsal(a):

Ahoj, perfektní. Můžu se zeptat: je možné, aby se editable buňka uložila i při kliknutí jinam (=bez entru) ?
s js se moc nekamarádím :(

Myslím, že tohle by nebyl moc dobrý nápad. Někdo by to třeba nechtěl uložit a jen by se překlikl vedle no a ono by se mu to uložilo…

mesour
Nette Blogger | 236
+
0
-

Phalanx napsal(a):

Ahoj, dnes jsem přešel v verze 2.0.5 na 2.0.6 a custom filtry mi nefiltrují (standartní ano).

Uncaught TypeError: Cannot set property ‚filterValues‘ of undefined
<script>mesour.dataGrid[„grid“].filterValues = [];</script>

Chci na tuto chybu jen upozornit. Přešel jsem zpět k verzi 2.0.5

Přejdi na 2.0.7 :-) Mezi 2.0.6 a 2.0.7 jsou jenom bug fixy a nové featury :)

mesour
Nette Blogger | 236
+
0
-

petak23 napsal(a):

Pekný deň,
chcem sa opýtať. Mám Gride aj sub-grid. Ale niektoré položky hlavného gridu neobsahujú obsah pre sub-grid. Je možné pre tieto konkrétne riadky výpis sub-grid-u vypnúť? T.j. aby sa mi tam nezobrazovalo ani to +.
Vďaka.

Ahoj, přidal jsem v 2.0.7 :-) V callbacku metody setCheckCallback na SubItemu a následně přes setDisabled.

http://grid.mesour.com/…ms/settings/#…

Editoval mesour (2. 11. 2015 16:57)

mesour
Nette Blogger | 236
+
0
-

George napsal(a):

Zdravim,

vzhledem k potrebe subgridu jsem sahl po tomto datagridu, ale hned na zacatku jsem narazil na nekolik bugu (tedy doufam, ze to nejsou moje bugy ;) )

Jako datasource pouzivam ArrayDataSource.
Data ziskavam v JSON formatu a nasledne je prevadim na Array.

Na test mam v presenteru takovyto zakladni grid

protected function createComponentGridTest($name)
{
	$json = '{	"status":1,
			  	"data":[
						{"id":1,"value1":"1111","value2":"2222","value3":true,"value4":false},
						{"id":2,"value1":"3333","value2":null,"value3":false,"value4":true}
				]
	}';

	$arr = json_decode($json, true)['data'];

	$source = new ArrayDataSource($arr);
	$source->setPrimaryKey('id');

	$grid = new Grid($this, $name);
	$grid->setDataSource($source);
	$grid->enablePager(20);
	$grid->enableFilter();
	$grid->enableExport(__DIR__ . '/../../temp/cache');

	return $grid;
}

Prvni bug spociva v tom, ze jakmile data obsahuji hodnotu null, tak pri nacteni gridu dostanu do javascript konzole hlasku „Uncaught TypeError: Cannot read property ‚replace‘ of null“ a nefunguje dropdown menu filtru.
Napr. s daty ktere jsem zde pouzil funguje filtr pro polozky ‚id‘ a ‚value1‘, ale pro polozku ‚value2‘, ‚value3‘ a ‚value4‘ jiz nejde filtr rozkliknout.
Mohu to samozrejme resit zamenou null za "", ale myslim, ze by si to mel osetrit grid.

Druhy bug se tyka exportu. V dev-master verzi dostanu po kliknuti na button „Export to csv“ chybove hlaseni

Call to a member function fetchAll() on a non-object
File: mesour/datagrid/src/DataSources/ArrayDataSource.php:68
68:            return $this->getExportSelect()->fetchAll();

Teprve pokud aktivuji filtr, tak export funguje.
Ve verzi 2.0.6 export funguje i bez filtru, takze chybka v devel verzi.

Treti bug nevim jestli je bug nebo jen delam neco spatne. Pokud je v datech hodnota true nebo false, napr. v mem pripade value3:true, tak Grid misto true zobrazi 1 a misto false 0 coz beru jako ok. Filtr mi da ale na vyber hodnoty true a false a at vyberu kteroukoliv, tak nevrati zadna data a grid je prazdny.

Dalsi a zatim posledni co me zajima je pouziti custom filtru.
Pokud si nadefinuji vlastni filtr, tak mi nevyhledava zadany retezec case insensitive a take vyhledava jen cely retezec. Stacilo by mi kdyby na retezec pouzil CONTAINS a case insensitive.

Snad jsem to popsal srozumitelne :)
Jsou to bugy nebo delam neco spatne ?

Jinak pekny grid.

Diky

Ahoj, vše jsem opravil, stačí upgradovat na 2.0.7 :-)

Pokud používáš custom filter a ArrayDataSource, tak potom koukni na následující dva odkazy, hlavně na ten druhý, jak se dělají podmínky:

Editoval mesour (2. 11. 2015 17:00)

mesour
Nette Blogger | 236
+
0
-

vojty napsal(a):

Ahoj,

před časem jsem tady četl, že někdo pracuje na Doctrine data source. Nevíte, jak to s ním vypadá?

Díky.

Ahoj, je to pořád rozpracované. Stojí to na tom, že grid bude muset k datům přistupovat jako k poli objektů a ne dvoudimenzionálnímu poli.

Pořád nemám čas se k tomu dostat. Jsem rád, že stíhám menší úpravy a bug fixy. Ale mám v plánu jednat s jedním člověkem, který by možná měl zájem na tom pracovat :-)

mesour
Nette Blogger | 236
+
0
-

Pro info, právě jsem udělal verzi 2.0.7.

Seznam změn zde: https://github.com/…s/tag/v2.0.7
API: http://apis.mesour.com/…taGrid2.0.7/

Snad jsem nikomu nezapomněl odpovědět. Kdyby ano, prosím ozvěte se :-)

esorimer
Člen | 114
+
0
-

Na mě se zapomělo

kralik
Člen | 230
+
0
-

mesour napsal(a):

kralik napsal(a):

Ahoj,
snažím se zprovoznit novou feature ve verzi 2.0.7, resp. verzi dev, ale nedaří se mi.
Jedná se o inline editaci FK do tabulky.

<?php
$source->setRelated('group', 'group_id', 'name', 'group_name');
?>

Podařilo se vám to někomu zprovoznit?
Nevím kam přesně s tím databse context
Chyba: „Related require set Nette database context in constructor.“

Super by byl příklad přímo v dokumentaci.

Moc díky

Do konstruktoru toho data sourcu, když ho vytváříš :-)

Už jsem přidal ten příklad do dokumentace: http://grid.mesour.com/…on2/related/ :-)

Ahoj,
zkouším a hraji si s „$source->setRelated()“ a narazil jsem na takovou věc, kdy se mi nedaří provést left join nad jednou tabulkou.
Mám pouze jednu tabulku např. User

<?php
Id,User,SureName,Manager
?>

zde nějaká data

<?php
1,Petr,Novák,2
2,Karel Svoboda,1
3,Pavel Rada,2
?>

V tabulce je nastaven FK pro Manager do stejne tabulky, tedy také tabulky User.

Potřebuji aby setRelated „vygeneroval“ query s LEFT JOIN.
Konkrétně pro tento případ toto

<?php
SELECT us.[Id],us.[Name],us.[SureName],
us2.[SureName] AS [Nadrizeny]
FROM [User] us
left join [User] us2 on us.[Manager] = us2.id
?>

přitom on generuje pouze toto

<?php
SELECT [Id],[Name],[SureName],[User].[SureName] AS [Nadrizeny]
FROM [User]
?>

Prosím projevilo se vám to také někomu?
Moc díky

mesour
Nette Blogger | 236
+
0
-

kralik napsal(a):

mesour napsal(a):

kralik napsal(a):

Ahoj,
snažím se zprovoznit novou feature ve verzi 2.0.7, resp. verzi dev, ale nedaří se mi.
Jedná se o inline editaci FK do tabulky.

<?php
$source->setRelated('group', 'group_id', 'name', 'group_name');
?>

Podařilo se vám to někomu zprovoznit?
Nevím kam přesně s tím databse context
Chyba: „Related require set Nette database context in constructor.“

Super by byl příklad přímo v dokumentaci.

Moc díky

Do konstruktoru toho data sourcu, když ho vytváříš :-)

Už jsem přidal ten příklad do dokumentace: http://grid.mesour.com/…on2/related/ :-)

Ahoj,
zkouším a hraji si s „$source->setRelated()“ a narazil jsem na takovou věc, kdy se mi nedaří provést left join nad jednou tabulkou.
Mám pouze jednu tabulku např. User

<?php
Id,User,SureName,Manager
?>

zde nějaká data

<?php
1,Petr,Novák,2
2,Karel Svoboda,1
3,Pavel Rada,2
?>

V tabulce je nastaven FK pro Manager do stejne tabulky, tedy také tabulky User.

Potřebuji aby setRelated „vygeneroval“ query s LEFT JOIN.
Konkrétně pro tento případ toto

<?php
SELECT us.[Id],us.[Name],us.[SureName],
us2.[SureName] AS [Nadrizeny]
FROM [User] us
left join [User] us2 on us.[Manager] = us2.id
?>

přitom on generuje pouze toto

<?php
SELECT [Id],[Name],[SureName],[User].[SureName] AS [Nadrizeny]
FROM [User]
?>

Prosím projevilo se vám to také někomu?
Moc díky

Na left join se budu muset podívat, takovou možnost to nepodporuje :/

Nejspíš tady: https://github.com/…taSource.php#L360 přibude šestý parametr (bool), který pokud bude TRUE, tak se bude provádět left JOIN, jinak obyč.

Následně pak bude potřeba upravit tuto řádku: https://github.com/…taSource.php#L367. Obalit do podmínky, pokud bude left join, tak použít stávající, pokud bude, tak udělat left join.

Nevím přesně kdy se k tomu dostanu, můžeš poslat pull request a já to tam hodím ještě během dneška.

mesour
Nette Blogger | 236
+
0
-

esorimer napsal(a):

Zdravím,
existuje nějaká podpora pro editaci enum sloupců? (Aby si uživatel mohl vybrat ze selectu …)

PS: A ještě jeden dotaz. Když se nepodří editace editovatelné cell, jak zobrazit chybu?

PSS: Jak můžu nastavit třídění podle více sloupců? Jde něco jako
$grid->setDefaultOrder('IF(price IS NULL, 0, 1)', 'ASC')->setDefaultOrder('price','ASC'); ?

  1. Podporu editace pro enum nemá, ale je dobrý point, zapracuji do dalšího updatu :)
  2. V eventu onEditCell použiješ třeba ->flashMessage a ->invalidateControl :-)
  3. Tohle jsem nikdy nezkoušel, ale teoreticky by to mohlo jít přes obyčejné MySQL CASE. http://stackoverflow.com/…y-case-issue

Editoval mesour (5. 11. 2015 16:58)

kralik
Člen | 230
+
0
-

mesour napsal(a):

kralik napsal(a):

mesour napsal(a):

kralik napsal(a):

Ahoj,
snažím se zprovoznit novou feature ve verzi 2.0.7, resp. verzi dev, ale nedaří se mi.
Jedná se o inline editaci FK do tabulky.

<?php
$source->setRelated('group', 'group_id', 'name', 'group_name');
?>

Podařilo se vám to někomu zprovoznit?
Nevím kam přesně s tím databse context
Chyba: „Related require set Nette database context in constructor.“

Super by byl příklad přímo v dokumentaci.

Moc díky

Do konstruktoru toho data sourcu, když ho vytváříš :-)

Už jsem přidal ten příklad do dokumentace: http://grid.mesour.com/…on2/related/ :-)

Ahoj,
zkouším a hraji si s „$source->setRelated()“ a narazil jsem na takovou věc, kdy se mi nedaří provést left join nad jednou tabulkou.
Mám pouze jednu tabulku např. User

<?php
Id,User,SureName,Manager
?>

zde nějaká data

<?php
1,Petr,Novák,2
2,Karel Svoboda,1
3,Pavel Rada,2
?>

V tabulce je nastaven FK pro Manager do stejne tabulky, tedy také tabulky User.

Potřebuji aby setRelated „vygeneroval“ query s LEFT JOIN.
Konkrétně pro tento případ toto

<?php
SELECT us.[Id],us.[Name],us.[SureName],
us2.[SureName] AS [Nadrizeny]
FROM [User] us
left join [User] us2 on us.[Manager] = us2.id
?>

přitom on generuje pouze toto

<?php
SELECT [Id],[Name],[SureName],[User].[SureName] AS [Nadrizeny]
FROM [User]
?>

Prosím projevilo se vám to také někomu?
Moc díky

Na left join se budu muset podívat, takovou možnost to nepodporuje :/

Nejspíš tady: https://github.com/…taSource.php#L360 přibude šestý parametr (bool), který pokud bude TRUE, tak se bude provádět left JOIN, jinak obyč.

Následně pak bude potřeba upravit tuto řádku: https://github.com/…taSource.php#L367. Obalit do podmínky, pokud bude left join, tak použít stávající, pokud bude, tak udělat left join.

Nevím přesně kdy se k tomu dostanu, můžeš poslat pull request a já to tam hodím ještě během dneška.

Ahoj,
tak jsem si zkoušel hrát a v tomto stav mi to funguje i pro spojení do stejné tabulky.
Níže jsou mé změny.

NetteDbDataSource.php

<?php
public function setRelated($table, $key, $column, $as = NULL, $primary = 'id')
    {
        if (is_null($this->context)) {
            throw new Grid_Exception('Related require set Nette database context in constructor.');
        }

        $this->related[$table] = array($table, $key, $column, $as, $primary);

        $this->nette_table->select($table . '.' . $column . ', '.$key.'.'.$column.' '.(!is_null($as) ? (' AS ' . $as) : ''));

        return $this;
    }
?>

V Modelu jsem musel doplnit celé ukazatele na sloupce.

<?php
...
 	public function getAllUsers() {
        $res2 = $this->connection->table('User')
                       ->select('User.Id,User.Name,User.SureName')
// místo tohoto //     ->select('Id,Name,SureName')
                       ->order('WeekDeadline');

        $dat = $res2;

        return ($dat) ? $dat : FALSE;
    }
...
?>

V Preseteru v komponentě

<?php
...
		$selection = $this->spravaModel->getAllUsers();

        $source = new NetteDbDataSource($selection, $this->databaseContext);
		$source->setRelated('User', 'SupordinateTo_Id', 'SureName','Nadrizeny','Id');
..
?>

Ještě jsem musel upravit funkci pro inline editaci „Related“ sloupce
V Preseteru

<?php
	public function saveRowUsers($line_id, $column_name, $new_value, $old_value) {

        if($column_name == 'Nadrizeny') { $column_name  = 'SupordinateTo_Id'; }

        $this->spravaModel->saveUsers($line_id,$column_name,$new_value);

    }
?>

Super by bylo kdybych nějakým způsobem dokázal seřadit data v selectBoxu v inline editaci?
Díky

Editoval kralik (19. 11. 2015 14:07)

majky358
Člen | 37
+
0
-

Nazdar,

je nejaká možnosť ako escapovať obsah cellu ? .. výstup datagridu a menší detail, funguje inline editovanie napr. textu ktorý je v containery ? Nejak sa mi nepodarilo k tomu dostať.

Ďakujem

mesour
Nette Blogger | 236
+
+1
-

majky358 napsal(a):

Nazdar,

je nejaká možnosť ako escapovať obsah cellu ? .. výstup datagridu a menší detail, funguje inline editovanie napr. textu ktorý je v containery ? Nejak sa mi nepodarilo k tomu dostať.

Ďakujem

  1. Escapovat přes callback. Zde použití callbacku http://grid.mesour.com/…column/text/#…
  2. Jestli tím myslíš sloupec Container, tak pokud do něj přidáš třeba dva sloupce text, tak bude možné je oba editovat zvlášť. V podstatě se to pro JS tváří jako dva samostatné sloupce, protože tam není selector na element, ale pouze na atributy a ty span ve sloupci container dostane také :) Stejně tak tvé nastavené parametry atd.

Editoval mesour (20. 11. 2015 12:00)

majky358
Člen | 37
+
0
-
		$source = new NetteDbDataSource($this->context->userModel->searchUsers());

$grid = new Grid($this, $name);

$table_id = 'id';
$grid->setTranslator($this->translator);
$grid->setLocale("cs");
$grid->setPrimaryKey($table_id);
$grid->setDataSource($source);
$grid->enablePager(10);
$grid->enableEditableCells();
$grid->onEditCell[] = $this->editGridColumn;
		$grid->enableFilter();

$container = $grid->addContainer('name', 'Name');
$container->addText('user_firstname');
$container->addText('user_surename');

return $grid;
Mesour\DataGrid\Grid_Exception

Column with ID user_firstname is not editable or does not exists in DataGrid columns.

To isté aj keď nastavím isEditable explicitne na column v containeri.

Datagrid 2.0.7
jquery, nette.ajax 1.2.2, netteForms nalinkované v dokumente

2. Escaping, hodnota v column sa ošetrí, ale neošetrené dáta zostanú v data-value ak je zapnutý filter nad gridom, konkrétne v checkboxe a z html kódu sa zavolá javascript.

Editoval majky358 (21. 11. 2015 1:43)

mesour
Nette Blogger | 236
+
0
-

majky358 napsal(a):

		$source = new NetteDbDataSource($this->context->userModel->searchUsers());

//...
Mesour\DataGrid\Grid_Exception

Column with ID user_firstname is not editable or does not exists in DataGrid columns.

To isté aj keď nastavím isEditable explicitne na column v containeri.

Datagrid 2.0.7
jquery, nette.ajax 1.2.2, netteForms nalinkované v dokumente

2. Escaping, hodnota v column sa ošetrí, ale neošetrené dáta zostanú v data-value ak je zapnutý filter nad gridom, konkrétne v checkboxe a z html kódu sa zavolá javascript.

To vypadá na bug v Extension\Editable. Kontroluje se tam, zda ty sloupce, které se editují existují na DataGridu a zda je možné je editovat. No a sloupec Container tam s největší pravděpodobností není ošetřený.

Editoval mesour (24. 11. 2015 0:15)

majky358
Člen | 37
+
0
-

do JS mesour.dataGrid.list ⇒ mesour.dataGrid.list[f].gridValues sa nenačíta hodnota napríklad ak sa používa callback na column, potom ak sa to aj ošetri pri vypisovani filtr. hodnot pre dany filtr sa z values vytiahne tá daná hodnota..

majky358
Člen | 37
+
0
-

Mám u seba nejaké zmeny, ale nejak mi nefunguje push na git (access denied na repository), že by som vytvoril pull request. Prípadne ti to môžem niekde poslať ? :)

Narazil som na taký trochu bezpečnostný problém, že do dokumentu mesour.dataGrid.list sa vypisujú všetky stĺpce a hodnoty tabuľky.. Pre

NetteDbDataSource->fetchFullData()

som pridal naviac pracu nad samotnými stlpcami gridu a nielen selection.

Editoval majky358 (26. 11. 2015 4:21)

mesour
Nette Blogger | 236
+
0
-

majky358 napsal(a):

Mám u seba nejaké zmeny, ale nejak mi nefunguje push na git (access denied na repository), že by som vytvoril pull request. Prípadne ti to môžem niekde poslať ? :)

Narazil som na taký trochu bezpečnostný problém, že do dokumentu mesour.dataGrid.list sa vypisujú všetky stĺpce a hodnoty tabuľky.. Pre

NetteDbDataSource->fetchFullData()

som pridal naviac pracu nad samotnými stlpcami gridu a nielen selection.

Push ti nebude fungovat, musíš si ten repozitář forknout, pushnout změny do toho forku a pak poslat pull request :)

Ano to by tam mělo být, ale určitě to bude potřeba ošetřit, při nejmenším trim a strip_tags.

Editoval mesour (1. 12. 2015 19:28)

jarekp
Člen | 2
+
0
-

Ahoj, zkoušel jsem si rozchodit mesour/datagrid v sandboxu pro Nette a narazil jsem na problém s composerem.

Sandbox jsem si stáhl přes composer (podle návodu na nette.org):
composer create-project nette/sandbox nette-blog

Potom jsem přidal do composer.json:
"mesour/datagrid": "~2.0.7"

Celý composer.json pak vypadal následovně:

{
	"name": "nette/sandbox",
	"description": "The sandbox is a pre-packaged Nette Framework project, basic configured structure for your application.",
	"homepage": "https://nette.org",
	"type": "project",
	"license": ["BSD-3-Clause", "GPL-2.0", "GPL-3.0"],
	"authors": [
		{
			"name": "David Grudl",
			"homepage": "https://davidgrudl.com"
		},
		{
			"name": "Nette Community",
			"homepage": "https://nette.org/en/contributors?lang=en"
		}
	],
	"require": {
		"php": ">= 5.3.7",
		"nette/application": "~2.3.6",
		"nette/bootstrap": "~2.3.0",
		"nette/caching": "~2.3.0",
		"nette/database": "~2.3.0",
		"nette/di": "~2.3.0",
		"nette/finder": "~2.3.0",
		"nette/forms": "~2.3.0",
		"nette/http": "~2.3.0",
		"nette/mail": "~2.3.0",
		"nette/robot-loader": "~2.3.0",
		"nette/safe-stream": "~2.3.0",
		"nette/security": "~2.3.0",
		"nette/utils": "~2.3.0",
		"latte/latte": "~2.3.0",
		"tracy/tracy": "~2.3.0",
		"dg/adminer-custom": "~1.6",

		 "mesour/datagrid": "~2.0.7"
	},
	"require-dev": {
		"nette/tester": "~1.3"
	}
}

Následně jsem zavolám composer update a dostal tento výstup:

noname@JAREKP-NOT MINGW64 /c/Program Files (x86)/EasyPHP-DevServer-14.1VC11/data/localweb/sandbox_composer/nette-blog
$ composer update
You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - nette/nette v2.3.5 requires nette/application 2.3.5 -> no matching package found.
    - nette/nette v2.3.4 requires nette/application 2.3.4 -> no matching package found.
    - nette/nette v2.3.3 requires nette/application 2.3.3 -> no matching package found.
    - nette/nette v2.3.2 requires nette/application 2.3.3 -> no matching package found.
    - nette/nette v2.3.1 requires nette/application 2.3.2 -> no matching package found.
    - nette/nette v2.3.0 requires nette/application 2.3.1 -> no matching package found.
    - nette/nette v2.2.9 requires nette/application 2.2.6 -> no matching package found.
    - nette/nette v2.2.8 requires latte/latte 2.2.5 -> no matching package found.
    - nette/nette v2.2.7 requires nette/application 2.2.4 -> no matching package found.
    - nette/nette v2.2.6 requires nette/application 2.2.3 -> no matching package found.
    - nette/nette v2.2.5 requires nette/application 2.2.3 -> no matching package found.
    - nette/nette v2.2.4 requires nette/application 2.2.3 -> no matching package found.
    - nette/nette v2.2.3 requires latte/latte 2.2.3 -> no matching package found.
    - nette/nette v2.2.2 requires nette/application 2.2.1 -> no matching package found.
    - nette/nette v2.2.11 requires nette/application 2.2.8 -> no matching package found.
    - nette/nette v2.2.10 requires nette/application 2.2.7 -> no matching package found.
    - nette/nette v2.2.1 requires nette/application 2.2.0 -> no matching package found.
    - nette/nette v2.2.0 requires nette/application 2.2.0 -> no matching package found.
    - Conclusion: don't install nette/nette v2.3.6
    - mesour/datagrid v2.0.7 requires nette/nette >=2.2.0 -> satisfiable by nette/nette[v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.2, v2.3.3, v2.3.4, v2.3.5, v2.3.6, v2.3.7].
    - mesour/datagrid v2.0.7.1 requires nette/nette >=2.2.0 -> satisfiable by nette/nette[v2.2.0, v2.2.1, v2.2.10, v2.2.11, v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7, v2.2.8, v2.2.9, v2.3.0, v2.3.1, v2.3.2, v2.3.3, v2.3.4, v2.3.5, v2.3.6, v2.3.7].
    - Conclusion: don't install nette/nette v2.3.7|install nette/nette v2.3.6
    - Installation request for mesour/datagrid ~2.0.7 -> satisfiable by mesour/datagrid[v2.0.7, v2.0.7.1].

Potential causes:
 - A typo in the package name
 - The package is not available in a stable-enough version according to your minimum-stability setting
   see <https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion> for more details.

Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.

Nevíte, kde by mohl být problém? S composerem nemám moc zkušeností, ale zkoušel jsem to googlit, ale nenašel jsem žádné dobře fungující řešení. Procházel jsem i odkazy z výstupu composeru, ale nebyl jsem z nich moc moudrý. Pokud tomu dobře rozumím, composer z nějakého důvodu nemůže najít požadované knihovny/závislosti.

Našel jsem ovšem jednu možnost, jak daný problém obejít. Přidáním "minimum-stability": "dev" na konec composer.json (našel jsem to totiž v oficiálním repozitáři nette-sandboxu), ale pak se mi stahuje vše z dev větve, u niž předpokládám, že není určena k běžnému nasazení na produkci, ale hlavně pro vývoj samotného frameworku.

Prosím o radu a případné vysvětlení tohoto problému.

Předem děkuji.

mesour
Nette Blogger | 236
+
0
-

jarekp napsal(a):

Ahoj, zkoušel jsem si rozchodit mesour/datagrid v sandboxu pro Nette a narazil jsem na problém s composerem.

Sandbox jsem si stáhl přes composer (podle návodu na nette.org):
composer create-project nette/sandbox nette-blog

Potom jsem přidal do composer.json:
"mesour/datagrid": "~2.0.7"

Celý composer.json pak vypadal následovně:

{
Potential causes:
 - A typo in the package name
 - The package is not available in a stable-enough version according to your minimum-stability setting
   see <https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion> for more details.

Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.

Nevíte, kde by mohl být problém? S composerem nemám moc zkušeností, ale zkoušel jsem to googlit, ale nenašel jsem žádné dobře fungující řešení. Procházel jsem i odkazy z výstupu composeru, ale nebyl jsem z nich moc moudrý. Pokud tomu dobře rozumím, composer z nějakého důvodu nemůže najít požadované knihovny/závislosti.

Našel jsem ovšem jednu možnost, jak daný problém obejít. Přidáním "minimum-stability": "dev" na konec composer.json (našel jsem to totiž v oficiálním repozitáři nette-sandboxu), ale pak se mi stahuje vše z dev větve, u niž předpokládám, že není určena k běžnému nasazení na produkci, ale hlavně pro vývoj samotného frameworku.

Prosím o radu a případné vysvětlení tohoto problému.

Předem děkuji.

Ahoj, vyzkoušel jsem to přímo podle tvého postupu, sandbox, přidat řádek, spustit update a všechno proběhlo OK, nainstalovala se mi verze 2.0.7.1 a nebyly žádné problémy.

Pokud dáš "minimum-stability": "dev", pak stahuje dev, to je jasné. Existuje ale potom ještě jedno nastavení, také do ROOTu composer.json. Jmenuje se "prefer-stable": true: https://getcomposer.org/…04-schema.md#…. Takže pak bude stahovat dev, pouze pokud nebude existovat stable verze :)

V composer.json gridu je nastaveno "nette/nette": ">=2.2.0" což je OK, to souhlasí i pro verzi 2.3+. Ale napadlo mě, že by nebylo vůbec špatné to omezit pouze na konkrétní Nette balíčky, které to používá :) Udělám to, až se k tomu dostanu :) Nemyslím si, že ale zrovna tohle bude řešit tvůj problém, to je divné, že se ti tohle děje…

Editoval mesour (4. 12. 2015 1:11)

dj.kure
Člen | 70
+
0
-

Ahoj, používám tento GRID a řeším aktuálně problém s URL, které generuje řazení.
Mám adresu:

http://xxx.xx/zakaznici/detail-zakaznika/podle-id/1

A kliknutí na řazení třeba podle jména generuje:

http://xxx.xx/zakaznici/detail-zakaznika/?gridSluzbyZakaznika-ordering-column_id=sluzba&do=gridSluzbyZakaznika-ordering-ordering

Čili úplně vynechá action a ID. Kde se to dá doplnit?

Díky za radu.

mesour
Nette Blogger | 236
+
0
-

dj.kure napsal(a):

Ahoj, používám tento GRID a řeším aktuálně problém s URL, které generuje řazení.
Mám adresu:

http://xxx.xx/zakaznici/detail-zakaznika/podle-id/1

A kliknutí na řazení třeba podle jména generuje:

http://xxx.xx/zakaznici/detail-zakaznika/?gridSluzbyZakaznika-ordering-column_id=sluzba&do=gridSluzbyZakaznika-ordering-ordering

Čili úplně vynechá action a ID. Kde se to dá doplnit?

Díky za radu.

Ahoj,

myslím, že ti chybí v presenteru v render metodě pro .../detail-zákazníka/ ten parametr. Pokud ne, tak dej vědět a já se na to mrknu až budu mít chvilku :-)

Matouš

dj.kure
Člen | 70
+
0
-

Ahoj,

můžu se prosím zeptat jak?

v Presenteru mám:

protected function createComponentGridMistaPripojeniZakaznika($name) {

	$grid = new Grid($this, $name);
	...
}

V šabloně volám:

{control gridMistaPripojeniZakaznika}

Děkuji za vysvětlení a omlouvám se za svou hloupost :-)

tom
Člen | 171
+
0
-

Ahojte,
potřeboval bych poradit.

Mám následující datovou strukturu: tabulka Organizace a na ni navázaná tabulka Kontakty (1:N). V gridu si zobrazuji Organizace . Dá se použít Custom Filter tak, že by filtroval Organizace přes Kontakty? Typicky aby se vypsaly jen organizace pro které existuje kontakt např. „Jan Novák“ v tabulce Kontaty?

Používám DibiDataSource

Díky Tom

Editoval tom (17. 2. 2016 9:00)

tom
Člen | 171
+
0
-

tom napsal(a):

Ahojte,
potřeboval bych poradit.

Mám následující datovou strukturu: tabulka Organizace a na ni navázaná tabulka Kontakty (1:N). V gridu si zobrazuji Organizace . Dá se použít Custom Filter tak, že by filtroval Organizace přes Kontakty? Typicky aby se vypsaly jen organizace pro které existuje kontakt např. „Jan Novák“ v tabulce Kontaty?

Používám DibiDataSource

Díky Tom

tak prozatím to řeším pomocí NetteDbDataSource