pomoc s rozběhnutím DataGrid
- FOUS
- Člen | 15
Snažím se implementovat DataGrid, zatím jen aby se to vůbec rozběhlo, ale…
Presenter:
<?php
class AdminUserRegisterPresenter extends BasePresenter
{...
public function renderDefault() {
$this->template->grid = $this->getComponent('user_grid');
...
}
protected function createComponent($name)
{
switch ($name) {
case 'user_grid':
$grid = new DataGrid;
$model = new AdminUserRegisterModel();
$grid->bindDataTable($model->getDataSource('user_profile'));
$this->addComponent($grid, $name);
return;
case 'user_register' :
$form = new AppForm ( $this, $name );
...
?>
pak model:
<?php
class AdminUserRegisterModel extends Object {
public function getDataSource($table) {
return dibi::dataSource ( 'SELECT * FROM %n', $table );
}
...
}
?>
a šablona default.phtml:
<?php
...
<div>
@{?$grid->render()}
</div>
...
?>
Laděnka mi píše:
Cannot override final method Control::offsetSet()
Line 40: class DataGrid extends Control implements ArrayAccess, INamingContainer
verze PHP 5.2.1:
Nette Framework 0.9 (revision 440 released on 2009/07/20 16:25:45)
Může mě někdo prosím nasměrovat. Děkuji
- PytelCZ
- Člen | 21
Mam dotaz jestli pres datagrid jde udelat toto: Mam tabulku ve ktere mam klienty a pak mam druhou, kde mam IP adresy klientu (jeden klient jich muze mit vic) a potrebuju zobrazit v jedne tabulce jak veci z tabulky klientu (jmeno, prijmeni, apod), tak i do dalsiho sloupce vsechny IP adresy klienta. Normalne to mam udelane klasicky pres foreach nad vsema klientama a pak pres druhy sql dotaz vypisu IPcka do tabulky. Ale jak to nejak zakomponovat do datagridu (nemusi jit pres ten sloupec sortovat). Diky za nejake napady a kousky kodu. S nette teprv zacinam…
- Ondřej Mirtes
- Člen | 1536
PytelCZ napsal(a):
Mam dotaz jestli pres datagrid jde udelat toto: Mam tabulku ve ktere mam klienty a pak mam druhou, kde mam IP adresy klientu (jeden klient jich muze mit vic) a potrebuju zobrazit v jedne tabulce jak veci z tabulky klientu (jmeno, prijmeni, apod), tak i do dalsiho sloupce vsechny IP adresy klienta. Normalne to mam udelane klasicky pres foreach nad vsema klientama a pak pres druhy sql dotaz vypisu IPcka do tabulky. Ale jak to nejak zakomponovat do datagridu (nemusi jit pres ten sloupec sortovat). Diky za nejake napady a kousky kodu. S nette teprv zacinam…
S datagridem ti neporadím, ale vytáhnout klienty s jejich IP adresama jde
na jeden dotaz přes left join
, group by
a
group_concat
:)
- jarks
- Člen | 94
PytelCZ napsal(a):
…potrebuju zobrazit v jedne tabulce jak veci z tabulky klientu (jmeno, prijmeni, apod), tak i do dalsiho sloupce vsechny IP adresy klienta…
Musíte vyrobit komplexnější SQL dotaz (nebo by možná šlo nějak to nacpat do výsledného dataSource, to nevím). V modelu by mohlo být něco jako:
public function nafutrujDataGrid() {
return $this->connection->select('
CONCAT(prijmeni," ",jmeno) AS jmeno,
GROUP_CONCAT(ipadresa SEPARATOR ", ") AS ipadresa')
->from('ipadresy')
->leftJoin('klienti') -> on('klienti_id = klienti.id_klienti')
->groupBy('id_klienti');
}
Než to použijete, zkuste si to nasucho v okénku Admineru, nebo phpMyAdminu, nebo co používáte pro administraci databáze.
Editoval jarks (29. 7. 2009 8:22)
- PytelCZ
- Člen | 21
Diky za odpovedi, je mi jasne ze to jde pres jeden SQL dotaz, ale urcite se
clovek dostane do situace, kdyz bude potrebovat tech dotazu vice. Jde mi o to,
jestli to jde pres datagrid nejak resit…
A dalsi dotaz je jak dostat napr. id zpracovavaneho zaznamu tabulky do odkazu
(kdyz chci mit na prijmeni klienta odkaz na kartu s jeho udajema). Cetl jsem ze
by to melo jit nejak pres formatCallback[], ale nefunguje mi to :-(
- PetrP
- Člen | 587
PytelCZ napsal(a):
Diky za odpovedi, je mi jasne ze to jde pres jeden SQL dotaz, ale urcite se clovek dostane do situace, kdyz bude potrebovat tech dotazu vice. Jde mi o to, jestli to jde pres datagrid nejak resit…
A dalsi dotaz je jak dostat napr. id zpracovavaneho zaznamu tabulky do odkazu (kdyz chci mit na prijmeni klienta odkaz na kartu s jeho udajema). Cetl jsem ze by to melo jit nejak pres formatCallback[], ale nefunguje mi to :-(
funkce volané přes formatCallback[]
dostávají jako první
parametr value toho kde jsou volany a jako druhy cely rádek:
$grid['neco']->formatCallback[] = function ($value, $row) {
return 'řádek má id '.$row->id;
}
- Honza Kuchař
- Člen | 1662
Ano, je. Ale je potřeba používat zavináčovou magii. Příklad je v komponentě TabControl, kterou dnes přidám sem na fórum. Funkční ukázka zde: http://projekty.mujserver.net/…cument_root/
- Saska
- Člen | 23
romansklenar napsal(a):
Updatuj datagrid na revizi minamálně 36.
Prosím proto o pomoc. Je to sice trochu off-topic, ale porad nemuzu zjistit, jak se z toho google code stahne nejnovejsi verze. Snažím se totiž rozběhnout romanuv datagrid na Nette 0.9 a tohle je moje jedina sance.
Predem dik
- Panda
- Člen | 569
Saska napsal(a):
Prosím proto o pomoc. Je to sice trochu off-topic, ale porad nemuzu zjistit, jak se z toho google code stahne nejnovejsi verze. Snažím se totiž rozběhnout romanuv datagrid na Nette 0.9 a tohle je moje jedina sance.
Predem dik
Je na to potřeba software pro práci s SVN, třeba TortoiseSVN. Podporu pro SVN má také snad každé lepší IDE.
Pokud by s tím někdo měl problémy a nechtělo se mu s tím patlat, tak zde je trunk revize 50: datagrid-trunk.zip.