# new
sub new
{
my $proto = shift;
my $class = ref ($proto) || $proto;
my $self = {
cnt => 0,
skip => 0,
start => 0,
page => 1,
limit => 999,
uri => '',
template_next => '>',
template_prev => '<',
template_page => '%PAGE%',
template_this => '%PAGE%',
template_delim => "\n",
};
bless ($self, $class);
return $self;
}
# html
sub html
{
my $self = shift;
my $html = '';
my $start = 1;
my $tpages = &total_pages($self);
my $page = $self->{'page'};
# previous
if ($page > 1)
{
my $tmp = '';
my $prev = $page - 1;
$tmp = $self->{'template_prev'};
$tmp =~ s/%URI%/$self->{'uri'}/;
$tmp =~ s/%PAGE%/$prev/;
$html .= $tmp . $self->{'template_delim'};
}
# page list
foreach my $p ($start .. $tpages)
{
my $tmp = '';
if ($p == $page)
{
$tmp = $self->{'template_this'};
$tmp =~ s/%URI%/$self->{'uri'}/;
$tmp =~ s/%PAGE%/$p/g;
}
else
{
$tmp = $self->{'template_page'};
$tmp =~ s/%URI%/$self->{'uri'}/;
$tmp =~ s/%PAGE%/$p/g;
}
$html .= $tmp . $self->{'template_delim'};
}
# next
if ($page < $tpages)
{
my $tmp = '';
my $next = $page + 1;
$tmp = $self->{'template_next'};
$tmp =~ s/%URI%/$self->{'uri'}/;
$tmp =~ s/%PAGE%/$next/;
$html .= $tmp;
}
return $html;
}
# template_next
sub template_next
{
my $self = shift;
$self->{'template_next'} = shift if $_[0];
}
# template_prev
sub template_prev
{
my $self = shift;
$self->{'template_prev'} = shift if $_[0];
}
# template_page
sub template_page
{
my $self = shift;
$self->{'template_page'} = shift if $_[0];
}
# template_this
sub template_this
{
my $self = shift;
$self->{'template_this'} = shift if $_[0];
}
# template_delim
sub template_delim
{
my $self = shift;
$self->{'template_delim'} = shift if $_[0];
}
# uri
sub uri
{
my $self = shift;
$self->{'uri'} = shift if $_[0];
}
# cnt
sub cnt
{
my $self = shift;
if ($_[0]) { $self->{'cnt'} = shift; }
else { return $self->{'cnt'}; }
}
# page
sub page
{
my $self = shift;
if ($_[0]) { $self->{'page'} = shift; }
else { return $self->{'page'}; }
}
# start
sub start
{
my $self = shift;
if ($_[0]) { $self->{'skip'} = (shift) - 1 if $_[0] > 0; }
else { return $self->{'start'}; }
}
# skip
sub skip
{
my $self = shift;
return ($self->{'limit'} * $self->{'page'}) - $self->{'limit'};
}
# limit
sub limit
{
my $self = shift;
if ($_[0]) { $self->{'limit'} = shift; }
else { return $self->{'limit'}; }
}
# total_pages
sub total_pages
{
my $self = shift;
my $praw = 0;
my $p = 0;
$praw = $self->{'cnt'} / $self->{'limit'} if $self->{'cnt'} > 0;
$p = int ($praw) == $praw ? $praw : int ($praw) + 1;
$self->{'total_pages'} = $p;
return $p;
}
1;