Stránkování
- radvis
- Začátečník | 110
Ahoj, pokouším se zprovoznit stránkování, ale nedaří se mi to.
Error: Call to a member function applyLimit() on a
non-object
presenter:
// retrieving data
$dataSource = $inzerat->select()->fetchAll();
// paging
$paginator = new Paginator;
$paginator->itemsPerPage = 15;
$paginator->itemCount = count($dataSource);
$paginator->page = $this->getParam('page');
$dataSource->applyLimit($paginator->length, $paginator->offset);
// paginator steps
$page = $paginator->page;
if ($paginator->pageCount < 2) {
$steps = array($page);
} else {
$arr = range(max($paginator->firstPage, $page - 3), min($paginator->lastPage, $page + 3));
$count = 4;
$quotient = ($paginator->pageCount - 1) / $count;
for ($i = 0; $i <= $count; $i++) {
$arr[] = round($quotient * $i) + $paginator->firstPage;
}
sort($arr);
$steps = array_values(array_unique($arr));
}
// sorting
$i = 1;
parse_str($this->order, $list);
foreach ($list as $field => $dir) {
$dataSource->orderBy($field, $dir === 'a' ? dibi::ASC : dibi::DESC);
$list[$field] = array($dir, $i++);
}
//$this->template->table = $table;
$this->template->order = $list;
$this->template->canonical = empty($list) ? NULL : $this->link('this', array('order' => NULL));
$this->template->currentOrder = $this->order;
$this->template->paginator = $paginator;
$this->template->steps = $steps;
$this->template->rows = $dataSource->getIterator();
$this->template->columns = $dataSource->getResult()->getInfo()->getColumnNames();
}
- Ondřej Mirtes
- Člen | 1536
Pokud metoda select() vrací DibiDataSource, tak na ni nesmíš volat fetchAll(), aby to DibiDataSource zůstal :))
- Jakub Lédl
- Člen | 55
Metoda fetchAll třídy DibiFluent vrací pole – metody logicky nejdou volat na čemkoli, co není objekt.
Správný zápis by s použitím DibiFluent vypadal asi takto:
<?php
$data = $inzerat->select('*')->from('název tabulky')->offset($paginator->offset)
->limit($paginator->length)->fetchAll();
?>
Editoval Jakub Lédl (27. 1. 2010 21:54)
- Jakub Lédl
- Člen | 55
radvis napsal(a):
To select() je funkce v modelu:)
Sakra :-) A vrací DibiDataSource (jinak omlouvám se, jestli tě ten problbečky popis nejak urazil :-D) ?
Pokud jo, tak prostě prvně volej applyLimit a pak teprv fetchAll.
- radvis
- Začátečník | 110
Neurazil … já jsem strašně pomalej:( a navíc jsem teď začal číst php dokumentaci od začátku. Zjístil jsem, že mám hodně nedostatků. Jinak už jsem to dal pryč to fetchAll(), ale je tu další problém
InvalidArgumentException
Argument passed to SmartCachingIterator::__construct must be an array or interface Iterator provider, NULL given.
- radvis
- Začátečník | 110
redhead napsal(a):
$datasource = $model->select(); $datasource->applyLimit($paginator->length, $paginator->offset); $result = datasource->fetchAll(); $this->template->rows = $result;
To asi není řešení tohodle
**InvalidArgumentException
Argument passed to SmartCachingIterator::__construct must be an array or interface Iterator provider, NULL given.**
nebo se pletu?
- radvis
- Začátečník | 110
Neznáte někdo dobrou literaturu na netu o php nejlépe o nette?
Další chyba když jsem tam dal $dataSource:
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 ‚APPLY LIMIT 1 0‘ at
line 1
Editoval radvis (28. 1. 2010 11:07)
- Ondřej Mirtes
- Člen | 1536
A řekl jsi paginatoru, kolik položek máš a kolik jich chceš na stránku mít?
- Ondřej Mirtes
- Člen | 1536
radvis: Ty se neztrácíš v Nette, ale v programování obecně. Nechci být zlý, ale neměl bys jen kopírovat kusy kódu, ale každej řádek, kterej napíšeš, bys měl zároveň chápat. Není to nic těžkého. Většina dotazů, které jsi tu položil, mi nepřijde taková, že by si s člověk nedokázal poradit sám. Nemůžeš se pořádně naučit framework, pokud neznáš základy samotného programování.