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!
>
>

Reply via email to