|
Lines 46-51
Creates a new C<Search> of whatever the relevant type is.
Link Here
|
| 46 |
use Modern::Perl; |
46 |
use Modern::Perl; |
| 47 |
use C4::Context; |
47 |
use C4::Context; |
| 48 |
use C4::Biblio qw//; |
48 |
use C4::Biblio qw//; |
|
|
49 |
use POSIX qw(ceil floor); |
| 49 |
|
50 |
|
| 50 |
sub new { |
51 |
sub new { |
| 51 |
my $engine = C4::Context->preference("SearchEngine") // 'Zebra'; |
52 |
my $engine = C4::Context->preference("SearchEngine") // 'Zebra'; |
|
Lines 76-79
sub extract_biblionumber {
Link Here
|
| 76 |
return $record->subfield( $biblionumbertagfield, $biblionumbertagsubfield ); |
77 |
return $record->subfield( $biblionumbertagfield, $biblionumbertagsubfield ); |
| 77 |
} |
78 |
} |
| 78 |
|
79 |
|
|
|
80 |
=head2 pagination_bar |
| 81 |
|
| 82 |
my (@PAGE_NUMBERS, $hits_to_paginate, $pages, $current_page_number, $previous_page_offset, $next_page_offset, $last_page_offset) = |
| 83 |
Koha::SearchEngine::Search->pagination_bar({ |
| 84 |
hits => $hits, |
| 85 |
max_result_window => $max_result_window, |
| 86 |
results_per_page => $results_per_page, |
| 87 |
offset => $offset, |
| 88 |
sort_by => \@sort_by |
| 89 |
}); |
| 90 |
|
| 91 |
Returns the variables needed for the page-nubers.inc to build search results |
| 92 |
|
| 93 |
=cut |
| 94 |
|
| 95 |
sub pagination_bar{ |
| 96 |
my ($self, $params) = @_; |
| 97 |
my $hits = $params->{hits}; |
| 98 |
my $results_per_page = $params->{results_per_page}; |
| 99 |
my $offset = $params->{offset}; |
| 100 |
my $sort_by = $params->{sort_by}; |
| 101 |
my @page_numbers; |
| 102 |
my $max_result_window = $params->{max_result_window}; |
| 103 |
my $hits_to_paginate = ($max_result_window && $max_result_window < $hits) ? $max_result_window : $hits; |
| 104 |
# total number of pages there will be |
| 105 |
my $pages = ceil($hits_to_paginate / $results_per_page); |
| 106 |
my $last_page_offset = ( $pages -1 ) * $results_per_page; |
| 107 |
# default page number |
| 108 |
my $current_page_number = 1; |
| 109 |
$current_page_number = ($offset / $results_per_page + 1) if $offset; |
| 110 |
my $previous_page_offset; |
| 111 |
if ( $offset >= $results_per_page ) { |
| 112 |
$previous_page_offset = $offset - $results_per_page; |
| 113 |
} |
| 114 |
my $next_page_offset = $offset + $results_per_page; |
| 115 |
# If we're within the first 10 pages, keep it simple |
| 116 |
if ($current_page_number < 10) { |
| 117 |
# just show the first 10 pages |
| 118 |
# Loop through the pages |
| 119 |
my $pages_to_show = 10; |
| 120 |
$pages_to_show = $pages if $pages<10; |
| 121 |
for (my $i=1; $i<=$pages_to_show;$i++) { |
| 122 |
# the offset for this page |
| 123 |
my $this_offset = (($i*$results_per_page)-$results_per_page); |
| 124 |
# the page number for this page |
| 125 |
my $this_page_number = $i; |
| 126 |
# put it in the array |
| 127 |
push @page_numbers, |
| 128 |
{ offset => $this_offset, |
| 129 |
pg => $this_page_number, |
| 130 |
# it should only be highlighted if it's the current page |
| 131 |
highlight => $this_page_number == $current_page_number, |
| 132 |
sort_by => join ' ', @$sort_by |
| 133 |
}; |
| 134 |
} |
| 135 |
} |
| 136 |
|
| 137 |
# now, show up to twenty pages, with the current one smack in the middle |
| 138 |
# near the end of search results we will show 10 below and as many remaining above |
| 139 |
else { |
| 140 |
for (my $i=$current_page_number; $i<=($current_page_number + 19 );$i++) { |
| 141 |
my $this_offset = ((($i-9)*$results_per_page)-$results_per_page); |
| 142 |
my $this_page_number = $i-9; |
| 143 |
if ( $this_page_number <= $pages ) { |
| 144 |
push @page_numbers, |
| 145 |
{ offset => $this_offset, |
| 146 |
pg => $this_page_number, |
| 147 |
highlight => $this_page_number == $current_page_number, |
| 148 |
sort_by => join ' ', @$sort_by |
| 149 |
}; |
| 150 |
} |
| 151 |
} |
| 152 |
} |
| 153 |
|
| 154 |
return (\@page_numbers, $hits_to_paginate, $pages, $current_page_number, $previous_page_offset, $next_page_offset, $last_page_offset); |
| 155 |
|
| 156 |
} |
| 157 |
|
| 79 |
1; |
158 |
1; |