= $dbi->model('book')->select(
['id','name'], append => "limit $offset, $count_per_page", where => $where)->all;
my $total = $dbi->model('book')->select('count (*)', where => $where)->value;
Is it possible to leave the other query strings in the URL and change only the page number?
The sample described here supports changing only the page number.
Use url_with instead of url_for. The point is to pass the hash reference "{page => $page}" as an argument of the query method.
Is it possible to make pagination into parts?
Yes, you may want to display pagination up and down or share it with other pages.
In such cases, you can use the include function.
Create a template file "templates / include / pagenation.html.ep".
Receive the pager using stash.
<%
my $pager = stash ('pager');
# current page
my $page = $pager->current_page;
#Set the number of page navigation
$pager->pages_per_navigation(10);
# Previous page
my $previous_page = $pager->previous_page;
# Following page
my $next_page = $pager->next_page;
# the first page
my $first_page = $pager->first_page;
#Last page
my $last_page = $pager->last_page;
#Get the page number around
my @nav_pages = $pagesr->pages_in_navigation;
%>
%if ($first_page! = $last_page) {
<div class = "pagenation">
<a href="<%=url_with->query({page => undef})%> "> To the beginning</a>
%if ($previous_page) {
<a href="<%=url_with->query({page => $previous_page})%> "> Previous</a>
%}
%for my $nav_page (@nav_pages) {
%if ($nav_page eq $page) {
<span> <%= $nav_page%></a>
%} else {
<a href="<%=url_with->query({page => $nav_page})%> "> <%= $nav_page%></a>
%}
%}
%if ($next_page) {
<a href="<%=url_with->query({page => $next_page})%> "> Next</a>
%}
<a href="<%=url_with->query({page => $last_page})%> "> To the end</a>
</div>
%}
The user side should do the following.
%= include'include / pagenation', pager => $pager;
Perl Web App Development Tutorial