# 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;