package Local::Paginator; # adapted from Template::Plugin::Bootstrap::Pagination use strict; use warnings; use Template; use Data::Page; use Data::Printer alias => 'ddp'; use base qw(Exporter); our @EXPORT_OK = qw(paginate); my $pagination_template_string = <<"EOTEMPLATE"; [%- USE Bootstrap.Pagination -%] [%- Bootstrap.Pagination.pagination(pager = pager, uri = uri, siblings = sibs, version = 3) -%] EOTEMPLATE my $pager_template_string = <<"EOTEMPLATE"; [%- USE Bootstrap.Pagination -%] [%- Bootstrap.Pagination.pager(pager = pager, uri = uri, version = 3) -%] EOTEMPLATE sub paginate { my $args = shift; # p $args; # uri, total_entries, entries_per_page, current_page, sibs my $pager = Data::Page->new(); $pager->$_($args->{$_}) for qw(total_entries entries_per_page current_page); my $uri = $args->{uri} . '__PAGE__'; # placeholder replaced inline my $sibs = $args->{sibs} || 5; my $template = Template->new(STRICT => 1); my %html = (); { my $output; $template->process(\$pagination_template_string, { pager => $pager, sibs => $sibs, uri => $uri, }, \$output) or die $template->error(); $html{pagination} = $output; } { my $output; $template->process(\$pager_template_string, { pager => $pager, uri => $uri, }, \$output) or die $template->error(); $html{pager} = $output; } # ddp %html; # add formatted html to args: $args->{html} = \%html; return $args; } 1;