[addon datagrid] DataGrid
- cmelis
- Člen | 26
Nemáte tu prosím již někdo hotovou konverzi z PHP 5.2 na PHP 5.3? Pustil jsem se do ní sám, jelikož jsem na ní nikde nenašel nějaký odkaz, všechno mi běhá jak má ale pouze bez Ajaxu, ten se mi bohužel zatím nedaří nějak zprovoznit. Takže pokud by to již někdo měl hotové, byl bych mu vděčný, případně budu rád i za typy čím by to mohlo být (zavináče v šablonách používám).
- JakubJarabica
- Gold Partner | 184
Rozbehal som si Datagrid pre Doctrine 2 a mám problém s filtrovaním: http://www.jam3son.sk/exception.html.
Má niekto šajn čo s tým môže byť? V call stacku je toto:
<?php
"_dql" private => "SELECT a.id, a.title, a.slug, a.added, c.id FROM iStavbar\ORM\Entities\Article a INNER JOIN a.category c WHERE c.id LIKE ?1" (123)
"_params" private => array(1) ▼ {
1 => "%1%" (3)
}
?>
..takže tá chybová hláška mi príde trošku uhnutá.
Takú istú chybu dostanem, keď nahradím pôvodný datasource:
<?php
$grid = new \Datagrid\DataGrid;
$dataSource = new \DataGrid\DataSources\Doctrine\QueryBuilder(
$this->em->createQueryBuilder()
->select('a.id, a.title, a.slug, a.added, c.id')
->from('iStavbar\ORM\Entities\Article', 'a')
->join("a.category", 'c')
);
$dataSource->setMapping(array(
'id' => 'a.id',
'title' => 'a.title',
'slug' => 'a.slug',
'added' => 'a.added',
'category' => 'c.id',
));
$grid->setDataSource($dataSource);
$grid->keyName = 'id';
?>
.. týmto s Where:
<?php
$dataSource = new \DataGrid\DataSources\Doctrine\QueryBuilder(
$this->em->createQueryBuilder()
->select('a.id, a.title, a.slug, a.added, c.id')
->from('iStavbar\ORM\Entities\Article', 'a')
->join("a.category", 'c')
->where("a.slug = :slug")
->setParameter('slug', 'asd')
);
?>
- MilanLempera
- Člen | 11
JAM3SoN napsal(a):
Rozbehal som si Datagrid pre Doctrine 2 a mám problém s filtrovaním: http://www.jam3son.sk/exception.html.
Má niekto šajn čo s tým môže byť? V call stacku je toto:
<?php "_dql" private => "SELECT a.id, a.title, a.slug, a.added, c.id FROM iStavbar\ORM\Entities\Article a INNER JOIN a.category c WHERE c.id LIKE ?1" (123) "_params" private => array(1) ▼ { 1 => "%1%" (3) } ?>
Nedávno jsem to řešil
– Datagrid Doctrine byl psanej na beta verzi Doctrine – tuším BETA3
problém je v tomhle volání clone
v novějších verzích Doctrine (2.0.0-BETA4+) metoda __clone maže $this->_params, které pak chybí při vytváření dotazu na celkový počet záznamů (což říká ta chybová hláška)
vyřešil jsem to takhle
public function count()
{
//\Nette\Debug::barDump(debug_backtrace());
$query = clone $this->qb->getQuery();
$query->setParameters($this->qb->getQuery()->getParameters());
...
viz github
Editoval MilanLempera (7. 4. 2011 10:47)
- JakubJarabica
- Gold Partner | 184
Awesome!!! Díky moc. Ušetril si mi kopu času kým by som si to celé vykrokoval a našiel chybu.
- Tomikuk
- Člen | 10
Prosím jak se aktivuje tlačítko pro inverzi vybraných položek pro hromadné akce?
Ikony akcí jako na obrázku na stránce https://componette.org/search/?… by se měly zobrazit implicitně, a nebo se pro ně musí explicitně dovytvořit css? Mě se při použití tohoto kódu nezobrazí žádná ikona:
$grid->addAction('Smaž', 'customerDelete!', Html::el('span')->class('icon icon-del'), $useAjax = TRUE);
- Ja
- Člen | 260
Ahoj, ja vim, ze uz se tu neco podobneho resilo, ale ja bych potreboval jeste radu pro trochu specifictejsi pripad,
da se v akcich ukazat ikonka na zaklade stavu (tzn. ziskat data z KONKRETNIHO radku datagridu)? Pokud je clanek publikovan, tak zelena, pokud neni, tak seda?
<?php
$grid->addAction('Publikovat', 'publikovat!', ($KonkretniHodnotaKonkretnihoRadku == 0 ? clone $icon->class('icon icon-flag-silver') : clone $icon->class('icon icon-flag-green')), $useAjax = TRUE);
?>
- MzK
- Člen | 127
vím, že nette ještě není finální, přesto bych potřeboval poradit jak
to udělat kompatibilní..
Dostal jsem se na tuto chybu:
InvalidStateException
Component ‚gridArticles‘ is not attached to
‚Nette/Application/Control‘
…/app/components/DataGrid/DataGridAction.php:74
<?php
71: public function generateLink(array $args = NULL)
72: {
73: $dataGrid = $this->lookup('DataGrid', TRUE);
74: $control = $dataGrid->lookup('Nette/Application/Control', TRUE); //zde je chyba.
75:
76: switch ($this->key) {
77: case self::WITHOUT_KEY:
78: $link = $control->link($this->destination); break;
79: case self::WITH_KEY:
?>
Zkoušeno na nette Nette Framework 2.0-beta (revision d5b50dc released on 2011–06–03) noprefix.
Díky za radu…
EDIT:
Vyřešeno:
Aby nette fungovalo s poslední verzí nette, je třeba místo
(mimo jiné)
<?php
- $control = $dataGrid->lookup('Nette/Application/Control', TRUE);
+ $control = $dataGrid->lookup('Control', TRUE);
?>
Editoval zacatecnik (3. 6. 2011 22:55)
- tom
- Člen | 171
Ahoj,
chci se zeptat na jednu vec. Pouzivam DataGrid na vice strankach jednoho webu a
stava se mi, ze pokud na jednom z tech DataGridu zapnu filtrovani a pak si pres
menu zobrazim jinou stranku kde je jiny DataGrid tak mi to spadne na chybe,
protoze se chce aplikovat filtr, ktery v te druhe komponente neni … Nutno
dodat, ze ty komponenty mam persistentni stejne jako presentery. Mozna ze v tom
bude ten zadrhel. Poradil by mi nekdo, co s tim, kde hledat chybu?
Diky moc
- venus
- Člen | 14
Chtěl bych se dotázat, zda bude Datagrid upraven pro použití s Nette 2.0 Beta. V současné chvíli není funkční ani dev (https://github.com/…rid/tree/dev) verze.
- Lopo
- Člen | 277
tak som dorobil port na posledne nette
presnejsie je to port do BailIff-u, ale malo by to fungovat aj v cistom nette – jedine co treba spravit je na 1 mieste zmenit triedu pre form – NS zmenit z BailIff\… na Nette\… a malo by to fungovat
oproti originalu som dorobil implementaciu DataSources\Doctrine\QueryBuilder::getFilterItems() – bol to trosku zahul (vlastny AST walker hned druhy den co som zacal s doctrine) ale podarilo sa a funguje (aspon co som testoval)
https://github.com/…437e91c8bae5
enjoy :)
PS: ak budem mat trochu cas a naladu tak to cele backportnem
- oudzej
- Člen | 4
MartyIX napsal(a):
@venus: Vezmi si dev verzi a prozen ji class-updater.php skriptem, ktery je v distribuci Nette 2.0 beta. Pak staci tusim {Snippet:grid} nahradit {Snippet grid} (ladenka ti ukaze, kde je chyba) a melo by vse bezet.
Upgradoval jsem z Nette 2.0 alpha na betu, stahnul posledni dev verzi Datagridu a projel ho tim class updaterem … nicmene, hazi to tuhle chybu, nevite co s tim?
Declaration of DataGrid\DataGrid::createTemplate() should be compatible with that of Nette\Application\UI\Control::createTemplate()`
- hchkrdtn
- Člen | 2
brýden,
mohu se zeptat, jestli existuje byť jen náznak dokumentace, ze které by bylo
možné vyčíst jak se chová SelectboxFilter vzhledem k sestavení
db query?
dostala se mi do rukou cizí aplikace k opravě, kde je použit číselník pro SelectboxFilter nabývající těchto hodnot:
<script>
$pole = array(
1 => 'prvni',
2 => 'druha',
...
8 => 'osma',
105 => 'o105',
106 => 'o106',
...
);
</script>
a při filtrování na 1-první se do výsledků hledání (řádku datagridu) promítají i řádky s hodnotami 105, 106 apod. což je pochopitelně nesmysl a zatím jsem nepřišel na příčinu ani jak to „ohnout“.
děkuji za jakýkoliv hint předem :)
hch
- MartyIX
- Člen | 217
oudzej: https://github.com/…id/tree/dev/ – ja mam ted tuto verzi, ktera je kompatibilni s Nette 2 beta a jeste umi:
//...
$backlink = $this->getService('application')->storeRequest();
$link = array('view', "backlink" => $backlink); // prvni parametr je link destination a zbyle jsou pak parametry, ktere se pridaji navic do odkazu
$grid->addAction('view', $link, clone $icon->setClass("icon icon-cart"), true, 'id');
// tzn. link bude obsahovat id a backlink v tomhle pripade
//...
- hchkrdtn
- Člen | 2
Ja: ze by to bylo totok?
<?php $form->addSubmit(‚resetSubmit‘, ‚Reset state‘); ?>
voda: ano, to ze je to via LIKE nebylo tezke zjistit :)
zajimalo me, proc se to sklada a vyhodnocuje v TextColumn (kde je pouzita
konstrukce LIKE ‚%value%‘), kdyz je to Selectbox, ktery v mnou uvedenem
pripade nemuze takto logicky fungovat spravne.
Takze jsem si pro potreby tohoto konkretniho pripadu ‚osetril‘ TextColumn a
zatim mam problem vyreseny.
- Kurtas
- Člen | 109
Ahoj,
chci se zeptat funguje datagrid s Nette 2.0 resp s Nette\Database?
Hledal jsem ale nějak nenacházím :(
EDIT: vyřeseno přesel jsem na Dibi
PS: Potřeboval bych přidat do datagridu checkbox „Označit vše“, čili značí všechny checkboxy (řádky) pokud jsou použity Operations. Už se tu někdo na to ptal bohužel nedostal odpověd, neříkejte mi že to nikdo neřešil? :)
Diky za pomoc
Mira
Editoval Kurtas (8. 8. 2011 17:53)
- Majkl578
- Moderator | 1364
Koukám, že DataGrid pořád ještě někdo používá (sám už ho
nepoužívám). :)
Když budu mít v následujících dnech chvíli (a když už to je rok od doby
co jsme přestali dělat na dev branchi) a DataGrid bude pořád funkční
s novým Nette (mergnout tohle?
a možná něco od Lopa), mergnu dev větev do
master.
Pokud někdo máte něco, co byste tam rádi viděli a ještě to tam není,
forkujte, editujte a posílejte pull requesty. :)
- Lopo
- Člen | 277
jeremy13 napsal(a):
Nemá někdo prosím upravený DataGrid pro aktuálně stáhnutelnou 5.3 stable verzi nette?
Pokouším se rozchodit různé verze, ale zatím neúspěšně …
pokial viem tak dev verzia z githubu by mala fungovat … ak nefunguje tak napis problemy a urcite to niekto (kludne aj ja ak budem vediet) pofixuje
teoreticky by mala fungovat aj moja postnuta verzia co mam v Lohini – treba tam len na jednom mieste upravit pouzity extendovany form (ako som uz niekde tuna na fore pisal)
- vladimir
- Člen | 11
Ahoj,
Když si u DataGridu pomocí allowOperations zaregistruju
callback pro obsluhu operací (s povoleným Ajaxem)
<?php
$grid = new DataGrid\DataGrid;
...
$grid->allowOperations($ops, callback($this, "handleOperations"));
?>
je nějak možné z metody handleOperations, která obsluhuje akce, invalidovat jiný widget na stránce?
zkoušel jsem do šablony
{widget basketStatus}
Polozek ve vasem kosiku: {$basket->count}
{/widget}
a následně
<?php
public function handleOperations(Nette\Forms\Controls\SubmitButton $button)
{
$this->invalidateControl('basketStatus');
}
?>
ale daný widget se nepřekreslí.
Existuje nějaký jednoduchý fígl, jak toho překreslení widgetu docílit z obsluhy akcí? Kromě vypnutí Ajaxu…
Díky!
Editoval vladimir (3. 11. 2011 22:38)
- zuhla
- Člen | 33
Ahoj, tvořím teď projekt na PHP 5.3 a Nette 2.0 betta a bohužel se mi nelíbí ani gridito ani tabella, protože sem byl zvyklí až doteď ho používat na PHP 5.2.
Mám stáhlou dev verzi na PHP 5.3, ale ještě neexistovalo pár tříd,
které měli změněný název atd. To sem vše upravil, ale teď při
vykreslování mi naskočí toto:
Nette\UnexpectedValueException
Method AdminModule\ContentPresenter::createComponentGrid() did not return or create the desired component.
36: <?php $_ctrl = $control->getWidget("grid"); if ($_ctrl instanceof Nette\Application\UI\IPartiallyRenderable) $_ctrl->validateControl(); $_ctrl->render() ?>
Díky za pomoc!
- Michal Vyšinský
- Člen | 608
Budeš mít nějakou chybu v továrničce. Sama chyba ti to říká, že továrnička nevrací nebo netvoří potřebnou komponentu. Dej sem kód té továrničky na grid komponentu.
- zuhla
- Člen | 33
protected function createComponentGrid($name) {
$ds = \dibi::getConnection()->dataSource('
SELECT [pages.id]
FROM [pages]
');
$dataSource = new \DataGrid\DataSources\Dibi\DataSource($ds);
// Configure data grid
$grid = new \DataGrid\DataGrid;
$grid->setDataSource($dataSource);
// Configure columns
$grid->addNumericColumn('id', 'ID')->addFilter();
}
- MartyIX
- Člen | 217
https://github.com/…78a5dc878f2a – nejsou nahodou ty upravy pro Nette 2 beta zde?
- klip
- Člen | 11
Jen pro info… zkusil sem teď s Nette 2 v PHP 5.3 verzi DataGrid od
MartyIXe: https://github.com/…cad69c20c6ef
a změnil sem DataGrid/DataGrid.php:826
<?php
$form->onSubmit[] = array($this, 'formSubmitHandler');
?>
na
<?php
$form->onSuccess[] = array($this, 'formSubmitHandler');
?>
protože mi to křičelo, že se chování onSubmit změnilo.
Jinak se zdá, že to chodí.
Nemáte někdo funkční DataSource k Nette\Database\Connection? Není to tak nutné. Když mě bude vadit paralelní připojení přes dibi, tak si to třeba napíšu sám, ale zatím je to detail, kterej mě zas tolik netrápí. Zas to ale nechci psát zbytečně, jestli už to někdo psal. Díky.
- Lopo
- Člen | 277
klip napsal(a):
Nemáte někdo funkční DataSource k Nette\Database\Connection? Není to tak nutné. Když mě bude vadit paralelní připojení přes dibi, tak si to třeba napíšu sám, ale zatím je to detail, kterej mě zas tolik netrápí. Zas to ale nechci psát zbytečně, jestli už to někdo psal. Díky.
- klip
- Člen | 11
Lopo napsal(a):
klip napsal(a):
Nemáte někdo funkční DataSource k Nette\Database\Connection?
moc dík.
- Bendergast
- Člen | 8
Zdravím,
Marně se pokoušim rozjet DataGrid na nette 2.0 beta. Pokaždé když zapnu
filtry tak mi to vyhodí Component '' is not attached to
‚Nette\Forms\Form‘.
Poradí prosím někdo?