Grido – DataGrid pro Nette

akadlec
Člen | 1326
+
0
-

Ano je to těžké, jednak nejsem gitpositive a druhak ty změny byly v závislosti na aplikace pro kterou to používám. Jen příklad: v js máš element.parent().parent() ale když poupravíš template tak už ti to nemusí šlapat.

sepo
Člen | 69
+
0
-

Ahoj

je možné pri count() /DibiFluent getCount()/ nepoužívať subquery
:-(

SELECT COUNT(*)
FROM (
SELECT id
FROM table ) AS data

:-)

SELECT COUNT(id)
FROM table

pri objemnejšej tabuľke to zoberá dosť času

o5
Člen | 416
+
0
-

Jak si asi koukal, v \Grido\DataSources\DibiFluent se to řeší „dibi-standartně“ takto a abych pravdu řekl, nevím jak to řešit elegantně jinak.

EDIT: ještě něco k tématu: http://sql-cross-queries.freexit.eu/dibifluent#1

Editoval o5 (26. 2. 2013 14:59)

sepo
Člen | 69
+
0
-

rozprášiť $this->fluent
a poskladať nanovo

o5
Člen | 416
+
0
-

sepo napsal(a):

rozprášiť $this->fluent
a poskladať nanovo

:)) Zkus tu metodu getCount() implementovat, jsem zvědavej.

JakubJarabica
Gold Partner | 184
+
0
-

o5:
Pri jednoduchých fluentoch alebo pri zložitejších ak si z nich urobíš view by to mohlo byť takto:

<?php
$fluent = clone $this->fluent;
return $fluent->removeClause('select')->select('COUNT(*)')->fetchSingle();
?>
o5
Člen | 416
+
0
-

Hm, tak sem blb! Díky @sepo za podmět a @JAM3SoN za radu, poslal jsem to tam.

JakubJarabica
Gold Partner | 184
+
0
-

Ono to riešenie ale (aspoň myslím, už mi to teraz veľmi nepáli) nie je univerzálne bez viewu(s viewom je v 100% prípadoch funkčné). Ked v selecte budeš mať nejaký alias(YEAR(date) as rok), podľa ktorého aj budeš filtrovať(WHERE rok = 2012) a následne jeho select klauzulu odstrániš, tak where podmienka bude zlyhávať kvôli neexistujúcemu stĺpcu…? To len FYI, keď už to je v repozitári.

o5
Člen | 416
+
0
-

To jsem si dobře naběhnul :)) No, asi to tam nechám, ale přidám možnost ovlivnit to callbackem.

o5
Člen | 416
+
0
-

xxxmisko napsal(a):

Ahojte páni!
V nette začínam, chcel som pridať túto komponentu do svojho testovacieho projektu, avšak vôbec mi to nejde. Prosím nenájde sa niekto, kto zavesí funkčnú verziu tohto gridu niekde na server? Aby som videl, ako to funguje, example z gitbub mi nefunguje :(

Ďakujem za každú pomoc

Co znamena nejde?

EDIT: predpokladam, ze vlozit Nette a dibi do slozky libs si udelal…

Editoval o5 (6. 3. 2013 14:07)

akadlec
Člen | 1326
+
0
-

Konkrétně example z gitu mě jde, takže zkus to zkusit a odladit ;)

o5
Člen | 416
+
0
-

xxxmisko napsal(a):

kurňa, som úplna lama, stiahol som toto:
https://github.com/…rido-sandbox

pridal som do libs najnovší nette, dibi.
Predtým mi nehádzal žiadnu chybu, teraz mi ladenka ukazuje: DibiNotSupportedException

PHP extension ‚sqlite3‘ is not loaded.

config.neon som nechal ten pôvodný, pričom aj db je tam tá origo.

@xxxmisko: http://bit.ly/Zb8CUi. Řešme zde prosím věci týkající se přímo komponenty!

Editoval o5 (7. 3. 2013 9:39)

xxxmisko
Člen | 140
+
0
-

Chlapi, už sa mi to podarilo rozbehať aj na mojej postgres databáze, je to super doplnok. Chcel by som sa ale opýtať, ako jednoducho riešite editáciu a pridávanie nových záznamov? Políčko na editáciu vidím pripravené, ale zobrazí sa flash správička, teda to spravím asi cez nejaký formulár, ak zistím ako na modal, tak modálny formulár :D. Chýba mi pridávanie nových riadkov a bol by som rád, kedy ste mi dali návrh, ako to vyriešiť, ak ste to riešili.

PS: Veľmi pekný komponent.

xxxmisko
Člen | 140
+
0
-

Ahojte chlapi, znova som tu :(
Vyrobil som si testovaciu tabuľku, kde som spolij 4 tabuľky, našepkávač funguje iba na stĺpcoch prvej tabuľky. Prosím o nasmerovanie, ako rozbehať filtrovanie napr na miestnosti.
Skúšal som setColumn(‚M.nazov‘), ale dostal som chybu

Undefined property: DibiRow::$M.nazov
File: …\libs\Grido\Components\Columns\Column.php Line: 274
protected function getValue($row)
272: {
273: $column = $this->getColumn();
274: return $row->$column;
275: }

kod spajania tabuliek

<?php
        $fluent = dibi::select('Z.*, F.nazov as funkcia, M.cislo as miestnost_cislo, M.nazov as miestnost_nazov, O.nazov as oddelenie_nazov')
            ->from('zamestnanec Z')
            ->leftJoin('funkcia F')->on('Z.funkcia_id = F.id')
	    ->leftJoin('miestnost M')->on('Z.miestnost_id= M.id')
	    ->leftJoin('oddelenie O')->on('Z.oddelenie_id = O.id');
	$grid->setModel($fluent);
?>
xxxmisko
Člen | 140
+
0
-

ešte taká vec, keď chcem sortovať, postgres odo mňa chce pridať klauzulu GROUP BY pred ORDER BY. Neviem zistiť, kde sa generuje dotaz, aby som si pozrel, ako sa vyskladal. Ladenka mi moc nepomáha, pole pre order by som si pridal do grid.php, ale stále mi to nechce nejako ísť.

Takže otázka, kde si viem pozrieť vygenerovaný SQL dotaz, aby som si ho mohol nechať zobraziť? Ďakujem

xxxmisko
Člen | 140
+
0
-

Chlapi, zmenil som trošku funkciu getData v Grid.php, prehodil som riadky applySorting a applyPaging a postgres už funguje normálne. Ďakujem za žiadne rady, tu je funkcia, keby mal niekto podobný problém

<?php
    public function getData($applyPaging = TRUE)
    {
        if ($this->model === NULL) {
            throw new \Exception('Model cannot be empty, please use method $grid->setModel().');
        }

        if ($this->data === NULL) {

	    $this->applyFiltering();
	    if ($applyPaging) {
                $this->applyPaging();
            }
	    $this->applySorting();

            $this->data = $this->model->data;

            if ($this->onFetchData) {
                $this->onFetchData($this);
            }
        }

        return $this->data;
    }
?>
o5
Člen | 416
+
0
-

o5 napsal(a):

Tento fork umi Doctrine. V dohledne dobe planuji zmergovat do mastera.

Implementováno.

Editoval o5 (10. 3. 2013 16:36)

o5
Člen | 416
+
0
-

o5 napsal(a):

To jsem si dobře naběhnul :)) No, asi to tam nechám, ale přidám možnost ovlivnit to callbackem.

Implementováno.

illagrenan
Člen | 12
+
0
-

Předně díky za doplněk. Nedaří se mi jeho zprovoznění přes Composer – v composer.json mám "o5/grido": "dev-master" a po instalaci se vytvoří struktura: o5\grido\Grido\.... Na to nette vrací Class 'Grido\Grid' not found.

Na GITu je podle mě aktuální composer.json správně, ale balíček na Packagistu hlásí, že byl aktualizován 2013–02–26 21:29.

//EDIT
Stažený composer.json přes packagist má v sobě stále:

"autoload": {
		"psr-0": { "Grido": "libs/" }
}

Editoval illagrenan (11. 3. 2013 17:48)

o5
Člen | 416
+
0
-

Muzes to zkusit ted?

illagrenan
Člen | 12
+
0
-

Pecka, díky, už to šlape :-)

xxxmisko
Člen | 140
+
0
-

Ahoj chlapi, som tu znova.
Mám problém, teda neviem sa vysomáriť v redirecte vo funkcii gridOperationsHandler.

$this->redirect($operation, array(‚id‘ ⇒ $id));

mi hádže chybu
rawurldecode() expects parameter 1 to be string, array given
na hentom riadku. Routy mám nastavené takto:

$container->router[] = new Route(‚index.php‘, ‚Homepage:default‘, Route::ONE_WAY);
$container->router[] = new Route(‚<presenter>/<action>[/<id>]‘, ‚Homepage:default‘);

Keď som nastavil redirect, pričom ako id som poslal string, tak zbehlo, ale do požadovanej funkcie sa nič neprenieslo :(
Prosím o pomoc, ďakujem pekne za každú radu

gliny
Člen | 25
+
0
-

Ale teď už zpátky k Gridu.

Rozjel jsem zaklad, načítám data pomocí Nette database, ale pár věcí mi nejde. Ve sloupci akce zatím nemám žádné tlačítka.

  1. Tlačítko export

Nevím, jestli se k němu nemá napsat nějaká action, ale spíš asi ne, ani v examplu co jsem stáhl nic nebylo (ten jsem nerozjížděl).
vyhodí
Warning- Illegal offset type in isset or empty
File: …/libs/Grido/Components/Columns/Column.php
279: return isset($this->replacements[$value])

Podle té chyby bych řekl že očekává nějakou hodnotu ale nic tam není, vyhazuje to metoda applyReplacement, ale co by chtěla nahradit :P

  1. Zdroj dat

Potřeboval bych jako zdroj dat objekty (entity) který jsem vytvořil. Grido žere array, nebo entity? To se mi nepodařilo z dokumentace vyčíst.

Nette 2.0.8 + PHP 5.4

Snad někdo budete vědět :)

Editoval gliny (13. 3. 2013 16:55)

o5
Člen | 416
+
0
-

gliny napsal(a):

Snad někdo budete vědět :)

Já nerozumím, protože asi neumím česky.

EDIT:

  1. Budeš muset uvést příklad. Jinak to demo je od včerejška možné zprovoznit pomocí Composeru a je to otázka dvou commandů
composer create-project o5/grido-sandbox:dev-master
chmod 777 grido-sandbox/temp
  1. Grido v současné době podporuje DibiFluent, NetteDatabase, Doctrine

Editoval o5 (13. 3. 2013 18:18)

gliny
Člen | 25
+
0
-

Ahoj

composer jsem k zavedení do projektu nepoužil, tak snad jsem nic neopomněl, ale myslím že ne.
zdroj je Nette database
Nette 2.0.8 + PHP 5.4

1. Tak takhle vytvářím Grid, a tuhle chybu to hází při kliku na export.

protected function createComponentFakturyGrid($name)
        {
            $tasks = $this->taskRepository->findAllTasks();
            $grid = new Grid($this, $name);
            $grid->setModel($tasks);

            $grid->addColumn('created', 'Vytvoreno', Column::TYPE_DATE)
                ->setDateFormat(Grido\Components\Columns\Date::FORMAT_DATE)
                ->setSortable()
                ->setFilter(Filter::TYPE_DATE)
                ->setCondition(Filter::CONDITION_CALLBACK, callback($this, 'gridBirthdayFilterCondition'));
            $grid->getColumn('created')->cellPrototype->class[] = 'center';

            $grid->addColumn('text', 'Text')->setSortable();

            $grid->addColumn('user', 'Vytvoril')
                    ->setSortable();
                    //->setColumn('user->name');



            $grid->setFilterRenderType($this->filterRenderType);
            $grid->setExporting();
            $grid->translator->setLang('cs');

            return $grid;
        }

2. Bylo by složité upravit grid aby vypisoval třeba array (nebo objekt)? Jdu se na tu možnost mrknout. Teoreticky bych mohl použít jiný grid, ale líbí se mi export do csv, který chci, tak možná bude jednodušší si ho dodělat u jiého gridu, pokud tohle bude nereálné.

3. Nevím jestli je to fičura nebo bug, ale když zapíšu

$grid->addColumn('user->name', 'Vytvoril')

tak to nefunguje, přes samotné database to funguje. Tabulky jsou stejne jako zde
mám pocit že jsem někde zahlédl dotaz na tohle téma, ale je možné že to bylo u jiného gridu.

Díky za odpověd :) Doufám že už je to více česky ;)

Editoval gliny (13. 3. 2013 19:13)

o5
Člen | 416
+
0
-
  1. to je bug
  2. zdrojem může být teoreticky cokoli, stačí aby ten zdroj implementoval Grido\DataSources\IDataSource však se podívej na implementace zdrojů, třeba DibiFluent
  3. takto to nefunguje, název musí být alphanumerický řetězec stejně jako třeba u formulářů. Mohlo by to jít přes setColumn() , jinak přes vlastní vykreslení pomocí setCustomRender() viz třeba v examplu.

Editoval o5 (22. 3. 2013 13:21)

gliny
Člen | 25
+
0
-

Díky, na ten zdroj teda mrknu.
Nechci být otravný, jen se ptám na ten bod 1 bude to spraveno?

Jinak je to parádní práce :)

o5
Člen | 416
+
0
-

To teda seš otravný!

Ne dělám si srandu, díky za report! Přidal jsem tam možnost nastavit db column přes callback, který by to měl řešit. Pokud se tedy použije NetteDatabase a v exportu se chce použít najoinovaný sloupec, je nutné něco v tomto smyslu:

$grid->addColumn('country', 'Country')
	->setColumn(function($item){
		return $item->country->title;
	})

Ještě je tam potřeba vymyslet nějaké šikovnější upozornění (teď pokud se to nenastaví, háže to stejnou chybu), to si ale nechám na jindy..

cafesk8
Člen | 103
+
0
-

Zdravím,

můžete mi někdo poradit jak to rozběhnout, nebo případně mi říct, že se snažím o naprostou blbost?

ArticlesPresenter.php

<?php
namespace AdminModule;

class ArticlesPresenter extends BasePresenter {

	private $articlesRepository;

	public function inject(ArticlesRepository $articlesRepository) {
		$this->articlesRepository = $articlesRepository;
	}

	public function createComponentArticles() {
		return new ArticlesControl($this->articlesRepository->findAll(), $this->articlesRepository);
	}

}
?>

Articles.php

<?php
namespace AdminModule;

class ArticlesControl extends Nette\Application\UI\Control {

	private $articles;

	private $articlesRepository;

	public function __construct(Nette\Database\Table\Selection $articles, ArticlesRepository $articlesRepository) {
		parent::__construct(); // vždy je potřeba volat rodičovský konstruktor
		$this->articles = $articles;
		$this->articlesRepository = $articlesRepository;
	}

	protected function createComponentArticlesGrid($name) {
	    $grid = new \Grido\Grid($this, $name);
	    $grid->setModel($this->articles);
	    $grid->addColumn('heading', 'Nadpis', Column::TYPE_TEXT);
	    return $grid;
	}

	public function render() {
		$this->template->setFile(__DIR__ . '/templates/Articles.latte');
		$this->template->render();
	}
}
?>

Articles.latte

<?php
{control articlesGrid}
?>

Laděnka řve Class ‚AdminModule\Column‘ not found, je mi jasné, že to je tím, že jsem v namespace AdminModule, ale nevím jak to vyřešit. Můžete mi někdo poradit nějaké řešení? Děkuji

o5
Člen | 416
+
0
-

@cafesk8: protože tam musíš mít?

$grid->addColumn('heading', 'Nadpis', \Grido\Components\Columns\Column::TYPE_TEXT);
cafesk8
Člen | 103
+
0
-

Děkuji mockrát, taková prkotina.

o5 napsal(a):

@cafesk8: protože tam musíš mít?

$grid->addColumn('heading', 'Nadpis', \Grido\Components\Columns\Column::TYPE_TEXT);
illagrenan
Člen | 12
+
0
-

Používám Grid s Doctrine, když zavolám:

$grid->setOperations( ... )

skončím v Grid::addCheckers( ):

// ...
$operation->addCheckbox($item[$pk]);

na Fatal erroru Cannot use object of type **** as array.

Jako nejlepší mi přišlo implementovat ArrayAccess do mých entit:

// http://docs.doctrine-project.org/en/latest/cookbook/implementing-arrayaccess-for-domain-objects.html#option-2
class Foo implements \ArrayAccess
{

    public function offsetExists($offset)
    {
        $value = $this->{"get$offset"}();
        return $value !== null;
    }

    public function offsetSet($offset, $value)
    {
        $this->{"set$offset"}($value);
    }

    public function offsetGet($offset)
    {
        return $this->{"get$offset"}();
    }

    public function offsetUnset($offset)
    {
        $this->{"set$offset"}(null);
    }

}
o5
Člen | 416
+
0
-

Díky za postřeh, takových věcí tam možná bude více, ale nevím jak to řešit :/

fifo611
Člen | 4
+
0
-

Zdravim,
hladal som, skusal som a aj tak neviem rozbehat Grido. Niekde robim chybu. Skopiroval som z Github-u Grido do \libs, ale uz pri zaciatkoch vyhadzuje ladenka chybu Class ‚Grido\Grid‘ not found.
Chcel som to zakomponovat uz do existujuceho projektu.

Skusal som aj composer, ale pravdepodobne s nim neviem dobre pracovat, kedze vyhadzuje chybu:

composer install
Loading composer repositories with package information
Installing dependencies
  - Installing nette/nette (v2.0.10)
    Loading from cache

  - Installing o5/grido (dev-master ec741bf)
    Cloning ec741bf21be2ea89f3af44a2fce35baabeab773d

  [RuntimeException]
  Failed to clone https://github.com/o5/grido.git, git was not found, check th
  at it is installed and in your PATH env.

  'git' is not recognized as an internal or external command,
  operable program or batch file.

Vie niekto prosim pomoct?

jiri.pudil
Nette Blogger | 1029
+
0
-

Zkoušel jsi vymazat cache?

Ad Composer: Máš tam jasně napsané, kde je chyba: git was not found.

gliny
Člen | 25
+
0
-

Tak jsem tu zase s dalšími problémy

Používám nad nette database ještě fabika, to by ale neměl být problém, pokud jsem tomu dobře pozoruměl.

1.vůbec mi nejede našeptávaš (nijak zvlášť ho nepotřebuju, spíš mě to udivuje), ten sloupec cisloFaktury je bez jakehokoli joinu.

$grid->addColumn('cisloFaktury', 'Číslo faktury')
                    ->setSortable()
                    ->setFilter(Filter::TYPE_TEXT)
                    ->setSuggestion(); // naseptavac nefunguje

2.pokud mám sloupec přidaný pomocí setColumn, tak mi nefunguje sortování, filtrování a našeptávaš. Nevím teda jestli pro všechny tyhle věci bych neměl mít připsanou metodu. A nebo teď mě napadlo zobrazovat ve sloupci čísla klientu ze seznamu klientu ale řadit podle id klienta z tabulky faktur, ikdyž tím si nepomůžu, protože nebude fungovat filter.

$grid->addColumn('cisloZakaznika', 'Klient')
                    ->setColumn(function($item){
                        return $item->zakaznikFaktury->cisloKlienta;
                    })
                    ->setSortable() // nefunguje
                    ->setFilter(Filter::TYPE_TEXT) // nefunguje
                    ->setSuggestion(); // nefunguje
cujan
Člen | 410
+
0
-

Caute, je to super komponent…ako riesite pridanie noveho zaznamu a edit?

Vdakak

Jano

gliny
Člen | 25
+
0
-

to bych viděl využít jen Nette, komponenta pokud se nemýlím nemá inline editaci, takže si pěkně vytvořit formulářek a metodu na zpracování :)

cujan
Člen | 410
+
0
-

a ktora ma editaciu? :D

vdaka

fifo611
Člen | 4
+
0
-

Zdravim
chcem vytvorit odkaz na sablony zo stlpca. Tak pridam

Grido\Components\Columns\Column::TYPE_HREF

Lenze ono ma to hodi automaticky na nejaku sablonu. Lenze ja chcem ovplyvnit, na aku sablonu to bude. To som nenasiel nikde.
Ale skusal som to obist (asi dost lamersky) funkciou setCustomRender

$grid->addColumn('text', 'Nazov',Grido\Components\Columns\Column::TYPE_HREF)

        ->setCustomRender(function($item) {

           $baseUri = '<a n:href="Task:'.$item->project_id.'">'.$item->text.'</a>';
                return $baseUri;
            })

Ide o to, ze mne to sice pekne vykresli, ale ono to po volani metody setCustomRender, strati typ HREF, cize je to o5 typ text.
Co s tym?

gliny
Člen | 25
+
0
-

mrkni sem a určitě si nějaky grid s inline editaci vybereš vybereš
https://componette.org/search/?q=

Editoval gliny (20. 3. 2013 12:14)

Kryšpin
Člen | 27
+
0
-

Jak jsi tedy nakonec vyrešil tento problém? Mám stejný problém (u JOINOvaných tabulek mám stejný název sloupce, který sic u druhé pojmenovávam pomocí AS na jiný, ale to bohužel nestačí).

EDIT: Používám Dibi fluent.

xxxmisko napsal(a):

Ahojte chlapi, znova som tu :(
Vyrobil som si testovaciu tabuľku, kde som spolij 4 tabuľky, našepkávač funguje iba na stĺpcoch prvej tabuľky. Prosím o nasmerovanie, ako rozbehať filtrovanie napr na miestnosti.
Skúšal som setColumn(‚M.nazov‘), ale dostal som chybu

Undefined property: DibiRow::$M.nazov
File: …\libs\Grido\Components\Columns\Column.php Line: 274
protected function getValue($row)
272: {
273: $column = $this->getColumn();
274: return $row->$column;
275: }

kod spajania tabuliek

<?php
        $fluent = dibi::select('Z.*, F.nazov as funkcia, M.cislo as miestnost_cislo, M.nazov as miestnost_nazov, O.nazov as oddelenie_nazov')
            ->from('zamestnanec Z')
            ->leftJoin('funkcia F')->on('Z.funkcia_id = F.id')
	    ->leftJoin('miestnost M')->on('Z.miestnost_id= M.id')
	    ->leftJoin('oddelenie O')->on('Z.oddelenie_id = O.id');
	$grid->setModel($fluent);
?>

Editoval Kryšpin (20. 3. 2013 12:55)

llsm
Člen | 121
+
0
-

o5 napsal(a):

o5 napsal(a):

To jsem si dobře naběhnul :)) No, asi to tam nechám, ale přidám možnost ovlivnit to callbackem.

Implementováno.

Nejsem si jistý, jestli bys neměl minimálně na stránce s doplňkem zmínit, že při použití výchozí count funkce pro dibi fluent vrací query s GROUP BY špatné výsledky. Vznikne totiž například SELECT COUNT(*) FROM table LEFT JOIN otherTable ON ... GROUP BY table.id LIMIT 1, což vrací na tabulce s daty vždycky 1. Nějakého začátečníka by to mohlo přinejmenším zabrzdit. U takovýchto dotazů nezbývá, než to zanořit (SELECT COUNT(*) FROM (SELECT ... $query)), aby to vracelo správné výsledky. Podobné je to s filtrováním. Toto zmíněné má bohužel ale performance issues v mysql.

Podobné je to s filtrováním, jak už psal někdo dříve. Rozhodně by bylo super, kdybys to opět aspoň zmínil na stránce doplňku

Jinak děkuji za hezký doplněk a nenech se odradit podobnými drobnostmi od další práce.

Kryšpin
Člen | 27
+
0
-

Měl bych dotaz k setteru ->setCondition():

lze předat callbacku více hodnot, než jen $value? Jde o to, že by pak šlo udělat jeden callback pro více sloupců a název sloupce do sql měnit dle předaného parametru (v tomto případě název sloupce)

<?php
	/**
	* Custom condition callback for filter Date.
	* @param string $value
	* @param string $column
	* @return array|NULL
	*/
	public function gridDateFilterCondition($value, $column)
	{
		$date = explode('.', $value);
		foreach ($date as &$val) {
			$val = (int) $val;
		}

		return count($date) == 3
			? array('['.$column.'] = %s', "{$date[2]}-{$date[1]}-{$date[0]}")
			: NULL;
	}
?>
xxxmisko
Člen | 140
+
0
-

Kryšpin:

Vyriešil som to tak, že som si urobil view a ten som nechal zobraziť. Potom doplnok funguje korektne…

Kryšpin
Člen | 27
+
0
-

xxxmisko napsal(a):

Kryšpin:

Vyriešil som to tak, že som si urobil view a ten som nechal zobraziť. Potom doplnok funguje korektne…

Tak to jsme na tom stejně :o) Ale je to škoda, že to nejde vyřešit korektně v Grido (v Griditu to jde).

o5
Člen | 416
+
0
-

Přestalo mi chodit odebíraní příspěvků mailem na tento thread, proto sem neodpovídal.

gliny napsal(a):

naseptavac nefunguje, dalsi nefunguje, nefunguje

Když něco nefunguje, tak je to potřeba opravit že :) Takže na řadu přijde debuggování. Takže se podívám co to vrací za chybu v ajax requestu atd, atd. Podle tebou poskytnutých informací mě nenapadá, kde by mohla být chyba.

cujan napsal(a):

Caute, je to super komponent…ako riesite pridanie noveho zaznamu a edit?

Inline editace není a ani nebude. Důvody jsem sepsal kdysi na svém blogu.

fifo611 napsal(a):

Zdravim
chcem vytvorit odkaz na sablony zo stlpca. Tak pridam

Grido\Components\Columns\Column::TYPE_HREF

Lenze ono ma to hodi automaticky na nejaku sablonu. Lenze ja chcem ovplyvnit, na aku sablonu to bude. To som nenasiel nikde.
Ale skusal som to obist (asi dost lamersky) funkciou setCustomRender
Ide o to, ze mne to sice pekne vykresli, ale ono to po volani metody setCustomRender, strati typ HREF, cize je to o5 typ text.
Co s tym?

Zkus neuvádět typ, je tam zbytečný když použiješ custom vykreslení. V příkladu je to dobře vidět.

llsm napsal(a):

Nejsem si jistý, jestli bys neměl minimálně na stránce s doplňkem zmínit, že při použití výchozí count funkce pro dibi fluent vrací query s GROUP BY špatné výsledky. Vznikne totiž například SELECT COUNT(*) FROM table LEFT JOIN otherTable ON ... GROUP BY table.id LIMIT 1, což vrací na tabulce s daty vždycky 1. Nějakého začátečníka by to mohlo přinejmenším zabrzdit. U takovýchto dotazů nezbývá, než to zanořit (SELECT COUNT(*) FROM (SELECT ... $query)), aby to vracelo správné výsledky. Podobné je to s filtrováním. Toto zmíněné má bohužel ale performance issues v mysql.

Podobné je to s filtrováním, jak už psal někdo dříve. Rozhodně by bylo super, kdybys to opět aspoň zmínil na stránce doplňku

Jinak děkuji za hezký doplněk a nenech se odradit podobnými drobnostmi od další práce.

Je pro mě vždy těžké najít ten správný kompromis, kdy tam co poslat a kdy ne. Já z toho co jsme tu řešili výše usoudil, že většina instancí gridu budou na „jednoduchých“ query a tedy jsem výchozí stav optimalizoval na rychlost. Současný stav je neblokující, tedy lze z dokumentace vyčíst o možnosti si modelové metody „přiohnout“ a to předpokládám každého napadne. To bych taky mohl do dokumentace psát upozornění, že tento doplnět nebude fungovat bez Nette apod. Jinak co je podobného s filtrováním?

@Kryšpin, @xxxmisko: nerozumím vám co přesně chcete. setCondition() je právě pro jeden filtr a nijak tomu ani být nemá. Argument, že v Griditu něco takové jde, má pro mě nulovou hodnotu :)

Editoval o5 (21. 3. 2013 14:17)

xxxmisko
Člen | 140
+
0
-

o5

  • išlo o to, že keď som skladal dotaz cez joiny (používal som tvoj spôsob), potom som začal filtrovať atď, tak to proste nešlo. Hádzalo chybu, keď som si dumpoval dotazy, boli úplne zlé a nešli. Napríklad vynechalo nejaké poddotazy, preto som to skrátka neriešil a napísal som view toho, čo potrebujem a grido nádherne funguje. Takisto som do neho implementoval translator, pričom ten v gride som vypol(zatiaľ iba obmedzil), aby som preklady vedel robiť na jednom mieste.

Grido je podľa mňa super doplnok, nepokrýva všetky nutnosti každého človeka, ale o tom to je, aby si to každý upravil podľa seba

Doplnok je pekný, šikovný, účinný a ďakujem za neho.

o5
Člen | 416
+
0
-

@xxxmisko:

Problému s filtrováním stále nerozumím, kromě metody getCount() se tam nic „magického“ neděje a tedy k žádnému vynechávání poddotazů by docházet nemělo.

Stejně tak implementace vlastního translátoru a vypnutí. Co jsi na tom implementoval, když tam existuje metoda $grid->setTranslator() která je tam právě kvůli tomu, aby se dal použít translátor používaný v projektu…

Kryšpin
Člen | 27
+
0
-

o5:

jak píše výše xxxmisko. Problém je s JOINovaným dotazem. U mě je problém se shodnýmy názvy sloupců u JOINovaných tabulek. Pro klasický výpis do Grida to funguje (použije se v dotazu SELECT ... sloupec AS jinyNazevSloupce), ale pak pro našeptávač dotaz neprojde, protože dojde k SELECT * ... a tím samozřejmě dojde k chybě – ambiguous column names. Nevyřeší to samozřejmě ani setColumn, protože nepodporuje zápis tabulka.sloupec.

Já jsem to vyřešil stejně jako xxxmisko pomocí view, ale bylo by pěkné, kdyby to šlo vyřešit v Gridu. Jedná se o dibi.