pomoc s rozběhnutím DataGrid

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
FOUS
Člen | 15
+
0
-

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

romansklenar
Člen | 655
+
0
-

Updatuj datagrid na revizi minamálně 36.

FOUS
Člen | 15
+
0
-

Dík, zkusím, já to dnes bral z přehledu komponenet na nette.org (ale až po bouřce) :)

romansklenar
Člen | 655
+
0
-

Asi bych tam měl dopsat, že je to pro verzi nette 0.8 …

FOUS
Člen | 15
+
0
-

Tak už to běhá. A ještě tam napište do požadavků nutnost podpory (zapnutí) php_mbstring.dll – na windows nebývá standardně zapnutá :) I když na to se dá přijít z Laděnky. Děkuji, jdu zkoumat konfigurační možnosti. Pěkná práce.

PytelCZ
Člen | 21
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

Do dataSourcu to bud dáte tak že si vložíte celý sql do $this->connection->dataSource(...) nebo ve vasem případě kdy používáte dibiFluent tak na konci zavoláte ...->toDataSource();

PetrP
Člen | 587
+
0
-

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;
}
deric
Člen | 93
+
0
-

je možné používat DataGrid s novým způsobem vykreslování šablon?

Honza Kuchař
Člen | 1662
+
0
-

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
+
0
-

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

pjoter
Člen | 118
+
0
-

Taky to teď zkouším rozběhnout na nette 0.9 ale vypadá to že to běží jen na 0.8

Panda
Člen | 569
+
0
-

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.

Saska
Člen | 23
+
0
-

Moc diky za ten tvuj trunk. Uz to s nima na nette 0.9 chodi.