Potíž s VisualPaginatorem
- neologyc
- Člen | 13
Dobrý den,
rád bych Vás poprosil o radu, jak zprovoznit VisualPaginator, zkoušel jsem
nějaké návody tady na fóru , ale už se mi to pár hodin nedaří dát
dohromady.
V Presenteru mám tuto metodu:
<?php
public function renderChciPujcku($param) {
$dataSource = dibi::query('SELECT * FROM [chcipujcku] ORDER BY [date]'); // vyhodi chybu :Call to undefined method DibiResult::applyLimit().
$dataSource = $this->db->select('*')->from('chcipujcku'); // vyhodi MySQL dotaz : SELECT * FROM `chcipujcku` APPLY LIMIT 1 0 , ktery je v MySQL spatne
//->orderBy('date')->desc()
//->execute()
//;
$paginator = $this['page']->paginator;
$paginator->itemsPerPage = 1;
$paginator->itemCount = count($dataSource);
$dataSource->applyLimit($paginator->length, $paginator->offset);
$this->template->articles = $dataSource->fetchAll();
}
protected function createComponentPage() {
return new VisualPaginator;
}
?>
snazim se pomoci dibi ziskat data z MySQL tabulky chcipujcky, bohuzel oba moje pokusy jak ziskat data skonci chybou (chyby pisu v kodu, jsou zakomentovane za obema pokusy jak ziskat data z DB).
Nejsem si uplne jisty na jaky format dat muzu pouzit metodu ApplyLimit.
Diky za pomoc.
Jarda
- JakubKohout
- Člen | 92
Například takto
$dataSource = dibi::select('[b.date],[b.main],[u.nick],[u.id] as [subject_id]')
->from('[users_book] b')
->innerJoin('[users] u')->on('[b.user_id] = [u.id]')
->where('[b.subject_id] = %i',$id)
->orderBy('[b.date] DESC');
//->toDataSource();
$this['visualPaginator']->paginator->itemsPerPage = 10; //nastavíme zobrazení deseti položek na stránku
$this['visualPaginator']->paginator->itemCount = $dataSource->count(); //řekneme paginátoru kolik máme celkem položek
$template->messages = $dataSource->Limit($this['visualPaginator']->paginator->offset . ','. $this['visualPaginator']->paginator->itemsPerPage)
->fetchAll(); //získáme požadovaná data
Je to poupravené aby to nevyužívalo DataSource, protože když jsem ho použil tak jsem měl problém s pořadím (teď si nejsem jistej jestli to nebyla podmínka WHERE).
- Ondřej Mirtes
- Člen | 1536
Já bych to udělal takto:
public function renderChciPujcku($param) {
$dataSource = dibi::dataSource('SELECT * FROM [chcipujcku] ORDER BY [date]');
$paginator = $this['page']->paginator;
$paginator->itemsPerPage = 1;
$paginator->itemCount = count($dataSource);
$dataSource->applyLimit($paginator->length, $paginator->offset);
$this->template->articles = $dataSource->fetchAll();
}
Ty chyby ti dibi vyhazuje, protože ho špatně používáš :) dibi::query ti vrací objekt DibiResult (což není DibiDataSource), který metodu applyLimit nemá.
- neologyc
- Člen | 13
Ahoj Ondro,
dekuji za radu, kazdopadne stale nemuzu prijit na chybu, udelal jsem to podle
tveho navodu a stale se mi vypisuje chyba:
Call to undefined method dibi::datasource()
Coz je divne, protoze, podle API dibi , by dibi:: melo mit metodu dataSource() – https://api.dibiphp.com/1.3/dibi.html#…
}
<?php
public function renderChciPujcku($param)
{
dibi::connect(Environment::getConfig('database'));
$dataSource = dibi::dataSource('SELECT * FROM [chcipujcku] ORDER BY [date]');
$paginator = $this['page']->paginator;
$paginator->itemsPerPage = 1;
$paginator->itemCount = count($dataSource);
$dataSource->applyLimit($paginator->length, $paginator->offset);
$this->template->articles = $dataSource->fetchAll();
}
?>
napadá tě jak tohle vyřešit?
Ondřej Mirtes napsal(a):
Já bych to udělal takto:
public function renderChciPujcku($param) { $dataSource = dibi::dataSource('SELECT * FROM [chcipujcku] ORDER BY [date]'); $paginator = $this['page']->paginator; $paginator->itemsPerPage = 1; $paginator->itemCount = count($dataSource); $dataSource->applyLimit($paginator->length, $paginator->offset); $this->template->articles = $dataSource->fetchAll(); }
Ty chyby ti dibi vyhazuje, protože ho špatně používáš :) dibi::query ti vrací objekt DibiResult (což není DibiDataSource), který metodu applyLimit nemá.
- Ondřej Mirtes
- Člen | 1536
Netuším, nemáš nějakou prehistorickou verzi?
Tip: rozhodně se nepřipojuj k databázi v render* metodě, dej to aspoň do bootstrapu.
- neologyc
- Člen | 13
Ondřej Mirtes napsal(a):
Netuším, nemáš nějakou prehistorickou verzi?
Tip: rozhodně se nepřipojuj k databázi v render* metodě, dej to aspoň do bootstrapu.
Prvne dekuji za namet se starou knihovnou, nevim jak to , ale mel jsem minified verzi dibi knihovny z ledna 2009, nova verze uz tento problem vyresila.
Ohledne pripojeni k DB, to jsem jen prihodil k render metode, aby slo videt, jak se pripojuju k DB, samozrejme dam do bootstrapu.
Dekuju jeste jednou, Jarda