Grido – DataGrid pro Nette

mpis
Člen | 65
+
0
-

Díky za tento výborný grid.
Nicméně mám dotaz, který má určitě o mnoho dalších nových uživatelů tohoto gridu.

Našla by se dobrá duše, která by polopatisticky napsala co všechno a hlavně kam se má nakopírovat do rozpracované aplikace, aby Grido fungovalo přesně tak, jak funguje v demo?

Pokud si stáhnu distribuční verzi, tak v ní vidím pouze adresář Grido, který nakopíruji do \lib a pak ještě client-side a v něm 2 soubory, které umístím do příslušných adresářů \css a \js.
Grido mi pak v mé aplikaci sice nějak funguje, ale s nepoužitelným vzhledem.
Pochopitelně grido-sandbox jsem si na instaloval na locale a funguje správně stejně jako demo.
Je to trochu vada na kráse, jelikož bych očekával, že nakopíruji vše potřebné do mé aplikace a jedu.

Editoval mpis (7. 5. 2014 13:36)

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

Pokud ti jede grido správně ale špatný vzhled, tak máš blbě nalinkovaný css a js, zkontroluj tedy jestli je máš správně v šabloně.

mpis
Člen | 65
+
0
-

V šabloně mám ty dva soubory pochopitelně zapsané správně.
A psal jsem, že „nějak funguje“, ale určitě ne správně. Například po kliku na třídění se překresluje celá stránka místo samotného gridu. Nebo pro změnu počtu řádků se musí kliknout na tlačítko, které v demo vůbec není vidět.
Tak teď nevím, co s tim a termín se blíží.

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

Pokdu temi dvema soubory myslis grido.js a grido.css, tak to je samozrejme malo, pokud chces funkcionalitu co je v demu. K demu potrebujes pridat loicky vsechny js soubory, co jsou v grido-sandbox – jquery, nette.ajax, jquery pluginy, atd.

koprkuba
Člen | 24
+
0
-

mpis napsal(a):

V šabloně mám ty dva soubory pochopitelně zapsané správně…

Doporučil bych pořádně prostudovat Live DEMO konkrétně se podívat jaké js soubory jsou naimportovány do stránky a co že to vlastně provádějí.

Konkrétně to co píšeš vypadá, že Ti nefunguje AJAX, takže bych se podíval do scriptu grido.ajax.js. Klidně ko můžeš jen vložit do stránky a mělo by to fungovat.
Také se hodí prostudovat si grido.ext.js, to je soubor ve kterém jsou rozšíření jako je datepicker a onhashchange viz. MDN

dryb
Člen | 8
+
0
-

Mám v šabloně stránky formulář s filtrem a seznam s gridem:
{control protocolFilterForm}
{control grid}

Podle zadání v protocolFilterForm nastavuju datovy zdroj pro grid.

Ale po kliknutí na sloupec v gridu kvůli setřídění se načte znovu celá stránka s default nastavením formuláře
protocolFilterForm.

Co je špatně?

kolsi
Člen | 131
+
0
-

sasule napsal(a):

kolsi napsal(a):

Výborně, zrovna jsem se chtěl zeptat, jestli jde nějak jednoduše udělat MultiSelect filter :-) jenom koukám, že to nefunguje pro ArraySource, tak se musím podívat, jak to vlastně funguje :)

ArraySource prověřím jak bude chvilka – sám ArraySource nevyužívám, prioritou pro mě bylo Doctrine a Nette\Database.

Jelikož používám většinou ArraySource, tak jsem kód upravil, aby pro něj šlapal bez problému. Jenže teď jsem ten MultiSelect filtr chtěl použít s běžným NetteDatabase modelem a koukam, že ono to nefunguje ani s ním (bez ohledu na moje úpravy pro ArraySource).

  1. pokud není ani jedna volba z multiselectu zaškrtnutá, tak to hází výjimku „Invalid parameter number: no parameters were bound“
  2. pokud je vybrána právě jedna volba, tak to funguje
  3. pokud je vybrána více jak jedná volba, tak to hází „Invalid parameter number: number of bound variables does not match number of tokens“

Problém vidím v tom, že se vytváří dotaz ve stylu $selection->where(‚authtype IN (?)‘, array(1, 2)), což je špatně, protože array v parametru určuje hodnoty pro zástupné otazníky v podmínce.

EDIT: zrovna tak DateRange filter nefunguje pro ArraySource: Condition ‚BETWEEN ? AND ?‘ not implemented yet.

Editoval kolsi (16. 5. 2014 9:17)

libik
Člen | 96
+
0
-

Grido mi zobrazovalo 11 zaznamu (strankovani po 10). Na 2. strance jsem smazal ten 11. a koncim v ladence s notice „Page is out of range.“

<?php 439: trigger_error(„Page is out of range.“, E_USER_NOTICE);?>

Nastaveni grida mam:

<?php
$grid = new \Grido\Grid($this, $name);
        $grid->setRememberState(true);
        $grid->setModel($this->items->findAll());
        $grid->setPerPageList(array(10, 20, 50));
        $grid->setDefaultPerPage(10);
        $grid->translator->lang = 'cs';
	...
?>

V cem muze byt problem?

raketoplan2005
Člen | 147
+
0
-

Ahoj,

řeším teď Custom Filter pro datum. Mám jeden sloupec s datem a chtěl bych použít něco jako DateRange ale s tím že bych měl dva CustomFiltry jeden pro datum_od a druhý pro datum_do.

Chtěl jsem podobně jako to mám už u jednoho select filtru na status udělat něco jako vlastní Condition k

$grid->addFilterDate('date_from', 'Datum od')

, ale nepodařilo se mi takovou podmínku (resp. formát jak ho předat Gridu, podmínka je nahradit LIKE za >=) vymyslet.

Je to nesmysl? Děkuji

Editoval raketoplan2005 (21. 5. 2014 11:43)

Foi
Člen | 8
+
0
-

Mám tu jednu chybu, která se projeví po ajaxovém požadavku, ostatní ajaxové prvky na stejné stránce vrací čistou stránku bez chyby.

exception 'Nette\InvalidStateException' with message 'Cannot send header after HTTP headers have been sent (output started at /data/web/virtuals/63812/virtual/www/subdom/c/temp/cache/latte/subdom-c-app-AdminModule-templates-layout-latte-e3dd54fd44eb173f5ff428ff8ea29bab.php:30).' in /data/web/virtuals/63812/virtual/www/subdom/c/vendor/nette/http/src/Http/Response.php:314
Stack trace:
#0 /data/web/virtuals/63812/virtual/www/subdom/c/vendor/nette/http/src/Http/Response.php(95): Nette\Http\Response->checkHeaders()
#1 /data/web/virtuals/63812/virtual/www/subdom/c/vendor/nette/http/src/Http/Response.php(131): Nette\Http\Response->setHeader('Content-Type', 'application/jso...')
#2 /data/web/virtuals/63812/virtual/www/subdom/c/vendor/nette/application/src/Application/Responses/JsonResponse.php(69): Nette\Http\Response->setContentType('application/jso...')
#3 /data/web/virtuals/63812/virtual/www/subdom/c/vendor/nette/application/src/Application/Application.php(156): Nette\Application\Responses\JsonResponse->send(Object(Nette\Http\Request), Object(Nette\Http\Response))
#4 /data/web/virtuals/63812/virtual/www/subdom/c/vendor/nette/application/src/Application/Application.php(88): Nette\Application\Application->processRequest(Object(Nette\Application\Request))
#5 /data/web/virtuals/63812/virtual/www/subdom/c/www/index.php(8): Nette\Application\Application->run()
#6 {main}
(stored in /data/web/virtuals/63812/virtual/www/subdom/c/log/exception-2014-05-21-17-48-22-e205bb8b37c69fa280657ade11b2b859.html)
lucas
Člen | 2
+
0
-

Ahoj, umí současná verze vícenásobné řazení sloupců? Díval jsem se, že vnitřně podporované je a dokonce na live demu pokud přidám do adresy druhý sloupec, tak se data podle více sloupců skutečně seřadí, ale zdá se, že to není uživatelsky podporované, respektive nemohu najít postup ani zmínku jak to zprovoznit. Poradil by mi prosím někdo? Děkuji.

Oli
Člen | 1215
+
0
-

lucas: tohle by mohlo být to co hledáš, ale musíš mít myslím filtr jako outer.

lucas
Člen | 2
+
0
-

oli: to asi není ono, vícenásobné řazení je, že data mohou být seřazená podle více než jednoho sloupce, Grido to vnitřně podporuje, důkazem je např. http://grido.bugyik.cz/example/#…[card]=asc&grid-sort[gender]=asc

ale vypadá to, že to není uživatelsky dořešené, protože při kliknutí na jiný sloupec se řazení přesune (tedy nepřidá)…používal jsem dříve DataGrid od Romana Sklenáře, který vícenásobné řazení uměl, ale už pár let není vyvíjen a nejspíš kvůli nekompatibilitě s novým Nette se vytratil z Doplňků

Ja
Člen | 260
+
0
-

Co se tyce ajaxu, tak mam problem, ze poprvy se mi filtrovani provede ajaxem, podruhy uz se refreshuje cela stranka.

Nestalo se vam to nekomu? Po letmym pohledu do jska, se to binduje pres .on(), takze by to nemelo vyzadovat externi znovunabindovani, na ten formular.

Nebo jak to resite? Diky moc

vojty
Člen | 19
+
0
-

Ahoj kluci,
poradíte mi prosím někdo jak mohu udělat redraw componenty gridu po operaci? Mám komponentu UsersGrid poděděnou od Grida a v ní navěšeny tenhle callback pro operace

<?php
    public function tableOperationsHandler($operation, $id)
    {
        $this->getPresenter()->tableOperationsHandler($operation, $id);
        $this->redrawControl();
    }
?>

hlásí mi to ale : Component name must be integer or string, NULL given

kolsi
Člen | 131
+
0
-

Nějaká rada k setOperation? Mám grido s ArraySource modelem, každý řádek je identifikován pomocí sloupce „name“ a teď chci přidat operace (např. hromadné mazání apod.). Zde nastává problém:

<?php
		$grid->setOperation(array('delete' => 'Delete'), function($operation, $files) {

		})->setPrimaryKey('name');
?>

hází tento error: Component name must be non-empty alphanumeric string

Problém vidím v tom, že grido použije rovnou daný klíč (v mém případě „name“) jako název pro checkbox, což ale Nette nedovolí, pokud se nejedná čistě o alfanumerický řetězec (čili např. „nazev-souboru.txt“ neprojde). Nějaký nápad, jak toto řešit?

raketoplan2005
Člen | 147
+
0
-

Ahoj,

přidal jsem si do Grida where podmínku pro addFilterCheck s ArrayResource:

$grid->addFilterCheck('filled', 'Pouze nevyplněné')
	->setWhere(function($value, $row) {
        	return (!isset($row['item']));
	});

Což funguje správně, ale jen pokud grid nemá setRememberState() na TRUE. Pokud má setRememberState() na TRUE, pak mi po prvním zaškrtnutí filtru správně zmizí položky které mají nějakou hodnotu, ale zmizí už navždy (resp. do kliknutí na „reserovat“).

Děje se to, že při zaškrtnutí se nastaví productsGrid-filter[filled]=1 a pří odškrtnutí pak v URL zůstane productsGrid-filter[filled]=

Dokázali byste mi prosím poradit kde hledat chybu? Děkuji

Editoval raketoplan2005 (6. 6. 2014 11:57)

nejman
Člen | 13
+
0
-

Ahoj,
zkousel jsem na ‚http://grido.bugyik.cz/example/outer/‘ FilterCheck na ‚Only preferred girls :)‘ a
zda se mi, ze nefunguje na Nette/Database… Zkousel jsem pouzit i u sebe, a nedari se mi rozbehnout
funkcnost ani nad existujicim sloupcem ani na virtualnim. Jak ma byt udelat addFilterCheck?

Zkousel jsem:

<?php
$grid->addFilterCheck('name2', 'Test')
     ->setCondition(array(
TRUE=>array('name','=','h403_13032614')));
?>

nebo

<?php
$grid->addFilterCheck('name2', 'Test')
     ->setCondition(array(
array('name','=','h403_13032614'));
?>

nebo

<?php
$grid->addFilterCheck('name2', 'Test')
     ->setCondition(array(
TRUE=>array('name','= ?','h403_13032614')));
?>

A nic z toho nefungovalo. name je realny nazev sloupce v DB. V SQL logu se vetsinou objevi podminka
where 0=1 (to asi zpusobuje setupEmpty()). Nefunguje mi ani to demo na webu…

Jaky maji byt parametry setCondition? Z dokumentace mi to jasne neprislo.

Predem diky.

Editoval nejman (20. 6. 2014 17:52)

nejman
Člen | 13
+
0
-

Ahoj,
zije jeste o5? Koukam, ze 1/4 roku autor Grida neni na foru. Nemate nejakou informaci o autorovi? Rozmyslim, ktery z datagridu pouzit. Zatim se mi zda nejpouzitelnejsi Grido, ale jestli je to mrtvy
projekt, mohl by mi nekdo doporucit alternativu? Drive jsem pouzival datagrid od Romana Sklenare,
a Grido mi prijde hodne podobny a kompatibilni…

Diky,
Honza

nejman
Člen | 13
+
0
-

Zkousel jsem:

<?php
$grid->addFilterCheck('name2', 'Test')
     ->setCondition(array(
TRUE=>array('name','=','h403_13032614')));
?>

nebo

<?php
$grid->addFilterCheck('name2', 'Test')
     ->setCondition(array(
array('name','=','h403_13032614'));
?>

nebo

<?php
$grid->addFilterCheck('name2', 'Test')
     ->setCondition(array(
TRUE=>array('name','= ?','h403_13032614')));
?>

Sice setCondition jsem nerozbehl, ale podarilo se mi filtrovat pres setWhere nad
dibi fluent. Pokud by se nekomu hodilo, tak jsem pouzil:

<?php
$grid->addFilterCheck('name2', 'Only pref')
->setWhere(function($value, $row) {
    return $row->removeClause('where')->where('name=%s','h403_13032614');
});
?>

removeClause zrusi aktualne nastavene filtracni podminky, a prida jen tu jednu specialni…

Pokud by nekdo vedel, jak resit pres setCondition budu rad.

Oli
Člen | 1215
+
0
-

@nejman mrtvej projekt to není. Posledni commit před 14 dny: FrontModule\Nette\Database\Context

o5
Člen | 416
+
0
-

nejman napsal(a):

Ahoj,
zije jeste o5? Koukam, ze 1/4 roku autor Grida neni na foru. Nemate nejakou informaci o autorovi? Rozmyslim, ktery z datagridu pouzit. Zatim se mi zda nejpouzitelnejsi Grido, ale jestli je to mrtvy
projekt, mohl by mi nekdo doporucit alternativu? Drive jsem pouzival datagrid od Romana Sklenare,
a Grido mi prijde hodne podobny a kompatibilni…

Diky,
Honza

Zkus třeba někdy otevřít github.com a podívat se tam. Jinak posuzovat životnost projektu dle aktivity na tomhle fóru si asi nemyslel vážně viď? Ale chápu, že člověk co nikdy nedělal open-source nedokáže pochopit co času to stojí a ty pohledy okolí, že ve volném čase děláš něco zadarmo…

Editoval o5 (1. 7. 2014 15:01)

nejman
Člen | 13
+
0
-

Zkus třeba někdy otevřít github.com a podívat se tam. Jinak posuzovat životnost projektu dle aktivity na tomhle fóru si asi nemyslel vážně viď? Ale chápu, že člověk co nikdy nedělal open-source nedokáže pochopit co času to stojí a ty pohledy okolí, že ve volném čase děláš něco zadarmo…

Ahoj,
promin, nechtel jsem se te nejak dotknout. Chapu, ze casu je pomalu. To byl spis dotaz, jestli se projekt jeste vyviji, protoze prede mnou bylo mnoho dotazu, na ktere nikdo neodpovedel. Cetl jsem vsech 12 stranek prispevku, a ze zacatku bylo od tebe mnoho komentu, coz kontrastovalo s tema poslednima mesicema. Jako kdyz nekdo nenapise 14 dni, mesic, OK. Ale 1/4 roku mi prislo uz divny. Treba, ze se autor nekam odstehoval,
nema na to cas, resi problemy v praci, atd. Pokud by nikdo na muj dotaz neodpovedel, nic se nedeje, spis,
ze mne zarazely ty nezodpovezene dotazy nade mnou. Takze sorry, jinak jsem si nejak sam poradil.

Mej se,
Honza

theo
Člen | 57
+
0
-

Grido je fajn, používám ho (zatím) v jednom projektu, ale hned ze startu jsem narazil na jeho jistou provázanost s SQL databázovým světem. Dělám totiž na projektu, kde podkladovou databází je MongoDB a pro ni (a ostatní NoSQL) databáze je trochu problém Grido použít, protože je závislé na Grido\DataSources třídě, která tak nějak počítá s tím, že podkladová databáze je SQL (hlavně při filtrování).

Naštěstí není zas tak velký problém si Grido\DataSources podědit a postavit si nad ní vlastní wrapper třídu, která dokáže implementovat toto chování i nad MongoDB. Pokud by měl autor zájem o tuto třídu, můžu ji nabídnout jako příspěvek k vývoji (samotná třída je vlastnictvím firmy, nicméně asi by nebyl problém se domluvit buď na „reimplementaci“, nebo dvojím licencování, nebo změně licence). Myslím, že by bylo fajn, kdyby tak dobře udělaná komponenta uměla pracovat i s nejrozšířenější NoSQL databází.

Tori
Člen | 32
+
0
-

Jak se řeší zobrazení v gridu, když z DB tahám data ve vztahu 1:M (např. uživatel a několik zaměstnavatelů)?

  1. Když nechám jednoho zaměstnavatele na jeden záznam, tak mi řádky s duplicitním ID uživ. vyhodí error: „Component with name [ID uživatele] already exists“. Dá se seskupování řádků se stejným ID řešit až v Gridu, místo v datasource?
  2. Když seskupím data podle ID uživatele a pro zaměstnavatele použiju GROUP_CONCAT(company.name SEPARATOR "; "), tak mi zase našeptávač ve filtru nabízí i hodnoty jako „firma1; firma2“. Dá se to nějak jednoduše upravit, aby našeptávač vracel samostatné hodnoty? (Vím o setSuggestionCallback, ale na straně DB se čte z pohledu, který už má nastavené to seskupování podle ID, takže bych musela použít nějaké LIKE "%$query%" a to by bylo asi dost pomalé.)

Editoval Tori (26. 7. 2014 9:28)

ryu
Člen | 29
+
0
-

Zdravím, měl bych takový feature request. Potřeboval bych něco jako podmíněné buňkové akce, tedy pokud má daná buňka danou hodnotu zobrazit tam tlačítko s takovou a takovou akcí. Vím, že to jde řešit přes render ale to je takové nepěkné.

Dále by to chtělo udělat lepší bootstrap podporu, páč abych určil barvu tlačítka, musel jsem:

$grid->addActionHref('action2', 'Aktivovat')
			//->setIcon('plus')
			->getElementPrototype()
			->addAttributes(array('title' => 'Aktivovat'))
			->addAttributes(array('class' => 'btn-sm btn-success'));

A ktomu ještě upravit template aby ty třídy vypsal.

Taky by bylo moc fajn, kdyby se input ve filtrovani daly taky pridat nejake vlastni css tridy, pac bootstrap to moc roztahuje.

ryu
Člen | 29
+
0
-

A taky podpora groupActions by byla moc fajn…

Casper
Člen | 253
+
0
-

@ryu: K té podmíněné akci, neřeší to náhodou metoda setDisable?

kralik
Člen | 230
+
0
-

Ahoj,
bohužel jsem nějak zaslepen a při používání skvélé komponenty Grido jsem narazil.
Tímto bych rád požádat o pomoc.

V Gridu potřebuji použít template šablonu v níž mám klasicky přes <ul><li></li></ul> vytvořené menu.

<?php
$grid->addColumnText('akce', 'Akce')
               ->setCustomRender(__DIR__ . '/../templates/Web/sbBubak.latte');
?>

Bohužel nemohu přijít na dvě věci:

  • Jak do této šablony poslat nějakou proměnnou např. $mojeCislo
  • Nefungují mi odkazy přes <a n:href=„Web:akce“> objeví se chyba: Component with name ‚Web‘ does not exist

Věřím, že to je triviální dotaz, ale nějak mi to zatím nedocvaklo jak na to.

Mooc díky všem

kolsi
Člen | 131
+
0
-

Má někdo nějaký nápad, jak dělat správně řazení podle datumů v případě, že mám datum a čas rozdělený do více sloupců, resp. mám sloupce Datum, Od, Do? Když pak seřadím podle data sestupně, tak to samozřejmě bude matoucí, protože jednotlivé dny sice sestupně budou, ale časy v rámci jednoho dne budou vzestupně.

o5
Člen | 416
+
0
-

Sorry, ale nechodí mi notifikace z tohoto vlákna.

@theo napsal(a):

Pokud by měl autor zájem o tuto třídu, můžu ji nabídnout jako příspěvek k vývoji

Určitě pošli pull, rád zmerguju!

@Tori napsal(a):

Jak se řeší zobrazení v gridu, když z DB tahám data ve vztahu 1:M (např. uživatel a několik zaměstnavatelů)?

Nevím jestli jsem tě pochopil, ale řešil bych to nějak takto:

$grid->addColumnText('zamestnavatel', 'Zamestnavatel')
	->setCustomRender(...);
	->setFilterText()
		->setSuggestion(); //našeptávání jen z tabulky `zamestnavatel`

@ryu napsal(a):

Potřeboval bych něco jako podmíněné buňkové akce…

Zkus co ti radil @Casper, $action->setDisable()..

@ryu napsal(a):

Dále by to chtělo udělat lepší bootstrap podporu

Ono udělat lepší podporu pro bootstrap není úplně nejlepší, když někdo má raději třeba Foundation, každopádně se mi současný stav taky nelíbí

@ryu napsal(a):

podpora groupActions by byla moc fajn

Co jsou groupActions?

@kralik napsal(a):

Jak do této šablony poslat nějakou proměnnou např. $mojeCislo

Koukni na příklad, mohl bys to udělat podobně jako 4presenter->template->baseUri

@kralik napsal(a):

Nefungují mi odkazy přes <a n:href=„Web:akce“> objeví se chyba: Component with name ‚Web‘ does not exist

Musíš použít {plink}

kralik
Člen | 230
+
0
-

Tak to jsem teda pěkná LAMA.
zkoušel jsem n:href a {link}, ale už mě nenapadlo {plink} :-(

Mooc díky za pomoc.

Proměnná do šablony
Do Renderu v Presenteru přidat požadovanou proměnnou.

<?php
public function renderMojeDoc() {
      $mojeCislo = 27;

      $this->template->mojeCislo = $mojeCislo;
}
?>

V šabloně je pak proměnná dostupná

<?php
{var $mojeCislo = $presenter->template->mojeCislo}

Moje číslo: {$mojeCislo}

?>

Vše maká skvěle.

Ještě jednou díky a velká poklona za GRIDO.

Všem přeji hezký den

CZechBoY
Člen | 3608
+
0
-

Řešil jste někdo problém s XSS skrze suggestion?

o5
Člen | 416
+
0
-

CZechBoY napsal(a):

Řešil jste někdo problém s XSS skrze suggestion?

Můžeš to trochu rozvést?

CZechBoY
Člen | 3608
+
0
-

No když si dám suggestion na sloupeček name a v tom sloupci mi to našeptá třeba
„<script>alert("cs“)</script>"

Editoval CZechBoY (14. 8. 2014 0:13)

kolsi
Člen | 131
+
0
-

Pokud je použit ArraySource, tak napsání znaku / do textového filtru skončí s chybou. Možné řešení je do ArraySource.php, řádek 97, doplnit druhý parametr k funkci preg_quote, aby escapovala i tento znak.

Čili:

$pattern = str_replace('%', '.*', preg_quote($expected, '/'));
CZechBoY
Člen | 3608
+
0
-

Používám nette database.

ps. Jaktože jsem tu odpověď přehlídl? :-/

vojty
Člen | 19
+
0
-

Ahoj,

při inline editaci dostávám chybu:
exception ‚Nette\MemberAccessException‘ with message 'Call to undefined method Grido\DataSources\Doctrine::getRow()

Data se uloží ale neprovede se skrytí inputu.

Padne to na

Grido\Components\Columns\Editable
238 $data = $this->grid->model->getRow($this->grid->primaryKey, $id)->fetch();

Díky za radu.


tak ten problém přivodil novej commit, který přidává podporu inline editaci pro custom renderer, ale je to vyřešený jen tak napůl…:/

Editoval vojty (26. 8. 2014 17:01)

Ja
Člen | 260
+
0
-

Nemel by nekdo tuseni, jak vypnout v gridu escapovani sloupce? Diky

CZechBoY
Člen | 3608
+
0
-

@Ja k čemu to potřebuješ?
Jestli chceš editovat třeba úvod článku tak to spíš udělej odkaz na článek a až tam to edituj.

Ja
Člen | 260
+
0
-

@CZechBoY: pozadavek zakaznika, bohuzel to tak musi byt
edit: nechci to editovat, chci to pouze zobrazit

Editoval Ja (29. 8. 2014 0:31)

CZechBoY
Člen | 3608
+
0
-

Ja napsal(a):

@CZechBoY: pozadavek zakaznika, bohuzel to tak musi byt
edit: nechci to editovat, chci to pouze zobrazit

Takže chceš zobrazit obsah článku v gridu?
Použij

->setCustomRenderer(function($row) {
  return \Nette\Utils\Html::el('div')->setHtml($row->mojeHtml);
});

edit: jo zapomněl jsem uvozovky

Editoval CZechBoY (31. 8. 2014 20:00)

Ja
Člen | 260
+
0
-

Moc dik, jen doplnim aktualizovanou verzi bez preklepu :)

->setCustomRender(function($row) {
	return \Nette\Utils\Html::el('div')->setHtml($row->mojeHtml);
});
srbt
Člen | 2
+
0
-

Dostávám data z api, kterému mohu dát filtr, offset a count a ono mi vrátí příslušný úsek dat a celkový počet dat odpovídajících filtru.
Narazil jsem na problém s pagerem – nejdřív chce znát celkový počet dat a pak teprve vrací informace pro limit. Nemohu se ptát api dvakrát, provizorně jsem to vyřešil tím, že si nechám poslat data všechna a limit aplikuju pomocí array_slice jako to dělá ArraySource, ale to se s rostoucím objemem dat stává neúnosným.
Prosím, může někdo poradit, zda jsem něco přehlédl, nebo se opravdu bez forku a změny v nette či grido neobejdu?

s4muel
Člen | 92
+
+1
-

@srbt skus toto: http://o5.github.io/…tion.cs.html#…, konkretne prepisanie metody getCount()

srbt
Člen | 2
+
0
-

Děkuji za odpověď, nenapadá mne jak getCount upravit, aby fungoval jak potřebuji. Zatím nejlépe mi fungovala úprava:

diff --git a/Grido/Grid.php b/Grido/Grid.php
index fd4a3f6..3e70bea 100755
--- a/Grido/Grid.php
+++ b/Grido/Grid.php
@@ -840,9 +840,10 @@ class Grid extends Components\Container

     protected function applyPaging()
     {
-        $paginator = $this->getPaginator()
-            ->setItemCount($this->getCount())
-            ->setPage($this->page);
+        $paginator = $this->getPaginator();
+        $paginator->setPage($this->page);
+        $this->model->limit($paginator->getOffset(), $paginator->getLength());
+        $paginator->setItemCount($this->getCount());

         $perPage = $this->getPerPage();
         if ($perPage !== NULL && !in_array($perPage, $this->perPageList)) {
@@ -850,7 +851,6 @@ class Grid extends Components\Container
             $perPage = $this->defaultPerPage;
         }

-        $this->model->limit($paginator->getOffset(), $paginator->getLength());
     }

     protected function createComponentForm($name)

tak jen doufám, že jsem nic nerozbil.

chladekt
Člen | 10
+
0
-

Třídění podle více sloupců (šipečky u více sloupců) se tu už řešilo. Předpokládám, že stále není podporováno. Plánuje se to? Kdy by to mohlo být? Nevíte, jaký jiný plugin pro Nette by to umožňoval? jQuery plugin tablesorter to umí. Možná ho proto upřednostním před tímto pluginem.

o5
Člen | 416
+
0
-

@chladekt: Pro multisort je Grido připravené, jen chybí implementovat UI. V dohledné době to ale určitě nebude, protože až budu mít znovu síly, vyřeším existující issues, kterých není zrovna málo.

mpis
Člen | 65
+
0
-

V definici komponenty s grido mám toto:

$action->setCustomRender(function($item, \Nette\Utils\Html $el)
      {
      $el->removeChildren();
      $el->addAttributes(array(
        'href' => $this->link('Equipment:equipmentView',  array(
          'equipment_id' => $item->equipment_id,
          'docarea_id' => $this->template->docarea_id,
					'doccategory_id' =>  $item->doccategory_id)),
        'class' => 'icon view',
        'title' => 'Prohlížet přístroj',
      ));
      return $el;
      });

Jak mám napsat řádek s textem pro title

'title' => 'Prohlížet přístroj',

aby se mi ten text překládal translatorem vestavěným v grido. Takhle, jak to je, se text nepřekládá. Věci jako nadpisy sloupců apod. to překládá správně.
Hledám a zkouším celý večer a pořád na nic nemůžu přijít.
A ještě jedna otázka. Co a jak mám udělat, abych mohl tento translátor v Grido mohl použít v celé aplikaci na formuláře a šablony.
Návod na použití translátoru v dokumentaci Nette je zoufale nekonkrétní a podrobnější komplexní návod nemůžu nikde najít.