Grido – DataGrid pro Nette

NeMeFi
Člen | 4
+
0
-

Vďaka, s aktuálnou verziou to už ide.

JanB
Člen | 21
+
0
-

Viete mi niekto ukazat priklad ako si mozem pridat vlastnu metodu – napriklad setHeaderStyle na nastavovanie style(width)? Myslim ze takyto priklad pomoze lepsie pochopit nie len Grido ale aj namespaces.

Vo vysledku by som to chcel vediet pouzit takto:

$grid->addColumnText('price', 'cena')
	->setSortable()
	->setFilterText()
	->setSuggestion()
	->setHeaderStyle = 'width: 25%';

alebo:

$grid->addColumnText('price', 'cena')
	->setSortable()
	->setFilterText()
	->setSuggestion()
	->setHeaderStyle('width: 25%');

Myslim ze su 2 moznosti – bud pomocou dekoratora alebo inheritance, ale nie som si celkom isty ako to s Gridom urobit.

Alebo mozem Grido/Column rozsirit pomocou callbacku? Inak ked skusim len toto:

		$grid->model->callback['setHeaderStyle'] = function($model, $args) {
			dump($args);
			return;
		};

Tak dostanem notice – „Indirect modification of overloaded property Grido\Grid::$model has no effect“

Diki!!!

Editoval JanB (28. 8. 2013 10:35)

JanB
Člen | 21
+
0
-

Dovolim si este jednu otazku – ako mozem nastavit style pre stlpec actions/akce?

$grid->getColumn('actions')->headerPrototype->style = 'width: 5%';

mi hadze chybu…

Diki

o5
Člen | 416
+
0
-

JanB napsal(a):

Viete mi niekto ukazat priklad ako si mozem pridat vlastnu metodu – napriklad setHeaderStyle na nastavovanie style(width)? Myslim ze takyto priklad pomoze lepsie pochopit nie len Grido ale aj namespaces.

To nemá s namespaces nic společného. Je to fluent interface, stejně jako třeba u formulářů. Opakovat se tu nechci, takže tě odkážu na demo komponenty, kde to můžeš vidět.

JanB napsal(a):

Dovolim si este jednu otazku – ako mozem nastavit style pre stlpec actions/akce?

$grid->getColumn('actions')->headerPrototype->style = 'width: 5%';

mi hadze chybu…

Diki

Ono taky object Action, žádnou metodu getHeaderPrototype() mít nemůže, že?

Editoval o5 (29. 8. 2013 13:23)

v6ak
Člen | 206
+
0
-

Zkusil jsem 0.9.1 i dev-master. Narazil jsem na tyto problémy:

  1. Bez $('.grido').grido(); některé JS věci nefungují. Nenaěel jsem však o tom nic v dokumentaci.
  2. Operace při vyvolání hodí výjimku Nette\InvalidStateException: Component with name ‚1‘ already exists. Hážou to Nette Forms volané přes Grido. Co s tím? Query string je takovýto:
?filters[type]=&operations[operations]=delete&buttons[operations]=OK&count=20&operations[5]=on&do=grid-form-submit

Editoval v6ak (31. 8. 2013 18:22)

JanB
Člen | 21
+
0
-

Mozte mi poradit ako mozem v Gride dosiahnut to aby po vykonani „Action“ – napriklad actionEdit(), mi ostali nastavene filtre? Myslim ze treba zmenit redirect na konci tejto funkcie z default, tak aby sa pridali aj grid-filter url parametre ale nejak mi to nejde…
Rozmyslam ze by som asi potreboval urobit z Action tlacitok tlacitka „submit“ aby sa submitla cela Grido forma aj so vsetkymi parametrami, ale ako potom pridam vlastne parametre? Musim si pridat hidden fields do Grida? Ak je toto cesta tak ako?

A este by som sa chcel spytat – zistil som ze grido pri zapnutom js predava url parametre cez fragment(#) a pri vypnutom cez URL parametre (?) Robi to Grido alebo nette nejak automaticky?
Diki!

[A este taky mini bug – ked som v Grido Sanboxe vypol ajax, zapol filter na MasterCard, zapol ajax a zapol filter na Visa, vygenerovala sa URL:
http://grido.bugyik.cz/example/?…[card]=MasterCard#grid-filter[card]=Visa
(fragments su pristupne len cez js – server o nich nevie)
]

Editoval JanB (6. 9. 2013 14:44)

mere.gee
Člen | 54
+
0
-

Dobrý den, je nějak možné vypnout automatické zobrazování stránkovače? Díky…

xxxmisko
Člen | 140
+
0
-

@JanB: pozri v grido dokumentáciu – je tam niečo ako remember state. Uloží stav gridu. Potom sa môžeš presunúť hocikde a keď sa vrátiš, máš tam pôvodné filtre…

@mere.gee: to je nejaká divná otázka, pri gride je stránkovač vyžadovaný, nie? :D

libik
Člen | 96
+
0
-

xxxmisko: ani ne, uvital bych to take, v urcitych situacich chci grido pouzit jako tabulku a vsechny informace zobrazit najednou – pak je tam strankovac zbytecny.

o5
Člen | 416
+
0
-

@libik: není nic jednoduššího než si poddědit šablonu a paginator nevykreslit.

libik
Člen | 96
+
0
-

Muzes prosim nastinit jak? Nejsem v nette jeste moc zbehly.
Je moznost ve sloupecku akce zarovnat buttony jinak nez na stred? Zkousel jsem to pres css a stale jsou uprostred a nevim, jak je donutit zarovnat vlevo.

koprkuba
Člen | 24
+
0
-

Ahoj,
rád bych se zeptal zda je možné nějakým způsobem cachovat dotazy do databáze z filtrů gridu?
Používám Nette databázi, v sandboxu jsem narazil na cachování dibi databáze, tak by mne zajímalo jak by se daly tyto dotazy zrychlit.
Mám problém, že dotaz do databáze trvá na lokálním stroji 1.2 – 1.3 sekundy a to je prostě moc při každé změně filtru. Například Typehead.js je tím úplně znehodnocen.
Napadlo mne, že by možná pomohlo optimalizovat databázi pomocí indexů, ale pro testování mám v databázi pouze 4 záznamy a tam nebude s indexem znatelný rozdíl. Samozřejmě mám v plánu indexy přidat, ale pouze tam, kde se bude filtrovat nejčastěji.

Díky moc za pomoc už dopředu, protože vím, že jste borci a určitě mi poradíte.

EIDT: Ještě jsem zapoměl zmínit, že celou komponentu Grido obsluhuje AJAX, ale předpokládám, že to bylo i tak jasné ;)

Editoval koprkuba (11. 9. 2013 11:37)

v6ak
Člen | 206
+
0
-

Hmm, to vypadá na docela brutální dotaz, když jsou v DB čtyři záznamy. A je to skutečně čistě jen dotaz do DB, nebo i další práce PHP?

A jinak k testování výkonu: tak si prostě další záznamy vygeneruj…

koprkuba
Člen | 24
+
0
-

@v6ak: Děkuji velice jsi mi pomohl. Ptám se na chache dotazu a odpovíš mi ať si rozšířím databázi. Rada nad zlato.

koprkuba
Člen | 24
+
0
-

@v6ak: Sorry za ten sarkasmus. Jedná se samozřejmě pouze o dotaz do databáze. (Tento dotaz si komponenta vytváří sama v některém javascriptu, který ajax obsluhuje). Bylo mi divné, že demo je svižné a odpovídá velice rychle, tak jsem se podíval do kódu a vypadá to tak, že si data tahá z lokálního souboru, tedy nedotazuje se databáze. Jaké máte zkušenosti s rychlostí tohoto DataGridu?

o5
Člen | 416
+
0
-

@koprkuba:

  1. Grido nevytváří v žádném javascriptu dotaz.
  2. Demo používá SQLite, kvůli snadménu vyzkoušení.
  3. Když se podíváš do config.neon, najdeš tam konfiguraci pro MySQL a PostgreSQL. Po přepnutí db nepozoruji žádné výrazné rychlostní rozdíly.

edit :)

Editoval o5 (11. 9. 2013 23:14)

v6ak
Člen | 206
+
0
-

Ten čas se mi zdál při čtyřech záznamech brutálně velký, tak jsem se zeptal, jestli není problém jinde.

Pokud je to skutečně je čas dotazy do databáze, zkusil bych logovat dotazy a podívat se na ně. Mohou z toho být asi dva závěry:

  1. Dotazy se generují příliš složité ⇒ může být problém této komponenty.
  2. Dotazy se generují dobré, bude problém v databázi.
Pavel Kouřil
Člen | 128
+
0
-

1.2 sekundy? Nemáš náhodou mysql konfigurované aby se připojovalo na „localhost“ místo „127.0.0.1“ a nejsi na Windows? To většinou tu +sekundu přidá. :)

JanB
Člen | 21
+
0
-

Pajka, ja som myslel ze zartujes. Ale mas pravdu!!! Stale som sa cudoval preco mi to ide pomalsie na lokale ako zo servera… Dakujem za usetrenu sekundu, to bola rada nad zlato!!!

Pajka napsal(a):

1.2 sekundy? Nemáš náhodou mysql konfigurované aby se připojovalo na „localhost“ místo „127.0.0.1“ a nejsi na Windows? To většinou tu +sekundu přidá. :)

vlna
Člen | 34
+
0
-

Ahoj, za prve super prace, diky ;)
Za druhe dotaz – snad jsem to neprehledl v diskusi.
Potrebuji radit datagrid podle nejakeho komplexnejsiho vyrazu, ktery neodpovida zadnemu zobrazenemu sloupci. Jestli chapu spravne, radit muzu jen podle sloupcu, ktere jsou pridane k datagridu, ne podle atributu v datasource. Zaroven nemuzu mit sloupec, podle ktereho by se radilo, ale byl by skryty (v zobrazeni i exportu).
Jak to nejlepe provest? Diky.

o5
Člen | 416
+
0
-

@vlna:
Ahoj, pokud máš na mysli výchozí řazení „podle nejakeho komplexnejsiho vyrazu“, mohl by sis seřadit datasource sám, než ho předáš gridu (před $grid->setModel()), detekovat zda-li se řadí podle nějakého sloupce lze přes $grid->params… Pokud nemáš na mysli výchozí řazení, nevím jak by jsi to chtěl ovládat :)

vlna
Člen | 34
+
0
-

o5 napsal(a):

@vlna:
Ahoj, pokud máš na mysli výchozí řazení „podle nejakeho komplexnejsiho vyrazu“, mohl by sis seřadit datasource sám, než ho předáš gridu (před $grid->setModel()), detekovat zda-li se řadí podle nějakého sloupce lze přes $grid->params… Pokud nemáš na mysli výchozí řazení, nevím jak by jsi to chtěl ovládat :)

Bozi! :). Moje chyba. Zkousel jsem razeni uz v modelu jako prvni, ale nevsiml jsem si concatu s null sloupcem. Sorry, funguje, netreba zasahovat.
Jen tak dal ;)

juklicek
Člen | 12
+
0
-

Ahoj, mám dotaz – divím se, že to ještě nikdo nepotřeboval (nebo jen neumím hledat).

1/ Neřešil jste někdo, jak vytvořit filtr „range“ tzn. between v databázi? Potřebuji filtrovat dle data v zadaném rozsahu. (mám Doctrine datasource, ale předpokládám, že to by řešení nemělo ovlivnit)

2/ Často potřebuji filtrovat datagrid i podle hodnoty, která není zobrazena v gridu. Je to možné?

Díky

Editoval juklicek (25. 9. 2013 16:17)

kolsi
Člen | 131
+
0
-

Nevím, zda se už neřešilo, ale je nějaká možnost, jak povolit řazení a filtrování u sloupců, které nejsou z DB, ale renderuji je pomocí setCustomRender(…) ?

v6ak
Člen | 206
+
0
-

A podle čeho by se to pak mělo přesně řadit? Pohle HTML?

Jak by to řazení mělo probíhat? Stáhnout všechna data do RAM v PHP a setřídit? U velkých tabulek by to byl zabiják…

Myslím, že je vhodné aplikaci navrhnout tak, aby to mohla DB efektivně setřídit (např. pomocí indexu).

JanB
Člen | 21
+
0
-

juklicek napsal(a):

Ahoj, mám dotaz – divím se, že to ještě nikdo nepotřeboval (nebo jen neumím hledat).

1/ Neřešil jste někdo, jak vytvořit filtr „range“ tzn. between v databázi? Potřebuji filtrovat dle data v zadaném rozsahu. (mám Doctrine datasource, ale předpokládám, že to by řešení nemělo ovlivnit)

2/ Často potřebuji filtrovat datagrid i podle hodnoty, která není zobrazena v gridu. Je to možné?

Díky

1/ Riesenie (pre Nette Database) je pod prispevkom 289. (na predoslej strane) Myslim ze ked pozries predosle diskusie mal by si nieco najst aj pre Doctrine, popripade sa spytaj konkretne ak to nepojde.
2/ Neviem ako by ta databazova podmienka mala vyzerat pri pouziti =, <>, <, > … Externy filter ale funguje aj na cast retazca automaticky ak myslis na text.

Editoval JanB (3. 10. 2013 12:54)

juklicek
Člen | 12
+
0
-

JanB napsal(a):

juklicek napsal(a):

Ahoj, mám dotaz – divím se, že to ještě nikdo nepotřeboval (nebo jen neumím hledat).

1/ Neřešil jste někdo, jak vytvořit filtr „range“ tzn. between v databázi? Potřebuji filtrovat dle data v zadaném rozsahu. (mám Doctrine datasource, ale předpokládám, že to by řešení nemělo ovlivnit)

2/ Často potřebuji filtrovat datagrid i podle hodnoty, která není zobrazena v gridu. Je to možné?

Díky

1/ Riesenie je len o par riadkov vyssie staci len scroll… Prispevok 302.
2/ Neviem ako by ta databazova podmienka mala vyzerat pri pouziti =, <>, <, > … Externy filter ale funguje aj na cast retazca automaticky ak myslis na text.

Díky, už jsem nedoufal k odpovědi, takže jsem si poradil sám, ale pro budoucí generace:
1/ Filter na rozsah (od – do) jsem nakonec vyřešil implementací vlastního filtru. Ten do modelu pošle něco jako [column] BETWEEN (%value1 AND %value2). Pro datumy to dobře funguje ve spolupráci s komponentou „dangrossman/bootstrap-daterangepicker“ – takový „od – do“ datepicker.

2/ Tam to bylo jednoduché. U filtrů, které nemají sloupec v gridu (v DB smaozřejmě ano) se musí dát grid->addFilter(yyy)->setColumn(xxx) a funguje to. To byla jen má neznalost.

Dík

p.s. (K bodu 2) Ještě jsem si trochu grid extendnul a umožnil krom Filter::RENDER_INNER a Filter::RENDER_OUTER i něco jako Filter::RENDER_AUTO a potom jsou filtry, které mají zobrazené sloupce v gridu zobrazené metodou INNER a ty které tam sloupce nemají metodou OUTER.

Editoval juklicek (3. 10. 2013 12:43)

greggy
Člen | 14
+
0
-

Ahoj, stiahol som si najnovsi grido. pouzivam jquery-1.10.2.js aj grido.js.
Vytvorim si operations, ale nefunguje oznacenie vsetkych checkboxov, spustenie operacie a tiez zmena poloziek na stranu. Neviete mi poradit, naco sa pozriet, co by som mohol mat zle?

o5
Člen | 416
+
0
-

@greggy: koukni do konzole co ti píše, jinak to hromadné označení bude asi tímto: http://goo.gl/77LQkx . Chtělo by to asi workaround, ale k tomu se nyní opravdu nedostanu.

greggy
Člen | 14
+
0
-

o5 napsal(a):

@greggy: koukni do konzole co ti píše, jinak to hromadné označení bude asi tímto: http://goo.gl/77LQkx . Chtělo by to asi workaround, ale k tomu se nyní opravdu nedostanu.

v konzole nie je nič, ako keby sa ten script ani nepustil. pri načítaní stránky sa do skriptu dostane, lebo tam mam nastavený break point.

greggy
Člen | 14
+
0
-

o5 napsal(a):

@greggy: koukni do konzole co ti píše, jinak to hromadné označení bude asi tímto: http://goo.gl/77LQkx . Chtělo by to asi workaround, ale k tomu se nyní opravdu nedostanu.

vyskúšal som aj iné verzie jquery, ale nepomohlo to. :(

juklicek
Člen | 12
+
0
-

greggy napsal(a):

Ahoj, stiahol som si najnovsi grido. pouzivam jquery-1.10.2.js aj grido.js.
Vytvorim si operations, ale nefunguje oznacenie vsetkych checkboxov, spustenie operacie a tiez zmena poloziek na stranu. Neviete mi poradit, naco sa pozriet, co by som mohol mat zle?

Ahoj, myslím, že pouze grido.js nestačí – máš tam i „to ostatní“? Nedávno jsem také Grido rozcházel poprvé a musím přiznat, že jsem se v těch JS souborech taky trochu ztrácel – který je potřeba na co. O5 to má dělané přes nette.ajax.js (super), takže minimálně JS soubory kolem tohoto tam být dle mého musí – myslím, že stejně nakonec dojdeš k tomu, že tam jsou potřeba všechny JS soubory co jsou v sandboxu :)

JanB
Člen | 21
+
0
-

juklicek napsal(a):

JanB napsal(a):

juklicek napsal(a):

Ahoj, mám dotaz – divím se, že to ještě nikdo nepotřeboval (nebo jen neumím hledat).

1/ Neřešil jste někdo, jak vytvořit filtr „range“ tzn. between v databázi? Potřebuji filtrovat dle data v zadaném rozsahu. (mám Doctrine datasource, ale předpokládám, že to by řešení nemělo ovlivnit)

2/ Často potřebuji filtrovat datagrid i podle hodnoty, která není zobrazena v gridu. Je to možné?

Díky

1/ Riesenie je len o par riadkov vyssie staci len scroll… Prispevok 302.
2/ Neviem ako by ta databazova podmienka mala vyzerat pri pouziti =, <>, <, > … Externy filter ale funguje aj na cast retazca automaticky ak myslis na text.

Díky, už jsem nedoufal k odpovědi, takže jsem si poradil sám, ale pro budoucí generace:
1/ Filter na rozsah (od – do) jsem nakonec vyřešil implementací vlastního filtru. Ten do modelu pošle něco jako [column] BETWEEN (%value1 AND %value2). Pro datumy to dobře funguje ve spolupráci s komponentou „dangrossman/bootstrap-daterangepicker“ – takový „od – do“ datepicker.

2/ Tam to bylo jednoduché. U filtrů, které nemají sloupec v gridu (v DB smaozřejmě ano) se musí dát grid->addFilter(yyy)->setColumn(xxx) a funguje to. To byla jen má neznalost.

Dík

p.s. (K bodu 2) Ještě jsem si trochu grid extendnul a umožnil krom Filter::RENDER_INNER a Filter::RENDER_OUTER i něco jako Filter::RENDER_AUTO a potom jsou filtry, které mají zobrazené sloupce v gridu zobrazené metodou INNER a ty které tam sloupce nemají metodou OUTER.

Ja som moj povodny prispevok opravil, moj kod je pod 289. DateRangePicker je naozaj zaujimavy napad, nenapadlo ma to urobit takto a takze mam vsetky filtre externe. Preto auto filter je tiez zaujimava vec. Rad by som videl kod ako si pridal range picker a aj ako si pridal RENDER_AUTO…

Editoval JanB (4. 10. 2013 11:27)

greggy
Člen | 14
+
0
-

juklicek napsal(a):

greggy napsal(a):

Ahoj, stiahol som si najnovsi grido. pouzivam jquery-1.10.2.js aj grido.js.
Vytvorim si operations, ale nefunguje oznacenie vsetkych checkboxov, spustenie operacie a tiez zmena poloziek na stranu. Neviete mi poradit, naco sa pozriet, co by som mohol mat zle?

Ahoj, myslím, že pouze grido.js nestačí – máš tam i „to ostatní“? Nedávno jsem také Grido rozcházel poprvé a musím přiznat, že jsem se v těch JS souborech taky trochu ztrácel – který je potřeba na co. O5 to má dělané přes nette.ajax.js (super), takže minimálně JS soubory kolem tohoto tam být dle mého musí – myslím, že stejně nakonec dojdeš k tomu, že tam jsou potřeba všechny JS soubory co jsou v sandboxu :)

Tak používam grido.js, jquery.js, netteForms.js, main.js na inicializáciu nette.ajax.js a stále nič. No som tom teraz kompletne stratený.

juklicek
Člen | 12
+
0
-

greggy napsal(a):

juklicek napsal(a):

greggy napsal(a):

Ahoj, stiahol som si najnovsi grido. pouzivam jquery-1.10.2.js aj grido.js.
Vytvorim si operations, ale nefunguje oznacenie vsetkych checkboxov, spustenie operacie a tiez zmena poloziek na stranu. Neviete mi poradit, naco sa pozriet, co by som mohol mat zle?

Ahoj, myslím, že pouze grido.js nestačí – máš tam i „to ostatní“? Nedávno jsem také Grido rozcházel poprvé a musím přiznat, že jsem se v těch JS souborech taky trochu ztrácel – který je potřeba na co. O5 to má dělané přes nette.ajax.js (super), takže minimálně JS soubory kolem tohoto tam být dle mého musí – myslím, že stejně nakonec dojdeš k tomu, že tam jsou potřeba všechny JS soubory co jsou v sandboxu :)

Tak používam grido.js, jquery.js, netteForms.js, main.js na inicializáciu nette.ajax.js a stále nič. No som tom teraz kompletne stratený.

No určitě to bude chtít ještě grido.ext.js a možná i jquery.hashchange.min.js a jquery.maskedinput.min.js. Možná máš ale problém jinde – to těžko říct. Nejlepší začít od zkopírování sandboxu ..

juklicek
Člen | 12
+
0
-

JanB napsal(a):

juklicek napsal(a):

JanB napsal(a):

juklicek napsal(a):

Ahoj, mám dotaz – divím se, že to ještě nikdo nepotřeboval (nebo jen neumím hledat).

1/ Neřešil jste někdo, jak vytvořit filtr „range“ tzn. between v databázi? Potřebuji filtrovat dle data v zadaném rozsahu. (mám Doctrine datasource, ale předpokládám, že to by řešení nemělo ovlivnit)

2/ Často potřebuji filtrovat datagrid i podle hodnoty, která není zobrazena v gridu. Je to možné?

Díky

1/ Riesenie je len o par riadkov vyssie staci len scroll… Prispevok 302.
2/ Neviem ako by ta databazova podmienka mala vyzerat pri pouziti =, <>, <, > … Externy filter ale funguje aj na cast retazca automaticky ak myslis na text.

Díky, už jsem nedoufal k odpovědi, takže jsem si poradil sám, ale pro budoucí generace:
1/ Filter na rozsah (od – do) jsem nakonec vyřešil implementací vlastního filtru. Ten do modelu pošle něco jako [column] BETWEEN (%value1 AND %value2). Pro datumy to dobře funguje ve spolupráci s komponentou „dangrossman/bootstrap-daterangepicker“ – takový „od – do“ datepicker.

2/ Tam to bylo jednoduché. U filtrů, které nemají sloupec v gridu (v DB smaozřejmě ano) se musí dát grid->addFilter(yyy)->setColumn(xxx) a funguje to. To byla jen má neznalost.

Dík

p.s. (K bodu 2) Ještě jsem si trochu grid extendnul a umožnil krom Filter::RENDER_INNER a Filter::RENDER_OUTER i něco jako Filter::RENDER_AUTO a potom jsou filtry, které mají zobrazené sloupce v gridu zobrazené metodou INNER a ty které tam sloupce nemají metodou OUTER.

Ja som moj povodny prispevok opravil, moj kod je pod 289. DateRangePicker je naozaj zaujimavy napad, nenapadlo ma to urobit takto a takze mam vsetky filtre externe. Preto auto filter je tiez zaujimava vec. Rad by som videl kod ako si pridal range picker a aj ako si pridal RENDER_AUTO…

1/ Jojo – takhle „jednoduše“ mě to ani nenapadlo. S daterange datepickerem jsem si musel vytvořit vlastní Filter (níže). Ale ještě s tím, že jsem ten BETWEEN jsem musel doučit datasource – v mém případě doctrine. Takže nevím jak to zkousnou ostatní „datasoursi“ (ale mohli by):

<?php class Range extends Text
{
	protected $condition = 'BETWEEN %s';
	protected $formatValue = '%value';
	protected $betweenValueSeparator = " - ";

	/**
	 * @return \Nette\Forms\Controls\TextInput
	 */
	protected function getFormControl()
	{
		$control = parent::getFormControl();
		$control->controlPrototype->class[] = 'range';
		$control->controlPrototype->attrs['autocomplete'] = 'off';


		return $control;
	}

	/**
	 * @param string $column
	 * @param string $value
	 * @return array condition|value
	 */
	protected function _makeFilter($column, $value)
	{
		$formatedValue = $this->getBetweenValues($value);
		return array("[$column] " . $this->condition, $formatedValue);
	}

	/**
	 * @param string $betweenValue
	 * @throws \PM\Grido\Exception\UnexpectedValueException
	 * @return string
	 */
	protected function getBetweenValues($betweenValue)
	{
		$items = explode($this->betweenValueSeparator, $betweenValue);

		if(count($items) <> 2)
		{
			throw new UnexpectedValueException("For between filter format 'value1{$this->betweenValueSeparator}value2' expected");
		}

		$value = implode(" AND ", $items);

		return $value;
	}
}
?>

2/ Udělat ten AUTO filter render type bylo docela snadné. Jedna věc je, že musíš Grido naučit třetí kostantu (krom INNER a OUTER také AUTO). A pak se už jen v Grido.latte poupraví pár věcí. Ta šablona je pekelně dlouhá, takže jen nastřelím a snad si to domyslíš:

...

{var $innerFilter = ($control->filterRenderType == Grido\Components\Filters\Filter::RENDER_INNER)}
{var $outerFilter = ($control->filterRenderType == Grido\Components\Filters\Filter::RENDER_OUTER)}
{var $autoFilter = ($control->filterRenderType == Grido\Components\Filters\Filter::RENDER_AUTO)}

{if ($autoFilter)}
	{var $innerFilter = true}
	{var $outerFilter = true}
{/if}

...

{if $outerFilter}
	<div n:block="outerFilter" class="grido filter outer">
		<div class="items">
			{if $control->hasFilters()}
				{foreach $form[Grido\Components\Filters\Filter::ID]->getComponents() as $filter}
					{if $autoFilter}
						{var $isAssignedToColumn = !is_null($control[Grido\Components\Columns\Column::ID]->getComponent($filter->name, false))}
					{else}
						{var $isAssignedToColumn = false}
					{/if}

					<span n:if="!$isAssignedToColumn"  class="grid-filter-{$filter->name}">
							{$filter->label}
							{$filter->control}
					</span>

				{/foreach}
			{/if}
		</div>

...

Ještě to budeme asi trochu tunit a potom bysme možná udělali fork, kdyby to chtěl O5 použít.

greggy
Člen | 14
+
0
-

juklicek napsal(a):

greggy napsal(a):

juklicek napsal(a):

greggy napsal(a):

Ahoj, stiahol som si najnovsi grido. pouzivam jquery-1.10.2.js aj grido.js.
Vytvorim si operations, ale nefunguje oznacenie vsetkych checkboxov, spustenie operacie a tiez zmena poloziek na stranu. Neviete mi poradit, naco sa pozriet, co by som mohol mat zle?

Ahoj, myslím, že pouze grido.js nestačí – máš tam i „to ostatní“? Nedávno jsem také Grido rozcházel poprvé a musím přiznat, že jsem se v těch JS souborech taky trochu ztrácel – který je potřeba na co. O5 to má dělané přes nette.ajax.js (super), takže minimálně JS soubory kolem tohoto tam být dle mého musí – myslím, že stejně nakonec dojdeš k tomu, že tam jsou potřeba všechny JS soubory co jsou v sandboxu :)

Tak používam grido.js, jquery.js, netteForms.js, main.js na inicializáciu nette.ajax.js a stále nič. No som tom teraz kompletne stratený.

No určitě to bude chtít ještě grido.ext.js a možná i jquery.hashchange.min.js a jquery.maskedinput.min.js. Možná máš ale problém jinde – to těžko říct. Nejlepší začít od zkopírování sandboxu ..

Ďakujem. Pomohlo nakopirovanie súborov zo sandboxu. Možno by ich bolo dobre pridať ku client-side skriptom.

o5
Člen | 416
+
0
-

greggy napsal(a):

Pomohlo nakopirovanie súborov zo sandboxu. Možno by ich bolo dobre pridať ku client-side skriptom.

Takto to bylo dříve, ale chtěl jsem, aby grido.js nemělo žádnou závislost kromě jQuery (a to je taky současný stav)

Editoval o5 (7. 10. 2013 15:13)

miler
Člen | 75
+
0
-

Jde nějak docílit toho, aby si grid pamatoval zaškrtnuté položky i při stránkování? Např stránkování po 10 řádcích, zaškrtnu si položku s ID3, pak na další straně s id 12 atd a ve výsledku se mi předají do operations všechny ty zaškrtané věci napříč stránkováním? Díky

juklicek
Člen | 12
+
0
-

miler napsal(a):

Jde nějak docílit toho, aby si grid pamatoval zaškrtnuté položky i při stránkování? Např stránkování po 10 řádcích, zaškrtnu si položku s ID3, pak na další straně s id 12 atd a ve výsledku se mi předají do operations všechny ty zaškrtané věci napříč stránkováním? Díky

To asi nejde (pokud vím) – ale hlásím, že by se nám to také hodilo. Jinak řečeno operations napříč stránkami. :)

p.s.:
Nebo možná ještě lépe (jako na google mailu), když dám označit vše mohlo by se to zeptat zda myslím vše na aktuální stránce nebo na všech :)

Editoval juklicek (14. 10. 2013 16:25)

tomhrb
Člen | 23
+
0
-

ahojte,

chtel bych pouzit outterinner filter type soucasne (vyuzit prehlednosti ve sloupcich s inner a zaroven mit bokem filtr pro datum). neresil prosim nekdo, ci existuje voditko?
dekuji

Editoval tomhrb (16. 10. 2013 12:25)

juklicek
Člen | 12
+
0
-

Takové trochu vodítko najdeš o pár příspěvků výš: příspěvek 336 druhý bod :) Není to kompletní řešení, ale jen ukázka toho „aby to navedlo“. Sám o sobě to grido neumí, ale moc mu nechybí.

matto
Člen | 55
+
0
-

miler napsal(a):

Jde nějak docílit toho, aby si grid pamatoval zaškrtnuté položky i při stránkování? Např stránkování po 10 řádcích, zaškrtnu si položku s ID3, pak na další straně s id 12 atd a ve výsledku se mi předají do operations všechny ty zaškrtané věci napříč stránkováním? Díky

toto by sa hodilo aj mne.
A este dalsia vec, potreboval by som operation vyvolavat tlacitkom mimo gridu. Mohli by ste ma prosim niekto naviest na spravnu cestu ako to docielit? Dakujem

Climber007
Člen | 105
+
0
-

Ahoj, jak to vypadá s podporou Bootstrap 3?

o5
Člen | 416
+
0
-

Climber007 napsal(a):

Ahoj, jak to vypadá s podporou Bootstrap 3?

Je to věc šablony, takže stačí pozměnit tuším dva řádky a je to. TB3 je příliš ugly, aby ho Grido používalo officiálně.

v6ak
Člen | 206
+
0
-

On pro to byl nějaký pull request, stačí se podívat do issues.

Jinak Bootstrap 3 mi nepřijde moc ugly, ale možná to bude tím, že používám jejich optional theme. Pak AFAIK není vizuální rozdíl mezi B2 a B3.

Jiří Nápravník
Člen | 710
+
0
-

o5 napsal(a):
TB3 je příliš ugly, aby ho Grido používalo officiálně.

To jako vážně? Díky subjektivnímu názoru ustrne grafický vývoj na dva roky staré verzi (či kdy vyšel TB2)? Pokud někdo používá TB3 v aplikaci, tak bude muset ještě přibalovat TB2 jen kvůli gridu, nebo přepisovat šablonu (což když jsem si dělal naposledy, tak sice nebyla dlouhá doba, ale taky ne dva řádky). Nebylo by pak lepší udělat aspoň šablonu s TB3, že by si jí pak mohl člověk přepnout, pčípadně to jak navrhoval pepakriz, davat zdvojene classy (ač to není pěkné)?

Climber007
Člen | 105
+
0
-

Prozatím jsem to zazáplatoval obalením celého Grida <div class=„tb2“> a přidáním .tb2 ke všem selektorů v CSS (skoro ručně, protože regexy selhaly).
Ugly, neugly. Stojí za ním JEN Twitter, takže to určitě musí být pravda. A ano je to pouze o šabloně, nicméně proč ostatním práci neznechutit,že.

o5
Člen | 416
+
0
-

v6ak napsal(a):

On pro to byl nějaký pull request, stačí se podívat do issues.

Pull byl, ale nebyl funkční.

v6ak napsal(a):

Jinak Bootstrap 3 mi nepřijde moc ugly, ale možná to bude tím, že používám jejich optional theme. Pak AFAIK není vizuální rozdíl mezi B2 a B3.

Jestli víš jak udělat, aby Grido vypadalo s TB3 jako s TB2, pošli pull ⇒ rád zmerguju :)

Jiří Nápravník napsal(a):

To jako vážně? Díky subjektivnímu názoru ustrne grafický vývoj na dva roky staré verzi (či kdy vyšel TB2)? Pokud někdo používá TB3 v aplikaci, tak bude muset ještě přibalovat TB2 jen kvůli gridu, nebo přepisovat šablonu (což když jsem si dělal naposledy, tak sice nebyla dlouhá doba, ale taky ne dva řádky). Nebylo by pak lepší udělat aspoň šablonu s TB3, že by si jí pak mohl člověk přepnout, pčípadně to jak navrhoval pepakriz, davat zdvojene classy (ač to není pěkné)?

Sorry, ale „základní“ TB3 se mi vážně hnusí. Obecně flat design se kterým přišly W8 se mi vůbec nelíbí, ale naštěstí jsem to nemusel řešit…bohužel až do příchodu iOS7. Je jasný, že TB3 budu muset asi jednou stejnak překousnout, každopádně se na to ještě necejtím :P

Jako opravdu nevím, jak by se to mělo vyřešit správně. Řešení přes novou šablonu se mi nezamlouvá, protože příjde někdo a řekne že používá http://semantic-ui.com/ a co bude pak, nová šablona? Budu udržovat x šablon? Chtělo by asi šablonu nějak rozumě rozdělit a rozseparovat. Nevím :/

v6ak
Člen | 206
+
0
-

S TB2 jsem nepracoval a nevím, jestli je to přesně ono, ale patrně mi to dělá tady tento řádek:

<link rel="stylesheet" href="/libs/bootstrap/css/bootstrap-theme.min.css" />

Asi nebude věc Grida, aby tento řádek přidávalo (snad kromě dema apod.). Grido by IMHO nemělo vnucovat žádný theme.