We've used a brute force method similar to this in a recent
project:
- Pass (in a hidden field) the CurrentPage Number for each
display
- Generate the entire list of "results"
- Take a slice from the list to just send the correct
entries
This is simple to code, and makes it easier to let the user
jump straight to a particular page, and to choose how many
results to see on each page (the bit of code below doesn't
do either of these).
my $CurPage = CGI::param('CurrentPage');
if (defined CGI::param('NextPage')){
$CurPage++;
} elsif (defined CGI::param('PrevPage')){
$CurPage--;
}
print qq{
<input type="hidden" name="CurrentPage" value="$CurPage">
};
for my $Entry (@Entries[$CurPage * 5 .. $CurPage * 5 + 4]){
# Show each entry however you normally would
}
print '<a href="myscript.cgi?Prev=1">Previous</a>' if $CurPage;
print '<a href="myscript.cgi?Next=1">Next</a>'
unless $CurPage * 5 + 5 >= @Entries;
Some notes:
- The slice line looks a little goofy (adding 4 when we
want 5 per page), I could write it as "+5 - 1" (and
when we have a variable number of results, we do) but
whatever...
- This is pretty wasteful (we do the entire database
lookup for each page, then throw away what we don't
want)...
Hope this helps a little...
Russ