DibiGrid – Nový DataGrid pro Dibi
- knyttl
- Člen | 196
Ahoj,
z hrátek posledních dní mi vyšel můj vlastní datagrid. Potřeboval jsem co nejvyšší konfigurovatelnost a aby se na každý pohled dalo jednoznačně odkazovat – na každý z nich lze vygenerovat url – všechny požadavky jsou pouze metodou GET. Během příštích dní dodělám inline editaci a filtr dle datumu.
Jinak tedy na: http://tabella.knyt.tl/ jsou tři příklady použití – basic, complex a editable. V komplexním je vidět téměř všechny možné vlastnosti –
- Vlastní element pro řádky
- Vlastní generování zobrazených dat
- Vlastní filtry
- Vlastní způsoby řazení
apod.
Zatím zkoušeno pouze na Safari, Chrome a Firefox.
Budu vděčný za všechny připomínky.
Editoval knyttl (4. 10. 2011 18:25)
- Filip Procházka
- Moderator | 4668
ten název bych ještě promyslel, jak už David jednou říkal, není dobré když někdo v názvu používá Nette, stejný problém určitě platí i pro dibi pravděpodobně :)
- knyttl
- Člen | 196
Tak tedy přejmenováno na Tabella. Dopsal jsem inline editaci, je vidět v záložce „editable“.
Demo: http://tabella.knyt.tl/
TODO:
- přidávání nových položek
- mazání položek
- datetime manipulace
Mimochodem nefunguje info o zadávání nových doplňků (https://componette.org/search/?…).
Editoval knyttl (4. 10. 2011 18:26)
- Filip Procházka
- Moderator | 4668
nový doplněk vytvoříš tak že přejdeš na url https://componette.org/search/?…, dáš vytvořit stránku a začneš psát :) (třeba já jsem okoukal dokumentaci jiných addonů)
až to máš hotové tak upravíš (pokud máš oprávnění) seznam doplňků a přidáš svůj tam kam si myslíš že patří
stačí umět Texy! :)
- knyttl
- Člen | 196
Nové vlastnosti Tabelly:
- Tlačítko na přidání nového řádku do db
- Tlačítko na vymazání řádku – volá se handler onDelete.
- Inline editace využívá plugin datePicker
- Pro nastavení třídy řádků přibyla vlastnost ‚rowClass‘, pro hlavičku sloupce ‚headerClass‘ a pro vlastní buňku ‚class‘
Testováno na Chrome a Safari.
Vše v příkladech na:
Editoval knyttl (4. 10. 2011 18:26)
- phx
- Člen | 651
Zajimave. Jen mi opet chybi moznost vypsat data napr z pole. Osobne jsem si prekopal DataGrid tak ze akceptuje DataModel. Inspirovano hodne pristupem jako v Jave.
Dale by me zajimalo zda inline editace podporuje/bude podporovat editaci sloupecku, ktere nejsou soucasti viditelne tabulky. Vetsinou v systemech nezobrazuji vsechna pole.
Nevim zda to ma cenu nejak zverejnovat – dalsi datagrid. Urcite by bylo fajn mit 1 ale poradnej. Ale kterej? Osobne pokazde vyuziji pouze funkce pro hezke vypsani dat s moznosti razeni a strankovani. Ostatni jako filtrovani a editaci resim stejne jinde, protoze tam je pokazde neco specialniho. V tom se mozna lisi ten muj DG protoze nic vic neumi a bohate to staci. Ma to cenu zverejnovat?
Editoval phx (28. 9. 2010 22:13)
- pekelnik
- Člen | 462
Já používám původní DataGrid od Romana Sklenáře
- s Majklem jsme dodělali podporu pro PHP 5.3 a různé druhy datasourců včetně například Doctrine 2
- v současnosti existují dvě oblasti ve kterých by to ještě chtělo
poladit…
- renderování (chceme to předělat na latte)
- vymyslet zkracování obsahu buňky pokud obsahuje HTML
Nevšiml jsem si že by některý z nových datagridů přišel s něčím novým… ale nijak jsem to nezkoumal.
Pokud je opak pravdou bylo by dobré kdyby to autoři vypíchli…
- knyttl
- Člen | 196
Dale by me zajimalo zda inline editace podporuje/bude podporovat editaci sloupecku, ktere nejsou soucasti viditelne tabulky. Vetsinou v systemech nezobrazuji vsechna pole.
Tohle vypadá, že bude umět komponenta Gridito od Honzy Marka. Nevím, jak by se to takhle do té inline editace dalo zakomponovat.
Nevšiml jsem si že by některý z nových datagridů přišel s něčím novým… ale nijak jsem to nezkoumal.
Tabellu jsem psal, protože jsem potřeboval možnost na každý pohled odkazovat v URL, potřeboval jsem komplexnější filtry a kvalitní inline editaci (vše je to vidět v tom komplexním příkladu – pokud to člověk nezkoumá, tak si toho nevšimne). Vypadá to, že Gridito by to mohlo všechno mít taky, jenže o jeho vývoji v tu dobu ještě nevěděl.
- podolinek
- Člen | 7
Zdarec.
Řešili jste formát DibiDateTime, který vrací dibi nad date sloupečkem?
Dibi totiž vrátí objekt a s tím si teď Tabella neporadí. Osobně jsem to
vyřešil přidáním podmínky
<?php
if($str instanceof DibiDateTime)
$str = $str->getTimestamp();
?>
do iterace v metodě renderBody.
- knyttl
- Člen | 196
Změny:
- Tabella nyní na GitHubu https://github.com/knyttl/Tabella
- Tabella při inline editaci reaguje na ESC/ENTER
- Přepsáno pro namespace
- Obrázky jsou přes data-uri přímo v CSS
- Spousta detailů
Editoval knyttl (4. 10. 2011 18:27)
- spenat28
- Člen | 9
Ahoj.
Upravil jsem Tabellu podle addonu Gridito. Netvrdím, že je lepší, ale
hodila se mi. Vypadá tedy stejně, tudíž bere vzhled z jQuery UI, přidal
jsem nějaké nastavení PK, i když zatím jen částečně (v JS se stále
natvrdo odesílá pouze ‚id‘), ikony, ikony pro řazení, trochu jsem
poupravil handler pro odesílání, předávám tedy celý model, aby nemusel
být statický (používám modelLoader), atp.
Vyhodil jsem samostatný datepicker a použil nový z knihovny jQueryUI.
Chcete to někdo?
PS. latest verze dibi, nette, jQuery, jQueryUI
Editoval spenat28 (4. 10. 2011 18:16)
- spenat28
- Člen | 9
@knyttl : já vím, že má váš design, ale nelíbí se mi a proto jsem si Tabellu přepsal tak aby jQueryUI používala, k čemuž jsem využil scriptů z Gridita a několik úprav. Nemám kde vystavovat, mohu někam poslat. Na githubu bohužel nejsem pošlu tar.gz nebo zip, s funkční ukázkovou app, pokud máš zájem.
- knyttl
- Člen | 196
spenat28 napsal(a):
@knyttl : já vím, že má váš design, ale nelíbí se mi a proto jsem si Tabellu přepsal tak aby jQueryUI používala, k čemuž jsem využil scriptů z Gridita a několik úprav. Nemám kde vystavovat, mohu někam poslat. Na githubu bohužel nejsem pošlu tar.gz nebo zip, s funkční ukázkovou app, pokud máš zájem.
Oukej :) Já jsem si asi špatně vyložil větu „Vypadá tedy stejně, tudíž bere vzhled z jQuery UI“.
Ideální by bylo někam dát funkční prezentovatelnou aplikaci – třeba bys zaujal více lidí, než jen mne :-)
- spenat28
- Člen | 9
knyttl napsal(a):
spenat28 napsal(a):
@knyttl : já vím, že má váš design, ale nelíbí se mi a proto jsem si Tabellu přepsal tak aby jQueryUI používala, k čemuž jsem využil scriptů z Gridita a několik úprav. Nemám kde vystavovat, mohu někam poslat. Na githubu bohužel nejsem pošlu tar.gz nebo zip, s funkční ukázkovou app, pokud máš zájem.
Oukej :) Já jsem si asi špatně vyložil větu „Vypadá tedy stejně, tudíž bere vzhled z jQuery UI“.
Ideální by bylo někam dát funkční prezentovatelnou aplikaci – třeba bys zaujal více lidí, než jen mne :-)
To je pravda, proto jsem psal, že bohužel nemám kde vystavovat, ovšem pokud to zaujme vás jako tvůrce, můžete úpravy buď použít nebo je alespoň někde vystavit vy. Udělal bych to, bohužel na to nemám čas. (Vím, že je to drobnost se někde zaregistrovat, atd. ovšem těchto miniúkonů mám stovky, a tenhle se mi tam nevejde.) Nemám vlastní server, a v tomto měsíci na to čas mít nebudu. Ovšem myslím si, že by stálo za to se na to podívat, jak říkám, rád vám to pošlu v zipu, databáze je stejná jako u vás v příkladové aplikaci, tedy stačí upravit si config aby se připojil ke správné databázi a můžete se podívat co jsem s tím provedl. Neříkám, že je všechno správně.
- spenat28
- Člen | 9
http://www.uloz.to/…spenat28-zip
heslo: jon,
db dump: v adresáři data
nutné upravit config.neon pro připojení k DB
PS. verze je funkční, ač pokračuji v úpravách, ty o kterých jsem psal zde jsou, něco jsou maličko prasárny a je tam pár zbytečností, ale pro inspiraci a snad postačí
PPS. nevím proč, ale v této verzi co jsem rychle vyrobil se nezobrazuje datepicker, v mé aplikaci kde to používám ano, žádná chyba nikde neskáče, spíš je někde vypnutý … nejsem si jistý. Možná jsem zapomněl nahrát správné jQueryUI js, omlouvám se, nemám bohužel čas to teď zjišťovat
Editoval spenat28 (5. 10. 2011 21:17)
- iguana007
- Člen | 970
tak jsem to hodil v tom stavu, jak bylo v zipu na github: https://github.com/…-for-PHP-5.3
- spenat28
- Člen | 9
iguana007 napsal(a):
tak jsem to hodil v tom stavu, jak bylo v zipu na github: https://github.com/…-for-PHP-5.3
Díky.
Teď dělám checkbox sloupec pro vícenásobné úpravy a tak podobně.
Nicméně v průběhu úprav jsem začal spíše zvažovat, že upravit
Gridito, které mi přijde napsané poněkud přehledněji a objektově (ne že
by tabella nebyla, ale chybí class pro Column a podobné věci, kvůli kterým
jsou v kódu použity switche a špatně se to rozšiřuje), bude
smysluplnější. Nicméně to budu dělat asi až po úpravách tabelly, nechce
se mi to už měnit v průběhu vývoje jedné aplikace.
- spenat28
- Člen | 9
Jack06 napsal(a):
Prosímtě, můžeš někde uvést co a jak jsi všecho změnil. Zajímala by mě inicializace oproti původní tabelle. Třeba původní tabella používá datasource, ale jak toho dosáhnu u toho předělaného? Jaksi se tmu nechce. :-) Díky
Tohle také používá dibi datasource, jen ho odesílám z metody modelu až uvnitř komponenty, to proto, že komponentě posílám celý model, potřebuji volat z handleru pro send a delete jeho metody a nemám metody statické. Tedy proto. S modelem který je v aplikaci co jsem dělal přítomen to funguje.
Pro porovnání změn Ti stačí diff mezi původní verzí dokumentu Tabella.php a tou která je v mém projektu.
Změn v kódu nebylo moc a nejsou nijak zásadní. Už jsem mezi tím udělal další změny, které jsem nikam neposílal… nicméně ani tech není mnoho.
Editoval spenat28 (19. 10. 2011 14:27)
- Jack06
- Člen | 168
Technická, proč onDelete v té anonymní funkci jako $id posílá celý Object of class Addons\Tabella?
Asi moc nechápu, jak mám pak volat metodu delete($id), když $id je celý objekt a ne jen to id.
Díky za rady:
public function createComponentCategoryList($name) {
$presenter = $this->presenter;
$grid = new Tabella($this->model->category, array(
"order" => "id",
"limit" => 15,
"onDelete" => function( $id ) use ($presenter) {
$presenter->model->category->delete( $id );
}
), 'CategoryList');
$grid->addColumn("ID", "id", array("width" => 50));
$grid->addColumn("TYP", "typ", array("width" => 60));
$grid->addColumn("NÁZEV", "nazev", array(
"renderer" => function( $row ) use ($presenter) {
// can be a link within the application
return \Nette\Utils\Html::el("td class=al")->add(\Nette\Utils\Html::el('a target=_blank')
->href($presenter->link(":Admin:Category:update", array("id" => $row->id)))
->add($row->nazev));
return $td;
}
));
$grid->addColumn('<span class="ui-icon ui-icon-circle-plus"></span>', Tabella::ADDTEXT, array(
"type" => Tabella::DELETE
));
$this->addComponent($grid, $name);
}
- jeremy13
- Člen | 18
Můj problém souvisí s persistentními parametry v presenteru. Jakmile provedu v komponentě s tabellou například nějaké filtrování, nebo třeba přidání řádku, tak se mi ztratí všechny parametry presenteru.
Jelikož pak podle těchto parametrů při vytváření komponenty s tabbelou vybírám jen určité řádky s datasource tabelly, tak mi datasource nic nevrátí (jelikož jsou parametry null).
Neví prosím někdo co s tím. Případně nemá někdo příklad, kdy používá tabellu v komponentě a předává této komponentě nějaký například cizí klíč, který použije například ve where datasource?
- knyttl
- Člen | 196
Já to pak nějak zkoušel řešit – nevím, jestli ti to pomůže, ale změnil jsem způsob, jak se drží parametry, zatím jen jako gist:
https://gist.github.com/1336142
Prakticky jsem začal používat persistentní parametry, místo těch svých.
Editoval knyttl (3. 11. 2011 10:40)
- Jack06
- Člen | 168
Jakože si mám stáhnout to co jsi teď dal na gist?
Ne že by se mi to chtělo zase přepisovat do JqueryUI, jelikož to stylování se mi náramě hodí a líbí.. :-D
knyttl napsal(a):
Jack06 napsal(a):
A odpověď na mou otázku? :-D Já jen že takto nejde mazat. :-D
Nevím, ale tohle řešení by mělo počítat i s pers. parametry mimo tabellu.
Editoval Jack06 (3. 11. 2011 11:48)
- jeremy13
- Člen | 18
Hm, tak dík, ale bohužel mi to problém nevyřešilo. Stále, jakmile třeba provedu filtrování, tak se všechny persistentní parametry ztratí.
Konkrétně mám komponentu:
use Addons\Tabella;
class Grid extends \Nette\Application\UI\Control {
/** @persistent */
public $foreign_id;
public function render() {
$template = $this->template;
$template->setFile(dirname(__FILE__) . '/grid.latte');
$template->render();
}
public function setId($foreign_id) {
$this->foreign_id=$foreign_id;
}
public function createComponentItemsGrid($name) {
$foreign_id=$this->foreign_id;
$grid=new Tabella(MF::getModel('items')->dataSource()->where('foreign_id=%i', $foreign_id),
array(
"onSubmit" => function( $post ) use ($foreign_id) {
$post['foreign_id'] = $foreign_id;
MF::getModel('items')->save($post, $post['id']);
}
)
);
$grid->addColumn ...
...
$this->addComponent($grid, $name);
}
}
a pak v presenteru mimo jiné:
/** @persistent */
public $foreign_id = NULL;
public function renderItems($foreign_id) {
$this['grid']->setId($foreign_id);
}
protected function createComponentGrid($name) {
$grid = new Grid($this, $name);
return $grid;
}
V šablonách pak jen vytvářím control. Když se stránka vytvoří, tak
je vše v pořádku, stejně tak, když dám například položky seřadit,
ovšem jakmile použiji třeba filtrování, tak se provede požadavek již bez
persistentních parametrů a tím pádem mám tabellu prázdnou, jelikož se
foreign_id používá v datasource.
Jediný způsob, jak jsem docílil toho co jsem chtěl, je to, když si do
šablony presenteru to id předávám a vytvořím komponentu {control
grid$foreign_id} a komponentu v presenteru vytvářím pomocí
createComponent($name) a foreign_id si pak z názvu komponentu vytáhnu. To mi
ovšem nepřijde jako vůbec šťastné řešení. Jen se v tomto případě
obejdou persistentní parametry v presenteru a díky toho to funguje …
Jakékoliv lepší řešení jen s radostí uvítám :)
Editoval jeremy13 (3. 11. 2011 21:59)
- knyttl
- Člen | 196
JoeKE napsal(a):
Cavte rad by som sa spytal ako pridam stlpec bez toho aby mi bralo zoradenie a chem pridat do toho stlpca nejaky <a href=„{link }“> </a> ??
dakujem
Viz ten komplexní příklad. Jen poznamenejme, že jsem Tabellu přepsal (http://tabella.knyt.tl), aby respektovala DI a místo DataSource používá teď dibiFluent. Stejný přístup, jako je ale v následujícím příkladu by měl fungovat i na té staré Tabelle, jen místo $context se k presenteru musí dostat přes Environment.
<?php
$grid->addColumn('Surname', 'surname', array(
'renderer' => function($row) use ($context) {
return Html::el('td')->add(Html::el('a')
->href($context->application->presenter
->link('this', array(
'complexTabella-filter' => array('id' => $row->id))))
->setText($row->surname));
},
'order' => false, // zakázání řazení
'filter' => false // zakázání filtrů
));
?>
Editoval knyttl (20. 12. 2011 1:00)
- JoeKE
- Člen | 7
knyttl napsal(a):
JoeKE napsal(a):
Cavte rad by som sa spytal ako pridam stlpec bez toho aby mi bralo zoradenie a chem pridat do toho stlpca nejaky <a href=„{link }“> </a> ??
dakujemViz ten komplexní příklad. Jen poznamenejme, že jsem Tabellu přepsal (http://tabella.knyt.tl), aby respektovala DI a místo DataSource používá teď dibiFluent. Stejný přístup, jako je ale v následujícím příkladu by měl fungovat i na té staré Tabelle, jen místo $context se k presenteru musí dostat přes Environment.
<?php $grid->addColumn('Surname', 'surname', array( 'renderer' => function($row) use ($context) { return Html::el('td')->add(Html::el('a') ->href($context->application->presenter ->link('this', array( 'complexTabella-filter' => array('id' => $row->id)))) ->setText($row->surname)); }, 'order' => false, // zakázání řazení 'filter' => false // zakázání filtrů )); ?>
Dakujem funguje to aj v tej starej verzii cez Environment
- JoeKE
- Člen | 7
Ahoj knyttl, rad by som sa spytal na 1 otazku ked mozem. Kedby som chcel
nieco take ze vyber poloziek z tabulky cize ked kliknem na dany riadok
z tabulky tak sa mi zapise do nejake session u. Sice ono to funguje lebo
jednoducho som pridal dalsi stlpec do tabely ako si mi poradil mam to trosku
inak
->href( Environment::getApplication()->getPresenter()
->link( „page“, array(„do“ ⇒ „lala-pridat“, „lala-id“ ⇒
$row->id)))
ono to funguje ale ja by som potreboval funkciu ‚pridat‘ volat ajax-ovo,
lebo ked spravim nejaky vyber (do kolonky meno zadam ‚a‘ stlacim enter, teda
vyfitrujem mocou tabely) a stlacim ‚pridat‘ tak sa mi dany riadok prida do
session-u ale refresne sa cela stranka a zrusi sa vyber. pritom presentery je
zapnuty ajax.
ps: potrebujem to len na skolske ucely
za pochopenie dakujem
- knyttl
- Člen | 196
JoeKE napsal(a):
Ahoj knyttl, rad by som sa spytal na 1 otazku ked mozem. Kedby som chcel nieco take ze vyber poloziek z tabulky cize ked kliknem na dany riadok z tabulky tak sa mi zapise do nejake session u. Sice ono to funguje lebo jednoducho som pridal dalsi stlpec do tabely ako si mi poradil mam to trosku inak
->href( Environment::getApplication()->getPresenter()
->link( „page“, array(„do“ ⇒ „lala-pridat“, „lala-id“ ⇒ $row->id)))
ono to funguje ale ja by som potreboval funkciu ‚pridat‘ volat ajax-ovo, lebo ked spravim nejaky vyber (do kolonky meno zadam ‚a‘ stlacim enter, teda vyfitrujem mocou tabely) a stlacim ‚pridat‘ tak sa mi dany riadok prida do session-u ale refresne sa cela stranka a zrusi sa vyber. pritom presentery je zapnuty ajax.ps: potrebujem to len na skolske ucely
za pochopenie dakujem
Ahoj, no pokud tomu dobře rozumím, tak by Ti mělo stačit používat ten klasický Nette ajax javascript a pak ten <a> vytvořit jako
<?php
Html::el('a')->href(...)->class('ajax');
?>
Pokud to nestačí, tak upřesni proč.
Vojta
Editoval knyttl (30. 12. 2011 15:31)
- JoeKE
- Člen | 7
knyttl napsal(a):
JoeKE napsal(a):
Ahoj knyttl, rad by som sa spytal na 1 otazku ked mozem. Kedby som chcel nieco take ze vyber poloziek z tabulky cize ked kliknem na dany riadok z tabulky tak sa mi zapise do nejake session u. Sice ono to funguje lebo jednoducho som pridal dalsi stlpec do tabely ako si mi poradil mam to trosku inak
->href( Environment::getApplication()->getPresenter()
->link( „page“, array(„do“ ⇒ „lala-pridat“, „lala-id“ ⇒ $row->id)))
ono to funguje ale ja by som potreboval funkciu ‚pridat‘ volat ajax-ovo, lebo ked spravim nejaky vyber (do kolonky meno zadam ‚a‘ stlacim enter, teda vyfitrujem mocou tabely) a stlacim ‚pridat‘ tak sa mi dany riadok prida do session-u ale refresne sa cela stranka a zrusi sa vyber. pritom presentery je zapnuty ajax.ps: potrebujem to len na skolske ucely
za pochopenie dakujem
Ahoj, no pokud tomu dobře rozumím, tak by Ti mělo stačit používat ten klasický Nette ajax javascript a pak ten <a> vytvořit jako
<?php Html::el('a')->href(...)->class('ajax'); ?>
Pokud to nestačí, tak upřesni proč.
Vojta
hmm ono to funguje ale nie tak ako som si to predstavoval :). Potreboval by
som nieco take ako ma tabella Editable. Ked zeditujes nejaky riadok tabulky a
nasledne ho uloziz (fajkou co je na konci) tak sa resresne tabela, ale dajme
tomu ze si na 9 strane tak po zeditvani tam aj zostanes. To chcem aj ja
dosiahnut nech mi refresne tabellu ale nech zostane na tej 9 strane a nasledne
tr sa nastavi na class=oznacene dajme tomu.
tymto ->class(‚ajax‘) om som dosiahol ze sa mi nerefresne stranka ale ani
tabella tak nie je videt ktore riadky mam vybrate
- knyttl
- Člen | 196
Asi už chápu. No asi bys musel tu Tabellu podědit a ten handler té akce přidat přímo do ní, aby tam zůstavaly ty persistentní parametry. Tzn. něco jako (platí pro tu novou, ale pro tu plvodní je to to samé):
<?php
use Maite\Tabella,
Nette\Utils\Html;
class DuplicatesTabella extends Tabella {
public function __construct($context) {
parent::__construct(array(
'context' => $context,
'source' => $context->model->duplicates->source(),
'order' => 'id',
'sorting' => 'desc',
'onDelete' => function($id) use ($context) {
$context->dibi->delete('duplicates')->where('id = %i', $id)->execute();
}));
$this->addColumn('ID', 'id', array(
'width' => 20,
'class' => 'center'
));
...
}
public function handleMyAction() {
...
}
?>
Ale nevím, jen myslím, že by to mělo fungovat :-) Cíl prostě je, aby ti tam zůstaly ty persistentní parametry, jako je stránka, řazení apod.
Editoval knyttl (30. 12. 2011 17:10)
- JoeKE
- Člen | 7
knyttl napsal(a):
Asi už chápu. No asi bys musel tu Tabellu podědit a ten handler té akce přidat přímo do ní, aby tam zůstavaly ty persistentní parametry. Tzn. něco jako (platí pro tu novou, ale pro tu plvodní je to to samé):
<?php use Maite\Tabella, Nette\Utils\Html; class DuplicatesTabella extends Tabella { public function __construct($context) { parent::__construct(array( 'context' => $context, 'source' => $context->model->duplicates->source(), 'order' => 'id', 'sorting' => 'desc', 'onDelete' => function($id) use ($context) { $context->dibi->delete('duplicates')->where('id = %i', $id)->execute(); })); $this->addColumn('ID', 'id', array( 'width' => 20, 'class' => 'center' )); ... } public function handleMyAction() { ... } ?>
Ale nevím, jen myslím, že by to mělo fungovat :-) Cíl prostě je, aby ti tam zůstaly ty persistentní parametry, jako je stránka, řazení apod.
A ako ma teraz byt ten stlpec co je buton pridat ?
<?php
$this->addColumn( "", "select", array(
"renderer" => function( $row ) {
return Html::el( "td align=center" )
->add( Html::el( 'a class=botton')
->href( Environment::getApplication()->getPresenter()
->link( "page", array("do" => "text", "text" => $row->id)))
->setText('pridat')
->class('ajax')
);
},
"width" => 20,
'order' => false, // zakázání řazení
'filter' => false // zakázání filtrů
));
));
?>
- knyttl
- Člen | 196
A ako ma teraz byt ten stlpec co je buton pridat ?
<?php $this->addColumn( "", "select", array( "renderer" => function( $row ) { return Html::el( "td align=center" ) ->add( Html::el( 'a class=botton') ->href( Environment::getApplication()->getPresenter() ->link( "page", array("do" => "text", "text" => $row->id))) ->setText('pridat') ->class('ajax') ); }, "width" => 20, 'order' => false, // zakázání řazení 'filter' => false // zakázání filtrů )); )); ?>
Teď nechápu jaký sloupec přidat? Minimálně ale neděláš dobře Html::el(‚a class=button‘)->class(‚ajax‘). Asi spíš chceš Html::el(‚a‘)->class(‚button ajax‘).
Editoval knyttl (30. 12. 2011 18:52)
- JoeKE
- Člen | 7
knyttl napsal(a):
A ako ma teraz byt ten stlpec co je buton pridat ?
<?php $this->addColumn( "", "select", array( "renderer" => function( $row ) { return Html::el( "td align=center" ) ->add( Html::el( 'a class=botton') ->href( Environment::getApplication()->getPresenter() ->link( "page", array("do" => "text", "text" => $row->id))) ->setText('pridat') ->class('ajax') ); }, "width" => 20, 'order' => false, // zakázání řazení 'filter' => false // zakázání filtrů )); )); ?>
Teď nechápu jaký sloupec přidat? Minimálně ale neděláš dobře Html::el(‚a class=button‘)->class(‚ajax‘). Asi spíš chceš Html::el(‚a‘)->class(‚button ajax‘).
tak pridal som funkciu do tabeli priamo len abz som to vedel odskusat nejaka
hendle funkcia.
ako zavolam tu funkciu nejakym butonom, buton pridat.
este raz su stlpce
meno priezvisko trieda rocnik / a pridat stlpec kde bude button „pridat“
co zavola tu moju funkciu
to zanamena ze si toho ziaka prida do pola nasledne sa refresne tabella ale
strana zostane taka ista cize presne to co si pisal
ako ma teda vizerat stlpec „pridat“ $this->addColumn() ??
- knyttl
- Člen | 196
Tak tohle by mělo být správně, co na tom nefunguje? Jen pokud se jedná o poděděnou Tabellu, tak bys tam spíš měl mít něco jako:
<?php
$thisTabella = $this;
'renderer' => function($row) use ($thisTabella) {
return Html::el('a')->href($thisTabella->link('text!', array('text' => $row->id))))
...
}
?>
Protože chceš odkazovat na signál v té poděděné Tabelle a ne v prezenteru.
- fistaro
- Člen | 3
Ahoj, zkousel jsem rozchodit tabellu z noveho gitu jak tabelly, nette
i dibi a nemuzu se dostat za
Call to undefined method DibiDataSource::offset()
Deklarace gridu v presenteru
$grid = new Tabella( array( 'context' => $this->context,
'source' => UserManager::dataSource()));
class UserManager
public static function dataSource() {
return dibi::dataSource('SELECT *
FROM [users] U
WHERE deleted=0 '
);
}
Netusite nekdo co s tim? Co jsem hledal, tak datasource nema ani offset ani orderBy, ktery je zminen hned po offset
$this->source
->offset(($this->params['offset']-1)*$this->params['limit'])->limit($this->params['limit'])
->orderBy($this->params['order'], $this->params['sorting'])->fetchAll();
edit: aha uz to vidim → dibifluent …
Editoval fistaro (7. 1. 2012 0:21)