Hello, Ok, to avoid extending the class I decided to put this code in my model method:
$paginator = Zend_Paginator::factory(...); $paginator->setCurrentPageNumber($page); return $page > $paginator->count() ? new ArrayObject : $paginator; Of course it is needed to execute additional SQL query (SELECT COUNT(1) AS `zend_paginator_row_count`), but it works fine, thanks for the tip. Ragards, Bartosz. 2010/5/18 Matthew Ratzloff <[email protected]>: > Yep, this was intentional behavior. Luckily, it's easy enough to provide > your own functionality by extending the class. The method is quite short: > /** > * Brings the page number in range of the paginator. > * > * @param integer $pageNumber > * @return integer > */ > public function normalizePageNumber($pageNumber) > { > if ($pageNumber < 1) { > $pageNumber = 1; > } > > $pageCount = $this->count(); > > if ($pageCount > 0 and $pageNumber > $pageCount) { > $pageNumber = $pageCount; > } > > return $pageNumber; > } > -Matt > > On Mon, May 17, 2010 at 11:41 AM, Aleksey Zapparov <[email protected]> > wrote: >> >> Hello, >> >> Returning last page if requested page number is higher than total pages >> amount is some kind of time-defined standard. More than that, normally >> user should not enter page number manually. >> >> >> 2010/5/17 Bartosz Maciaszek <[email protected]>: >> > Hi all, >> > >> > I just had a bit of work to do with Zend_Paginator (nb. with >> > Zend_Db_Table_Select) and I noticed some weird behaviour. Let's take >> > this simple code as an example: >> > >> > $paginator = Zend_Paginator::factory($table->select()->where('foo is >> > null')); >> > $paginator->setCurrentPageNumber(1); >> > >> > If the query returns more than default number of rows in Paginator >> > (10) then I get Iterator with 10 first elements and that's quite all >> > right. >> > >> > Now, imagine that query returns 100 rows (which makes 10 pages in >> > default configuration). User requests page number 20: >> > >> > $paginator->setCurrentPageNumber(20); >> > >> > As a result I get 10 *last* rows (exactly the same when requesting >> > 10th page). My expectation is to get empty Iterator, because page >> > number 20 does not exists. >> > >> > I dig into the code and I found, that's because of >> > normalizePageNumber() method which changes my requested 20 into 10. >> > >> > Is that behaviour really helpful? I think it should be parametrized >> > because sometimes (i.e. in my case - fetching next pages while >> > scrolling the page down) it completely distorts the effect - at the >> > end I get last page every time I request the next one. >> > >> > What do you think? >> > >> > Regards, >> > Bartosz >> > >> > -- >> > Never regret. If it's good - it's wonderful. If it's bad - it's >> > experience. >> > >> >> >> >> -- >> Sincerely yours, >> Aleksey V. Zapparov A.K.A. ixti >> FSF Member #7118 >> Mobile Phone: +34 617 179 344 >> Homepage: http://www.ixti.ru >> JID: [email protected] >> >> *Origin: Happy Hacking! > >
