VisualPaginator Error: Object of class Statement could not be converted to int

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

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

Ukaž tuto funkci: countFinance()

Nevinho
Člen | 77
+
0
-

tato metoda je v modelu, v dotazu, zkus se mrknout líp :-)

ViPEr*CZ*
Člen | 817
+
0
-

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

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

ViPEr*CZ*
Člen | 817
+
0
-

Ta metoda getAll co je v prvním příspěvku je ok. No jasně… bodejď by to nehlásilo… nikde nevidím
$this->template->finance.

Nevinho
Člen | 77
+
0
-

Už mi to funguje, akorát se vypíšou pořád všechny data z tabulky a neomezí se to jen na těch 10.

Nevíš kde může být problém?

llook
Člen | 407
+
0
-
->limit($limit, $offset)->fetchAll();
Nevinho
Člen | 77
+
0
-

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

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)