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