% if ( $opt{'total'} != $opt{'num_rows'} && $opt{'maxrecords'} ) { % % unless ( $opt{'offset'} == 0 ) { % $cgi->param('offset', $opt{'offset'} - $opt{'maxrecords'}); Previous % } % % my $page = 0; % my $prevpage = 0; % my $over = 0; % my $step = $opt{total} / 10; # 10 evenly spaced % for ( my $poff = 0; $poff < $opt{total}; $poff += $opt{maxrecords} ) { % $page++; % % next unless % $page <= 4 #first four % || $page >= ( $opt{total} / $opt{maxrecords} ) - 3 #last four % || abs( ($opt{offset}-$poff) / $opt{maxrecords} ) <= 3 #w/i 3 of current % || $poff > $over # evenly spaced % ; % % $over += $step if $poff > $over; % % if ( $opt{'offset'} == $poff ) { <% $page %> % } else { % $cgi->param('offset', $poff); % % if ( $page > $prevpage+1 ) { ... % } <% $page %> % } % % $prevpage = $page; % % } % % unless ( $opt{'offset'} + $opt{'maxrecords'} > $opt{'total'} ) { % $cgi->param('offset', $opt{'offset'} + $opt{'maxrecords'}); Next % } % % $cgi->param('offset', $orig_offset); #so future $self_url invocations don't advance a page % % } <%init> my %opt = @_; my $orig_offset = $opt{'offset'};