Efektivní vypsání tabulky při dibi::query

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

Zdravím,
mám jeden dotaz,
pokud si pomocí dibi fetchnu result do pole

<?php
$result = dibi::query('SELECT * FROM  [tbl_seminars]');
$all = $result->fetchAll();
?>

Jakým elegantním způsobem bych jej v Nette mohl vypsat do tabulky?

dříve jsem to dělal níže uvedeným způsobem a toho bych se právě díky Nette chtěl zbavit:)

Díky za každou radu.

<?php
while(is_array($data = mysql_fetch_array($dotaz)))
{

$id = $data['id_uzivatele'];
$nick = $data['nick'];
$mail = $data['mail'];

echo "<tr>";
echo "<td>$nick</td>";// \n for new line in html code
echo "<td>$mail</td>";
echo "<td><a href=\"user_details.php?id=$id\" title=\"zobrazi detail\" ><img src=\"./img/b_edit.png\" alt=\"edit\" /></a></td>";
echo "<td><input type=\"checkbox\" name=\"action[]\" value=\"$id\"></td>\n";
echo "</tr>";
}
echo "</table>\n";

mysql_free_result($dotaz);
mysql_close($spojeni);
}

?>
stpnkcrk
Generous Backer | 188
+
0
-

V presenteru (to, že by komunikace s DB měla být v aplikaci odsunuta do modelu teď neřešíme)

<?php
// uvnitř nějaké render metody, pravděpodobně
$this->template->data = dibi::fetchAll('SELECT * FROM  [tbl_seminars]');
?>

…a následně potom v šabloně

<table>
	<tr n:foreach="$data as $row">
		<td>{$row->nick}</td>
		<td>{$row->mail}</td>
		<td><a href="user_details.php?id={$row->id}" title="zobrazi detail" ><img src="./img/b_edit.png" alt="edit" /></a></td>
		<td><input type="checkbox" name="action[]" value="{$row->id}"></td>
	</tr>
</table>

Takhle nějak jsi to myslel? Příklad používá i relativně nové vlastnsti přes n:... atributy.

redhead
Člen | 1313
+
0
-

co sem si všim, tak symmetry nepoužívá nette aplikaci, takže na bastlení nějak takhle:

$result = dibi::query('SELECT * FROM  [tbl_seminars]');
$all = $result->fetchAll();
foreach($all as $row)
{
	echo "<tr>";
	echo "<td>".$row->nick."</td>";// \n for new line in html code
	echo "<td>".$row->mail."</td>";
	echo "<td><a href=\"user_details.php?id=".$row->id."\" title=\"zobrazi detail\" ><img src=\"./img	/b_edit.png\" alt=\"edit\" /></a></td>";
	echo "<td><input type=\"checkbox\" name=\"action[]\" value=\"".$row->id."\"></td>\n";
	echo "</tr>";
}

Pokud ti něco nebrání využívat celé nette, doporučuji se na to podívat. Ulehčí ti to strašně moc práce a nervů.

zakjan
Člen | 9
+
0
-

DataGrid

symmetry
Člen | 71
+
0
-

redhead
Diky, to je presne co jsem myslel, jinak nette bych vazne moc rad vyuzival cele, jen chvili bude trvat, nez prostuduji MVC a dalsi veci.
Kazdopadne takto mi nette take pomaha..
Jinak co se tyce datagrid, tak to by to bylo urcite nejlepsi, bohuzel s ni nemam v nette zkusenost(mozna tak v C#:), takze pokud by nekdo poradil, kde to pekne nastudovat, budu rad.

Ondřej Mirtes
Člen | 1536
+
0
-

symmetry napsal(a):

redhead
Diky, to je presne co jsem myslel, jinak nette bych vazne moc rad vyuzival cele, jen chvili bude trvat, nez prostuduji MVC a dalsi veci.
Kazdopadne takto mi nette take pomaha..
Jinak co se tyce datagrid, tak to by to bylo urcite nejlepsi, bohuzel s ni nemam v nette zkusenost(mozna tak v C#:), takze pokud by nekdo poradil, kde to pekne nastudovat, budu rad.

DataGrid addon

symmetry
Člen | 71
+
0
-

Primo na tu komponentu jsem koukal, jenze problem bude nejspise v tom, ze prozatim pri vytvareni nepouzivam navrhove vzory. Moje jednoducha aplikace neni vytvarena jako ciste NETTE app.
Proto jsem treba nepouzil veci jako „tovarna na objekty“ ani presenter, ktere jsou zminovany prave na vyse uvedenem odkazu.
Z tohoti bych pochopil to, ze zavolam metodu
createComponent(‚grid‘);

ale co pak s ni dale?

Omlouvam se, pokud vam moje otazky pripadaji trivialni, NETTE je ale opravdu muj prvni framework.

<?php
protected function createComponent($name)
{
    switch ($name) {
    case 'grid':
        $grid = new DataGrid;
        $model = new Model;
        $grid->bindDataTable($model->getDataSource('customers'));
        $this->addComponent($grid, $name);
        return;
    }
}
?>
redhead
Člen | 1313
+
0
-

nikdy jsem datagrid nepoužil (já vím, ostuda! :) ) ale myslím, že bez nette app ti to nepůjde, páč využívá signály a další appovské featury. Ale nevím