Stránkování
- weckho
- Člen | 94
Ahoj,
zkoušel jsem si na svůj web implementovat stránkování z Quick Startu, ale jsou tam SQL dotazy přímo v presentru. Já je mám v modelu a nevím, jak to zkloubit. Pro příklad – v příkladu je v presentru:
// retrieving data
$query = $this->db->select('*')
->from($table)
->offset($this->page * $rowsPerPage)
->limit($rowsPerPage);
Já mám v modelu:
public function findAll()
{
return $this->db->select('%n.*, COUNT(%n) AS `pocetKomentaru`', $this->table, $this->commentsTable . '.id_news')
->from($this->table)
->leftJoin($this->commentsTable)
->on('%n = %n', $this->table . '.id', $this->commentsTable . '.id_news')
->groupBy($this->table . '.id');
}
Nevím si s tím rady.. Mohl by mi někdo nastínit, jak to vyřešit?
Děkuji moc za pomoc.
- weckho
- Člen | 94
Jaký je vlastně rozdíl ve VisualPaginatoru a v tom stránkovači z QuickStartu? Myslel jsem celou dobu, že se jedná o dvě rozdílné věci – že VisualPaginator obsah nastránkuje jen vizuálně (celý obsah je ve zdrojovém kódu, ale JavaScriptem se zobrazí jen daný „výřez“).
Pokud tomu tak není, je potřeba VisualPaginator nejdříve stáhnout, nebo již je součástí nette? A pokud je potřeb jej stáhnout, kde by se měla v knihovnách složka nacházet?
Děkuji moc za doplňující info.
- Honza Marek
- Člen | 1664
VisualPaginator je v Nette\Extras, čili není součástí jádra Nette. A je to vpodstatě ten stránkovač s quick startu, ale novější a lepší verze.
- _Martin_
- Generous Backer | 679
weckho napsal(a):
Mohl by mi prosím ještě někdo poradit, kam mám ten stažený VisualPaginator hodit? Když ho dám do libs/Nette, tak mi to nejede (Class ‚VisualPaginator‘ not found).
Děkuji.
Možná (nejsem si jist) RobotLoader tuhle složku ignoruje (takže pokud
nepomůže následující krok, zkus změnit umístění knihovny třeba na
libs/extras
), ale tak či tak, vymazal jsi dočasné soubory
RobotLoaderu?
- weckho
- Člen | 94
Stále nemohu stránkování rozchodit. Stránka mi píše chybu:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'COUNT APPLY LIMIT 3 0' at line 1
Metoda v presentru vypadá následovně:
public function renderDefault()
{
$this->template->title = "Titulek webu";
$novinka = new Novinky;
$dataSource = $novinka->findAll()->orderBy('date', 'DESC');
$vp = new VisualPaginator($this, 'paginator'); //vytvoříme komponentu s názvem `paginator`
$vp->paginator->itemsPerPage = 3; //nastavíme zobrazení tří položek na stránku
$vp->paginator->itemCount = $dataSource->count(); //řekneme paginátoru kolik máme celkem položek
$this->template->novinky = $dataSource->applyLimit($vp->paginator->itemsPerPage, $vp->paginator->offset)->fetchAll(); //získáme požadovaná data
}
A metoda findAll v modelu následovně:
public function findAll()
{
return $this->db->select('%n.*, COUNT(%n) AS `pocetKomentaru`', $this->table, $this->commentsTable . '.id_news')
->from($this->table)
->leftJoin($this->commentsTable)
->on('%n = %n', $this->table . '.id', $this->commentsTable . '.id_news')
->groupBy($this->table . '.id');
}
Děkuji za pomoc.