VisualPaginator Error: Object of class Statement could not be converted to int
- Nevinho
- Člen | 77
Zdravím, chci na svém webu použít stránkování a nějak mi to nefunguje.
Model:
…
<?php
public function getAll($offset, $limit)
{
return$this->connection->select('*')->from('financni_informace')->fetchAll($offset, $limit);
}
public function countFinance()
{
return $this->connection->query("SELECT COUNT(*) FROM financni_informace");
}
?>
Presenter:
..
<?php
public function renderVypis() {
$strankovani = new VisualPaginator($this, 'strankovani');
$paginator = $strankovani->getPaginator();
$paginator->itemsPerPage = 10;
$paginator->itemCount = $this->finance->countFinance(); // chyba na tomto řádku!!!!
$rows = $this->finance->getAll($strankovani->paginator->offset, $strankovani->paginator->itemsPerPage);
$this->template->rows = $rows;
}
?>
Template:
<?php
{block #content}
<h1 n:block="title">Finanční informace</h1>
<table class="grid">
<tr>
<th>Likvidita</th>
<th>Aktiva</th>
<th>Cizí kapitál</th>
<th>Mzdové náklady</th>
<th>Průměrná mzda</th>
<th>Odpisy</th>
<th>Obrat</th>
<th>Výkony</th>
</tr>
{foreach $finance as $fin}
<tr>
<td>{$fin->id_firmy}</td>
<td>{$fin->rok}</td>
<td>{$fin->zakladni_kapital|number}</td>
<td>{$fin->zisk|number}</td>
<td>{$fin->zadluzenost|number:1}</td>
{/foreach}
</table>
{control paginator}
{/block}
?>
Zobrazovaná chyba: Object of class Statement could not be converted to int
Za případnou radu děkuji.
Editoval Nevinho (19. 11. 2012 19:16)
- ViPEr*CZ*
- Člen | 817
Když jsem to psal, tak tam nebyla!!!
public function countFinance()
{
return $this->connection->query("SELECT COUNT(*) FROM financni_informace");
}
Toto je špatně… díval jsi se už co ti todle vrací… ne e… protože jinak by jsi se nemohl zeptat. Zkus se mrknout na dokumentaci prosím ;-)
public function countFinance()
{
return $this->connection->table("financni_informace")->count("*");
}
- Nevinho
- Člen | 77
Dík moc :-). Ja projíždím dokumentaci pořád, ale je toho na mě nějak hodně naráz.
Jak by ještě vypadala ta metoda getAll()?
Ja to mam takhle:
<?php
public function getAll($offset,$limit)
{
return$this->connection->table("financni_informace");
}
<?
To by mělo fungovat asi správně, ale pak je asi problém někde tady:
<?php
$rows = $this->finance->getAll($strankovani->paginator->offset, $strankovani->paginator->itemsPerPage);
$this->template->rows = $rows;
?>
Protože mi to pak hlásí že v šabloně neexistuje proměnná finance.
Díky za ochotu
- Nevinho
- Člen | 77
Ja ale používám Nette/Database
nebo moc dobře nechápu, kam by se tento kód vložil, protože když dám:
<?php
$rows = $this->finance->getAll($strankovani->paginator->offset, $strankovani->paginator->itemsPerPage)->fetchAll();
?>
tak mi to napíše že volám nesprávnou funkci fetchAll()
Editoval Nevinho (19. 11. 2012 21:14)
- ViPEr*CZ*
- Člen | 817
Mně přijde, že jste to vůbec nepochopil. Přijde mi, že používáš jen
CTRL+C a CTRL+V a bude to fungovat. A za hodinu je tu nové vlákno úplně se
stejným kontextem, ale jinou problematikou… chjo :-(
Při výběru položek z DB se dá určit limit (viz. dokumentace k LIMIT a
v Nette\Database je to metoda limit třídy Selection a opět dokumentace).
Třída paginátoru přesně vrací ty dvě čísla co jsou potřebný pro
metodu limit. Přečíst v dokumentaci a dosadit. Pak si jen nechte vrátit
instanci Selection, která má nastavenou metodu limit a uložte si to do
proměnný například rows a pošlete do šablony. Nad proměnnou rows se dá
iterovat (provést metoda foreach), takže už pak jednoduše v šabloně
projdete všechny řádky.
Editoval ViPEr*CZ* (19. 11. 2012 22:32)