visual paginator → stranky = pocet novinek
- mordare
- Začátečník | 117
Nzdar lidi už si tu připadadám jako pravidelný přispivatel, ale s NETTE
teprve začínám. No proste vypisuju novinky (viz kod) z databaze a chtel sem
aby když jich bude moc se to rozdělilo na stranky. použil sem visual
paginator a dopadlo to že počet stranek = počrt novinek a navic na každe
strance jsou všechny novinky.
Kod je zde můžete
někdo poradit ať je to správně? Tedy na každe strance jen určity počet
novinek (zatim sem to schvalne nastavoval na 1 aŤ můžu vyskoušet jestli
to jede)?
- westrem
- Člen | 398
V prvom rade zbytocne kladies query naviac aj v actionNews
,
celu tu metodu mozes zmazat.
K render metode, oprav ju takto:
public function renderNews()
{
$model = new DatabaseManager;
$vp = $this['vp'];
$paginator = $vp->paginator;
$paginator->itemsPerPage = 6; // istotne nie 1 .. to by ti davalo jednu novinku na stranu .. daj si tam ake cislo chces
$paginator->itemCount = $model->countNews();
$news = $model->findNews($paginator->offset, $paginator->itemsPerPage);
$this->template->news = $news;
}
A modelova metoda:
public function findNews($offset, $limit)
{
return dibi::query("SELECT * FROM news ORDER BY id DESC LIMIT %i OFFSET %i", $limit, $offset)->fetchAll();
}
Este pre istotu, neviem ako vyzera tabulka s novinkami, ale radsej zistuj pocet takto:
public function countNews()
{
return dibi::fetchSingle("SELECT COUNT(*) FROM news");
}
- toka
- Člen | 253
Tuším, že fetchAll()
přímo podporuje LIMIT
a
OFFSET
, takže lze zapsat takto:
public function findNews($offset, $limit)
{
return dibi::query("SELECT * FROM news ORDER BY id DESC")->fetchAll($limit, $offset);
}
A countNews
je také zbytečné – lze použít
$count = count($result)
, kde $result
je výsledek
dotazu bez aplikace limitu a offsetu :-D
Editoval toka (22. 11. 2010 23:58)
- westrem
- Člen | 398
toka napsal(a):
Tuším, že
fetchAll()
přímo podporujeLIMIT
aOFFSET
, takže lze zapsat takto:public function findNews($offset, $limit) { return dibi::query("SELECT * FROM news ORDER BY id DESC")->fetchAll($limit, $offset); }
A
countNews
je také zbytečné – lze použít$count = count($result)
, kde$result
je výsledek dotazu bez aplikace limitu a offsetu :-D
Mal to dobre tak ako to mal, resp. ako som to upravil. Pouzitie
->fetchAll($limit, $offset)
je imho jedna z mala nepeknych
veci, ktore v dibi su a radsej by byt nemali.
V tomto pripade sa ti totiz spravy select na vsetko a az v PHPku sa ti v dibi odseparuje to co chces, ziaden limit a offset do DB nejde = massive overhead na prenasanie dat z DB.
Preto je lepsie polozit separatny dotaz s COUNT(*)
a potom ten,
co realne v query vyuziva limit a offset – naplno vyuzivas silu DB a jej
indexov a klucov a neprenasas overhead na PHP.