How's this Wil?
my ($hits, $limit, $max, $span) = (shift, 8, $per_page, "");
my $half = $limit / 2;
my $total = int(($hits/$max) + 1);
die "invalid page" if ($page > $total);
my $start = ($page > $half) ? ($page - $half) : (1);
my $finish = ($page + $half > $total) ? ($total) : ($page + $half);
my $i = ($finish - $start);
(($finish - $page < $page - $start) ? ($start += $i - $limit) : ($finish += $limit - $i)) if (($i < $limit) and ($limit < $total));
$span .= ($page != 1) ? &link(1, "<<") . &link(($page - 1 or 1), "<") : qq|<< < |;
($span .= ($_ == $page) ? "[$_] " : &link($_)) for ($start .. $finish);
$span .= ($page != $total) ? &link($page + 1, ">", "next") . &link($total, ">>") : qq|> >> |;
return $span;
}
sub link {
my ($p, $d) = @_;
$d ||= $p;
return qq|<a href="query.cgi?$string&pg=$p">$d</a> |;
}
(note that this code is from my search engine and won't work in the file browsing script posted earlier)
--Philip
Links 2.0 moderator
Code:
sub span { my ($hits, $limit, $max, $span) = (shift, 8, $per_page, "");
my $half = $limit / 2;
my $total = int(($hits/$max) + 1);
die "invalid page" if ($page > $total);
my $start = ($page > $half) ? ($page - $half) : (1);
my $finish = ($page + $half > $total) ? ($total) : ($page + $half);
my $i = ($finish - $start);
(($finish - $page < $page - $start) ? ($start += $i - $limit) : ($finish += $limit - $i)) if (($i < $limit) and ($limit < $total));
$span .= ($page != 1) ? &link(1, "<<") . &link(($page - 1 or 1), "<") : qq|<< < |;
($span .= ($_ == $page) ? "[$_] " : &link($_)) for ($start .. $finish);
$span .= ($page != $total) ? &link($page + 1, ">", "next") . &link($total, ">>") : qq|> >> |;
return $span;
}
sub link {
my ($p, $d) = @_;
$d ||= $p;
return qq|<a href="query.cgi?$string&pg=$p">$d</a> |;
}
(note that this code is from my search engine and won't work in the file browsing script posted earlier)
--Philip
Links 2.0 moderator