reverting to more mature page numbering system
authorJoshua Ferraro <jmf@liblime.com>
Wed, 21 Nov 2007 06:05:20 +0000 (00:05 -0600)
committerJoshua Ferraro <jmf@liblime.com>
Wed, 21 Nov 2007 20:12:56 +0000 (14:12 -0600)
Signed-off-by: Chris Cormack <crc@liblime.com>
Signed-off-by: Joshua Ferraro <jmf@liblime.com>
catalogue/search.pl
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tmpl

index 64a020e..2ad81c8 100755 (executable)
@@ -388,8 +388,9 @@ push @limits, map "yr:".$_, split("\0",$params->{'limit-yr'}) if $params->{'limi
 # Params that can only have one value
 my $scan = $params->{'scan'};
 my $results_per_page = $params->{'count'} || 20;
+my $offset = $params->{'offset'} || 0;
 my $page = $cgi->param('page') || 1;
-my $offset = ($page-1)*$results_per_page;
+#my $offset = ($page-1)*$results_per_page;
 my $hits;
 my $expanded_facet = $params->{'expand'};
 
@@ -463,34 +464,50 @@ for (my $i=0;$i<=@servers;$i++) {
             $template->param(searchdesc => ($query_type?"$query_type=":"")."$query_search_desc" );
             $template->param(results_per_page =>  $results_per_page);
             $template->param(SEARCH_RESULTS => \@newresults);
-
-#             my @page_numbers;
-#             my $pages = ceil($hits / $results_per_page);
-#             my $previous_page_offset = $offset - $results_per_page unless ($offset - $results_per_page <0);
-#             my $next_page_offset = $offset + $results_per_page;
-#             for (my $j=1; $j<=$pages;$j++) {
-#                 my $this_offset = (($j*$results_per_page)-$results_per_page);
-#                 my $this_page_number = $j;
-#                 my $highlight = 1 if ($this_page_number == $current_page_number);
-#                 if ($this_page_number <= $pages) {
-#                 push @page_numbers, { offset => $this_offset, pg => $this_page_number, highlight => $highlight, sort_by => join " ",@sort_by };
-#                 }
-#             }
-#             $template->param(PAGE_NUMBERS => \@page_numbers,
-#                             previous_page_offset => $previous_page_offset,
-#                             next_page_offset => $next_page_offset) unless $pages < 2;
-      my $link="/cgi-bin/koha/catalogue/search.pl?q=$query_search_desc&";
-      foreach my $sort (@sort_by){      
-        $link.="&sort_by=".$sort."&";
-      }        
-                       $template->param(
-                               pagination_bar => pagination_bar(
-                       $link,
-                       getnbpages($hits, $results_per_page),
-                       $page,
-                       'page'
-                               ),
-                       );
+                       ## Build the page numbers on the bottom of the page
+                       my @page_numbers;
+                       # total number of pages there will be
+                       my $pages = ceil($hits / $results_per_page);
+                       # default page number
+                       my $current_page_number = 1;
+                       $current_page_number = ($offset / $results_per_page + 1) if $offset;
+                       my $previous_page_offset = $offset - $results_per_page unless ($offset - $results_per_page <0);
+                       my $next_page_offset = $offset + $results_per_page;
+                       # If we're within the first 10 pages, keep it simple
+                       #warn "current page:".$current_page_number;
+                       if ($current_page_number < 10) {
+                               # just show the first 10 pages
+                               # Loop through the pages
+                               my $pages_to_show = 10;
+                               $pages_to_show = $pages if $pages<10;
+                               for ($i=1; $i<=$pages_to_show;$i++) {
+                                       # the offset for this page
+                                       my $this_offset = (($i*$results_per_page)-$results_per_page);
+                                       # the page number for this page
+                                       my $this_page_number = $i;
+                                       # it should only be highlighted if it's the current page
+                                       my $highlight = 1 if ($this_page_number == $current_page_number);
+                                       # put it in the array
+                                       push @page_numbers, { offset => $this_offset, pg => $this_page_number, highlight => $highlight, sort_by => join " ",@sort_by };
+                                
+                               }
+                        
+                       }
+                       # now, show twenty pages, with the current one smack in the middle
+                       else {
+                               for ($i=$current_page_number; $i<=($current_page_number + 20 );$i++) {
+                    my $this_offset = ((($i-9)*$results_per_page)-$results_per_page);
+                    my $this_page_number = $i-9;
+                    my $highlight = 1 if ($this_page_number == $current_page_number);
+                                       if ($this_page_number <= $pages) {
+                       push @page_numbers, { offset => $this_offset, pg => $this_page_number, highlight => $highlight, sort_by => join " ",@sort_by };
+                                       }
+                }
+                        
+                       }
+                       $template->param(       PAGE_NUMBERS => \@page_numbers,
+                                                               previous_page_offset => $previous_page_offset) unless $pages < 2;
+                       $template->param(next_page_offset => $next_page_offset) unless $pages eq $current_page_number;
          }
     } # end of the if local
     else {
index a755d65..17b5fc3 100644 (file)
                 </div>
         <!-- /TMPL_IF -->
     
-       <div class="pages">
-           <!-- TMPL_VAR NAME="pagination_bar" -->
-       </div>
+<!-- TMPL_IF NAME="PAGE_NUMBERS" --><div class="pages">
+    <!-- Row of numbers corresponding to search result pages -->
+        <!-- TMPL_IF NAME="previous_page_offset" --><a class="nav" href="/cgi-bin/koha/catalogue/search.pl?q=<!-- TMPL_VAR NAME="searchdesc" -->&amp;offset=<!-- TMPL_VAR NAME="previous_page_offset" --><!-- TMPL_IF NAME="sort_by" -->&amp;sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->">&lt;&lt; Previous</a><!-- /TMPL_IF -->
+    <!-- TMPL_LOOP NAME="PAGE_NUMBERS" --><!-- TMPL_IF NAME="highlight" --><span class="current"><!-- TMPL_VAR NAME="pg" --></span><!-- TMPL_ELSE -->        <a class="nav" href="/cgi-bin/koha/catalogue/search.pl?q=<!-- TMPL_VAR NAME="searchdesc" -->&amp;offset=<!-- TMPL_VAR NAME="offset" --><!-- TMPL_IF NAME="sort_by" -->&amp;sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->"><!-- TMPL_VAR NAME="pg" --></a><!-- /TMPL_IF -->
+    <!-- /TMPL_LOOP -->
+
+        <!-- TMPL_IF NAME="next_page_offset" --><a class="nav" href="/cgi-bin/koha/catalogue/search.pl?q=<!-- TMPL_VAR NAME="searchdesc" -->&amp;offset=<!-- TMPL_VAR NAME="next_page_offset" --><!-- TMPL_IF NAME="sort_by" -->&amp;sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->">Next &gt;&gt;</a><!-- /TMPL_IF -->
+</div><!-- /TMPL_IF -->
     
         <!-- TMPL_IF NAME="outer_sup_results_loop" -->
             <h3><!-- TMPL_LOOP NAME="outer_sup_results_loop" --></h3>