NiftyGrid – Datagrid pro Nette 2 s velkou škálou funkcí
- Leinad
- Člen | 23
Řeším jeden problém s NiftyGridem a nevím, jak na něj. Chci udělat
knihovnu na půjčování knih. Databáze tedy vypadá podobně, jako v tomto
článku (rozdíl je jen, že místo tags mám categories):
https://doc.nette.org/cs/database
No a chtěl bych, aby v jednom sloupci byl tedy vypsaný seznam tagů oddělený čárkami. To ještě není problém, ale problém je, když chci podle toho sloupce filtrovat.
Aktuálně předávám toto jako dibiDatasource do Gridu:
<?php
$this->dibi->select("books.id AS books_id, title, author, GROUP_CONCAT(categories.name SEPARATOR ', ') AS categories ")
->from($this->getTableName())
->leftJoin("books_categories")->on("books_categories.books_id = books.id")
->leftJoin("categories")->on("books_categories.categories_id = categories.id")
->groupBy("books.id");
?>
To funguje s výpisem bez filtrování, jak potřebuju. Ale při pokusu o filtrování přes categories to vygeneruje chybný dotaz:
SELECT COUNT(*) AS `count`
FROM `books`
LEFT JOIN `books_categories` ON books_categories.books_id = books.id
LEFT JOIN `categories` ON books_categories.categories_id = categories.id
WHERE (`categories` LIKE '%prog%')
GROUP BY `books`.`id`
(Unknown column ‚categories‘ in ‚where clause‘)
- Dá se toto nějak řešit?
- Pokud ano, šlo by to i náhodou řešit bez použití dibi, ale s použitím NetteDatabase? Osobně jsem měl problém s tím, že NetteDatabase zdá se není stavěná na dělání JOINů, protože NotORM přístup funguje právě na principu vynechávání JOINů kvůli úspornosti přenášených dat…
Editoval Leinad (23. 10. 2012 11:10)
- Leinad
- Člen | 23
Tak aktuálně jsem se to rozhodl vyřešit děděním DibiDataSource. Teda, musel se ještě DibiDataSource upravit, protože potřebuji, aby atribut „private fluent“ byl protected:
<?php
class BookDibiDataSource extends DibiFluentDataSource{
public function filterData(array $filters) {
foreach ($filters as $key => $filter) {
if($filter["column"] == "categories"){
$this->fluent->having("GROUP_CONCAT(categories.name SEPARATOR ', ') LIKE %s", $filter["value"]);
unset($filters[$key]);
}
}
parent::filterData($filters);
}
}
?>
- Oli
- Člen | 1215
Ahoj, mam asi stupidni dotaz, ale jak se joinujou tabulky v tomhle gridu? Se selectem me to fungovalo tak jak melo, ale kdyz jsem si vytahl data z modelu tak nevim jak mam propojit tabulky. Mam to takhle:
//model
public function getUsers()
{
$users = $this->_db->table("users");
return $users;
}
//grid
$source = new \NiftyGrid\DataSource\NDataSource($this->database->getUsers());
$this->setDataSource($source);
$this->addColumn('role_id', 'Oprávnění')
//->setTableName("role.role_name")
->setTextFilter()
->setAutocomplete(5);
V tabulce users mám sloupec role_id, který odkazuje na roles, kde je sloupec id a role_name. Jak dostanu do tyhle tabulky to role_name?
Diky moc za kazdou radu!
- David Zadražil
- Člen | 62
@Andrasin napsal(a):
V pohodě, já jen pro jistotu to píšu, kdyby to někoho nenapadlo. Jinak díky ještě jednou, jde to dobře.
- Leinad
- Člen | 23
Oli napsal(a):
Nešlo by prostě upravit model? Tedy přidat tam např. metodu
<?php
public function getFullUsers()
{
$users = $this->_db->table("users")->select("users.*, roles.role_name");
return $users;
}
?>
Když tam předáš neúplný model (obsahující pouze data users a nikoliv roles), tak myslím, že aktuálně není v silách toho Gridu si ho doplnit.
- Filip111
- Člen | 244
Ahoj,
používám DoctrineDataSource a zajímalo by mě jakým způsobem lze použít
setTableName(„category.name“) pro definování referenční tabulky
u sloupců, které mají jen id?
Našel jsem ukázky pro Nette Database ale pro doctrine nikoliv. Použití mám podle https://forum.nette.org/…kalou-funkci#…
Díky.
- Semik
- Backer | 135
Zdravím.
Mám dotaz ohledně persistentní proměnné perPage. Nemá nastavenou žádnou
výchozí hodnotu, resp. se bere jako výchozí první hodnota z pole
perPageValues.
Pokud běží ajax tak při změně počtu prvků na stránku např. na 50 je odkaz na aktuální stránku gridu v pořádku. Avšak, když poté opět změním počet prvků na stránku na původní, první hodnotu pole, která by měla být výchozí, je součástí URL i když by „neměla“. Je to nejspíš tím, že perPage nemá pevnou výchozí hodnotu.
Problém se projevuje pouze při ajaxu a i na examplech.
- thorewi
- Člen | 84
Já jsem zase objevil problém, že mi niftygrid přestal fungovat s PHP 5.4.7 při pokusu o filtrování dat. Hlásilo to chybu
Invalid value for persistent parameter 'filter' in 'tutorsGridControl', expected scalar.
Opravil jsem to tak, že jsem v souboru Grid.php upravil
public $filter;
na
public $filter = array();
Tak třeba to někomu pomůže.
Editoval thorewi (28. 10. 2012 0:39)
- romiix.org
- Člen | 343
Zdravím,
riešil niekto filter výberu rozmedzia medzi dvomi dátumami pri stĺpcoch typu
date(+time)?
Predstavujem si to tak, že nad takýmto stĺpcom by sa zobrazili dva inputy s výberom dátumu a v GRID-e by sa zobrazili dáta vyhovujúce rozmedziu.
Dá sa to nejak elegantne s Niftygrid-om vyriešiť?
- Semik
- Backer | 135
romiix.org napsal(a):
Zdravím,
riešil niekto filter výberu rozmedzia medzi dvomi dátumami pri stĺpcoch typu date(+time)?Predstavujem si to tak, že nad takýmto stĺpcom by sa zobrazili dva inputy s výberom dátumu a v GRID-e by sa zobrazili dáta vyhovujúce rozmedziu.
Dá sa to nejak elegantne s Niftygrid-om vyriešiť?
Nejspíš by se musel rozšířit filtr.
- romiix.org
- Člen | 343
Semik napsal(a):
romiix.org napsal(a):
Zdravím,
riešil niekto filter výberu rozmedzia medzi dvomi dátumami pri stĺpcoch typu date(+time)?Predstavujem si to tak, že nad takýmto stĺpcom by sa zobrazili dva inputy s výberom dátumu a v GRID-e by sa zobrazili dáta vyhovujúce rozmedziu.
Dá sa to nejak elegantne s Niftygrid-om vyriešiť?
Nejspíš by se musel rozšířit filtr.
Napadlo mi, že by sa na to dalo využiť http://jqueryui.com/datepicker/#… .
Žiaľ teraz neviem ako by sa to tam dalo zakomponovať. Preto sa pýtam ak to
už niekto spravil…
- Nifty
- Člen | 45
Přidal jsem na github zatím branch pro bootstrap. Můžete psát nedostatky/problémy.
Button se vytváří zhruba takto:
$this->addButton('edit', 'Editovat')})
->setClass('btn-info') //může být i callback
->setIcon('icon-edit') //může být i callback
->setAjax(FALSE)
->setLink(function($row) use ($presenter){
return $presenter->link('edit', $row['id']);
});
Podobně je to i u globálního tlačítka.
achtan
Už jsem psal, že tu šablonu z pull requestu jsem měl nějak rozházenou.
Ptal jsem se, jestli to někomu funguje správně a nikdo se neozval. Proto jsem
to nemergnul.
Semik:
Ohledně té proměnné perPage – vim o tom, ale v současné době to neni
ani tak na škodu.
Bez té proměnné by tam nefungoval ajax ve většině případů.
thorewi
Mergnuto, díky!
romiix.org
Jedině přes rozšíření, nebo použít dva sloupce.
- romiix.org
- Člen | 343
Ak by som si vo FilterCondition rozšíril metódu
prepareFilter a predal jej schopnosť spracovať nový typ
filtrovania napr. DATERANGE tak to by mi postačilo na spracovanie.
Ešte by som nejak musel priohnúť grid na vykreslenie špeciálneho druhu
vstupného pola pre dátum (nejaký nápad? ešte neviem ako) a to by bolo
všetko. Nie?
Pýtam sa, aby som vedel či idem aspoň dobrým smerom:)
Vďaka
- David Ďurika
- Člen | 328
treba zjednotit typ premennej $row v callback-och
<?php
$source = new \NiftyGrid\DataSource\DoctrineDataSource($this->repository->getDataSource(), 'e_id');
//Předáme zdroj
$this->setDataSource($source);
$this->addColumn('e_supported', 'Supported')
->setRenderer(function($row){return $row->e_supported ? 'YES' : 'NO';})
->setCellRenderer(function($row){return $row['e_supported'] ? "background-color:#E4FFCC" : "background-color:#FFCCCC";});
?>
v jedom callbacku je $row objekt (presnjsie stdClass) a v druhom pripade je to pole
idealne by bolo keby to vracia entity v pripade doctrinu alebo activeRow v pripade NDB, nestudoval som kod tak neviem ci to je mozne…
Editoval achtan (29. 10. 2012 13:40)
- blacksun
- Člen | 177
Ještě jednou díky za tento skvělý grid.
Chci se zeptat – neřešil někdo překlad gridu pomocí https://componette.org/search/?… ?
- Semik
- Backer | 135
blacksun napsal(a):
Ještě jednou díky za tento skvělý grid.
Chci se zeptat – neřešil někdo překlad gridu pomocí https://componette.org/search/?… ?
NiftyGrid podporuje translator od commitu asi před 14 dny.
Editoval Semik (29. 10. 2012 20:17)
- David Ďurika
- Člen | 328
Semik napsal(a):
Komponentu jsem si rozšířil o vícesloupcové řazení, kdyby byl zájem tak bych třeba udělal pull request.
urcite posli pull
a este by bolo hajn kedy sa po 3. kliknuti na stlpec zoradovanie vyplo, lebo teraz ked klikas na stlpec tak sa zoraduje ASC → DESC → ASC a jednoducho to zoradovanie nevies vypnut… idealne by bolo ASC → DESC → ziadne → ASC
- Semik
- Backer | 135
achtan napsal(a):
urcite posli pull
a este by bolo hajn kedy sa po 3. kliknuti na stlpec zoradovanie vyplo, lebo teraz ked klikas na stlpec tak sa zoraduje ASC → DESC → ASC a jednoducho to zoradovanie nevies vypnut… idealne by bolo ASC → DESC → ziadne → ASC
Funguje mi to přesně tak. Jen co bude čas tak to udělám (nejspíš během zítřka).
Editoval Semik (30. 10. 2012 9:42)
- MW
- Člen | 626
Tak jsem to zatim poresil takto:
grid:
public function render()
{
...
If(in_array('costs', $this->getColumnNames())) {
$this->template->sumcost = $rows->sum('costs');
}
...
}
a do grid.latte jsem si pridal:
{if isSet($sumcost)}Náklady celkem: {$sumcost}{/if}
Neni to presne ono. Urcite by to slo udelat elegantneji… Ted to potrebuju jen na jednu tabulku, ale asi by se hodilo, to udelat universalne…
Editoval MW (30. 10. 2012 15:45)
- muflix
- Člen | 92
Ahoj, snažím se v jednořádkové editaci mít selectBox z databáze, ale
nevím si rady. Koukal jsem se do ukázkového příkladu a tam je
v DB tabulky:
article(user_id,...)
user(id, username)
a v ArticleGrid.php
$source = new \NiftyGrid\NDataSource($this->articles->select('article.id, title, status, published, views, category.name AS category, user.username, user.id AS user_id'));
...
$this->addColumn('username', 'Autor', '90px')
->setTableName("user.username")
->setTextFilter()
->setAutocomplete(5)
->setRenderer(function($row) use ($presenter){return \Nette\Utils\Html::el('a')->setText($row['username'])->href($presenter->link("user",$row['user_id']));})
->setSelectEditable($presenter->context->database->table('user')->fetchPairs('id','username'));
nerozumím tomu jak to funguje, magie asi bude v tom user.id AS user_id, ale zároveň mám trošku jinou situaci, mám tabulku kategorie_zbozi(id,id_kategorie_zbozi,nazev…) kde ta tabulka má cizí klíč sama na sebe, tj hlavní kategorie mají id_kategorie_zbozi NULL a ostatní odkazují na id existující kategorie (tím se označuje nadkategorie)
a já mám vypsanou nifty tabulku, s výpisem kategorií, u kterých bych chtěl nadkategorii měnit.
zatím to mám zhruba takto
$this->addColumn('nazev', 'Název', '100px');
$this->addColumn('id_kategorie_zbozi', 'Nadkategorie', '100px')
->setRenderer(function($row) use ($presenter){return $presenter->context->kategorieZbozi->getKategorii($row['id_kategorie_zbozi']);})
->setSelectEditable($this->kategorieZbozi->selectKategorii());
...model...
public function selectKategorii(){
return $this->db->query('SELECT * FROM kategorie_zbozi')->fetchPairs('id','nazev');
}
public function getKategorii($id){
return $this->db->fetchSingle("SELECT nazev FROM kategorie_zbozi WHERE id=$id");
}
kde id_kategorie_zbozi je hodnota, kterou chci změnit na základě
selectBoxu, který má pole (id, nazev)
vrací mi to teď ale chybu v SQL, protože to asi nezná
$row[‚id_kategorie_zbozi‘], nevím si moc rady, za pomoc předem
děkuji :-)
Editoval muflix (1. 11. 2012 15:11)
- cafesk8
- Člen | 103
Zdravím,
pokud se to již řešilo, tak se omlouvám, ale nemůžu řešení
nikde najít.
HomepagePresenter.php
<?php
private $clankyRepository;
public function inject(ClankyRepository $clankyRepository) {
$this->clankyRepository = $clankyRepository;
}
protected function createComponentArticleGrid() {
return new ArticleGrid($this->clankyRepository->getTable());
}
?>
ArticleGrid.php
<?php
namespace AdminModule;
use \NiftyGrid\Grid;
class ArticleGrid extends Grid {
protected $articles;
public function __construct($articles) {
parent::__construct();
$this->articles = $articles;
}
protected function configure($presenter) {
$source = new \NiftyGrid\NDataSource($this->articles->select('clanky.id, nazev'));
$this->setDataSource($source);
$this->addColumn('nazev', 'Titulek', '210px', 30)
->setTextEditable()
->setTextFilter()
->setAutocomplete(5);
}
}
?>
Laděnka na mě však křičí
Declaration of AdminModule\ArticleGrid::configure() should be compatible
with that of NiftyGrid\Grid::configure()
na řádku class ArticleGrid extends Grid {
Nevíte někdo v čem by mohl být problém?
Předem díky za odpověďi
- MW
- Člen | 626
Je prosím nějaka možnost, aby validace na vkladaní/editaci probihala
stejně, jako u klasickeho formu?
Tedy aby se nezaviral form, jen to vyhodilo hlasku? Ted me to dela to, ze to
zavre form a do flashmsg to vypise, ze jste nezadali, ale ostatni spravne
vyplneny pole jsou taky pryc…
Pouzivam to takto:
$this->getColumnInput('name')->addRule(\Form::FILLED, 'Nezadali jste název.');
Diky !
- jiri.sykora83
- Člen | 2
Snažil jsem se zprovoznit poslední verzi doplňku a nějaký se mi to
nedaří. Postupoval jsem takto.
Nakopíroval jsem složku NiftyGrid do /libs
Resources do /www
Resources připojil v do AdminModule/templates/@layout.latte (chci ho
používat asi pouze v administraci)
Vytvořil si složku AdminModule/grids
- vytvořil menuGrid.php
V presenteru kde to chci použít přidal metodu
protected function createComponentMenuGrid()
{
return new \MenuGrid($this->menuRepository);
}
MenuGrid.php
use \NiftyGrid\Grid;
class MenuGrid extends Grid{
…
--composer
{
…
„config“: {
„vendor-dir“: „libs“
},
„require“: {
„php“: „>= 5.3.0“,
„nette/nette“: „>= 2.0.5“
„nifty/nifty-grid“: „*“
}
}
A skončím na erroru: Class ‚MenuGrid‘ not found
Snad jsem popsal všechny kroky. Mám pocit že se doplněk vůbec nenačte.
- romiix.org
- Člen | 343
romiix.org napsal(a):
Zdravím,
riešil niekto filter výberu rozmedzia medzi dvomi dátumami pri stĺpcoch typu date(+time)?Predstavujem si to tak, že nad takýmto stĺpcom by sa zobrazili dva inputy s výberom dátumu a v GRID-e by sa zobrazili dáta vyhovujúce rozmedziu.
Zatiaľ to nikto nepotreboval? :)
- vojty
- Člen | 19
Ahoj,
narazil jsem na problém s DibiFluent datasource. Pokud
mám dvě tabulky které mají stejně pojmenovaný sloupec (v mém případě
Item.created a User.created) a chci je podle něj filtrovat dostanu vyjímku:
Column ‚created‘ in where clause is ambiguous. Funkce getCount()
totiž seskládá podmínku takto: WHERE (DATE( created
) =
DATE( ‚2012–11–19‘ )).
Narazil už na tom někdo? Napadá zkušenějšího nějaké rozumné
řešení?
Díky V.
Editoval vojty (19. 11. 2012 21:21)
- bumprask
- Člen | 59
Jak by šlo zabránit, aby se při odeslání formuláře subgridu nevalidovala i pravidla definovaná u formuláře nadřazeného gridu? Pravděpodobně jde o bug, má někdo nějaký nápad, jak by se to teoreticky dalo upravit, aby to validovalo jen daný subgrid?
Editoval bumprask (21. 11. 2012 11:20)
- MW
- Člen | 626
bumprask napsal(a):
Jak by šlo zabránit, aby se při odeslání formuláře subgridu nevalidovala i pravidla definovaná u formuláře nadřazeného gridu? Pravděpodobně jde o bug, má někdo nějaký nápad, jak by se to teoreticky dalo upravit, aby to validovalo jen daný subgrid?
je to bug, Nifty pred casem rikal, ze se na to podiva…
- nn2
- Člen | 9
Prosím o radu.
Mám podle návodu zprovozněný grid, ale nedaří se mi odelat hodnotu z in-line editace.
<?php
public function createComponentUserGrid($name) {
return new UserGrid($this->context->userModel->userDetailsFull('all'));
}
protected function configure($presenter) {
...
$this->paginate = false;
$this->setRowFormCallback(function($values) use ($self, $presenter){
//db update, flash message, ..
NDebugger::barDump($values);
$self->flashMessage(var_export($values));
exit;
}
); //toto se mi nevolá
$this->addButton(Grid::ROW_FORM, __('Quick edit'))
->setClass("icon icon-pencil")
->setAjax(true);
?>
Na tlačítko se zobrazí editovací formulář, ale na uložit se zobrazí zase. Použitý grid je aktuální (cca 14 dní starý z GitHubu), PHP je 5.3, Nette 2.0.5 Prefixová verze pro 5.2.
Přijde mi, že někde není nastavený onSubmit callback?
Příklad volá http://www.grid.jakubholub.cz/editable?…, mě to volá
users?userGrid-id=12userGrid-perPage=20&do=userGrid-showRowForm na stisk
Uložit.
Moc díky za radu, kam se kouknout.
- fekete
- Člen | 4
mam dotaz z ktorym neviem pohnut,
ako naplnit niftygrid datami (pouzivam nette\db) z M:N vztahu? Mam tabulku
produkty,dodavatelia a produktyDodavatelia kde je id produktu, id dodavatela a
cena. Pri kazdom produkte chcem v jednom stlpci vypisat zhustenou formou
vsetkych dodavatelov a ceny.
Zatial tam mam
new \NiftyGrid\DataSource\NDataSource($this->connection->table("produkty")->select('produkty.*,produktyDodavatelia:*,dodavatelia.*')
ale neviem uplne ako pridat do $this->addColumn() dodavatel=>cena,dodavatel2=>cena2,… viem ze tam bude pravdepodobne ->setRenderer ale neviem co v nom, ako vytiahnut data
Editoval fekete (26. 11. 2012 10:06)
- llsm
- Člen | 121
fekete napsal(a):
mam dotaz z ktorym neviem pohnut,
ako naplnit niftygrid datami (pouzivam nette\db) z M:N vztahu? Mam tabulku produkty,dodavatelia a produktyDodavatelia kde je id produktu, id dodavatela a cena. Pri kazdom produkte chcem v jednom stlpci vypisat zhustenou formou vsetkych dodavatelov a ceny.Zatial tam mam
new \NiftyGrid\DataSource\NDataSource($this->connection->table("produkty")->select('produkty.*,produktyDodavatelia:*,dodavatelia.*')
ale neviem uplne ako pridat do $this->addColumn() dodavatel=>cena,dodavatel2=>cena2,… viem ze tam bude pravdepodobne ->setRenderer ale neviem co v nom, ako vytiahnut data
Naspojuj si vysledky uz v dotazu do databaze, pro MySQL funkci GROUP_CONCAT() v kombinaci s GROUP BY
- bumprask
- Člen | 59
Přidal jsem si do Column.php metodu ->setFileEditable(), která přidá
formulářový prvek ->addUpload(). V gridu nadefinuji sloupec tímto typem,
prvek pro upload se zobrazí, ovšem při odeslání nastává problém při
zpracování dat z formuláře, laděnka hlásí, že daný název sloupce
(index v poli $values) není definován.
Prosím, věděl by někdo co způsobí, že se proměnná se souborem nedostane
ke zpracování?
Edit: Je možné, že addUpload nelze zpracovat ajaxem? (lze vypnout zpracování gridu ajaxem)
Editoval bumprask (30. 11. 2012 12:10)
- Nevinho
- Člen | 77
Zdarec, dělám si niftyGrid a používám verzi z doplňků na nette.org.
Mám ovšem jeden problém, nebo spíše dva..
- Když si udělám subgrid, tak po kliknutí na ten zelený křížek se nic nestane subgrid se vůbec nevykreslí, jako kdyby se nevykonala žádná akce, a za druhé, nemůžu přijít na to jak smazat záznam(jednotlivý řádek), po kliknutí na křížek se pouze zobrazí hláška, jestli chci smazat záznam a po kliknutí na ok se zase nic neprovede.
KontaktSubGrid:
<?php
use \NiftyGrid\Grid;
class KontaktSubGrid extends Grid
{
protected $kontakt;
protected $pobocky_id;
public function __construct($kontakty, $pobocky_id)
{
parent::__construct();
$this->kontakt = $kontakty;
$this->pobocky_id = $pobocky_id;
}
protected function configure($presenter)
{
$source = new \NiftyGrid\NDataSource($this->kontakt->select('kontakty.id, telefon,mail,fax,www, pobocky.id')->where('pobocky_id = ?', $this->pobocky_id));
$this->setDataSource($source);
$this->addColumn('telefon', 'Telefon', '200px')
->setTextFilter()
->setTextEditable()
->setAutocomplete(5);
$this->addColumn('email', 'E-mail', '80px')
->setTextFilter()
->setTextEditable()
->setAutocomplete(5);
$this->addColumn('fax', 'Fax', '200px')
->setTextFilter()
->setTextEditable()
->setAutocomplete(5);
$this->addColumn('www', 'Webové stránky', '150px')
->setTextFilter()
->setTextEditable()
->setAutocomplete(5);
$self = $this;
$this->setRowFormCallback(function($values) use ($self, $presenter){
$vals = array(
"id" => $values["id"],
"telefon" => $values["telefon"],
"email" => $values["email"],
"fax" => $values["fax"],
"www" => $values["www"]
);
$presenter->context->database->table('kontakty')->where("id", $vals["id"])->update($vals);
$self->flashMessage("Záznam byl úspěšně uložen.","grid-successful");
}
);
$this->addButton(Grid::ROW_FORM, "Editace")
->setClass("fast-edit");
$this->addButton("delete", "Smazat")
->setClass("delete")
->setLink(function($row) use ($self){return $self->link("delete!", $row['id']);})
->setConfirmationDialog(function($row){return "Určitě chcete smazat tento záznam?";});
}
public function handleDelete($id)
{
$this->flashMessage("Tato funkce zatím nefunguje", "grid-info");
}
}
?>
PobockyGrid
<?php
<?php
use \NiftyGrid\Grid;
class PobockyGrid extends Grid
{
protected $pobocky;
public function __construct($pobocky)
{
parent::__construct();
$this->pobocky = $pobocky;
}
protected function configure($presenter)
{
$source = new \NiftyGrid\NDataSource($this->pobocky->select('pobocky.id,typ,ulice, psc, mesto, kraj, firmy.nazev_firmy'));
$this->setDataSource($source);
$this->setWidth("800px");
$this->addColumn('nazev_firmy', 'Firma', '100px')
->setTableName("firmy.nazev_firmy")
->setTextFilter()
->setAutocomplete(5);
$this->addColumn('typ', 'Typ', '80px')
->setTextFilter()
->setTextEditable()
->setAutocomplete(5);
$this->addColumn('ulice', 'Ulice', '200px')
->setTextFilter()
->setTextEditable()
->setAutocomplete(5);
$this->addColumn('psc', 'PSÄŚ', '100px')
->setTextFilter()
->setTextEditable()
->setAutocomplete(5);
$this->addColumn('mesto', 'Město', '200px')
->setTextFilter()
->setTextEditable()
->setAutocomplete(5);
$this->addColumn('kraj', 'Kraj', '100px')
->setTextFilter()
->setTextEditable()
->setAutocomplete(5);
$self = $this;
$this->setRowFormCallback(function($values) use ($self, $presenter){
$vals = array(
"id" => $values["id"],
"ulice" => $values["ulice"],
"psc" => $values["psc"],
"mesto" => $values["mesto"],
"kraj" => $values["kraj"]
);
$presenter->context->database->table('pobocky')->where("id", $vals["id"])->update($vals);
$self->flashMessage("Záznam byl úspěšně uložen.","grid-successful");
}
);
$this->addButton(Grid::ROW_FORM, "Editace")
->setClass("fast-edit");
$this->addButton("delete", "Smazat")
->setClass("delete")
->setLink(function($row) use ($self){return $self->link("delete!", $row['id']);})
->setConfirmationDialog(function($row){return "Určitě chcete smazat tento záznam?";});
$this->addSubGrid("kontakt", "Zobrazit kontakty na poboÄŤku")
->setGrid(new KontaktSubGrid($presenter->context->database->table('kontakty'), $this->activeSubGridId))
->settings(function($grid){
$grid->setWidth("800px;");
})
->setCellStyle("background-color:#f6f6f6; padding:20px;");
}
public function handleDelete($id)
{
$this->finance->find('id', $id)->delete();
$this->flashMessage("Záznam byl smazán", "grid-info");
}
}
?>
za jakoukoli pomoc předem díky..
- romiix.org
- Člen | 343
Nevinho napsal(a):
Je to strašne dlhé, fakt sa mi to nechcelo celé lúštiť.
Rozhodne ale odporúčam v prípade nejakého takéhoto problému vypnúť JS a
neboj, vyskočí ti ladenka s ktorou už budeš vedieť debugovať.
- kedrigern
- Člen | 102
Zdravím,
snažil jsem se NiftyGrid nainstalovat skrze Compozer, nicméně dle packagist.org jsou zde závislosti nette/addon-installer: , nette/extras a ty mi nechodí. Pochopil jsem, že je to díky jejich experimentálnímu stavu.
Lze toto řešit? Než jsem začal používat composer, tak NiftyGrid chodil. Jsou tedy doopravdy tyto balíky potřeba? Lze to nějak rozumně obejít?
PS: S Compozerem začínám a u zbylých balíků jsem neměl problém, tak se ptám zde. Možná blbě.