Bugzilla – Attachment 3332 Details for
Bug 3154
OPAC Search refining by facets is wrong
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for functionality (updated)
patch.txt (text/plain), 12.01 KB, created by
Marcel de Rooy
on 2011-03-17 09:33:43 UTC
(
hide
)
Description:
Patch for functionality (updated)
Filename:
MIME Type:
Creator:
Marcel de Rooy
Created:
2011-03-17 09:33:43 UTC
Size:
12.01 KB
patch
obsolete
>From cd9ad510208b2688a62346053d6ffe38c3e84bac Mon Sep 17 00:00:00 2001 >From: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> >Date: Thu, 17 Mar 2011 10:16:51 +0100 >Subject: [PATCH] [UPDATED] 3154 Preferences for building facets (functionality) >Content-Type: text/plain; charset="utf-8" > >Based on patch from Fridolyn Somers with input of Frederic Demians. >Added new Searching preference maxRecordsForFacets. >This pref contains number of result records used in facet building. >Also added pref displayFacetCount (with thanks to Frederic). >Follow up patch takes care of install issues; functionality can already be tested with this patch only. > >Updated on March 17 for changes in include files. >--- > C4/Search.pm | 72 +++++++++++++------- > catalogue/search.pl | 1 + > .../intranet-tmpl/prog/en/includes/facets.inc | 2 +- > .../en/modules/admin/preferences/searching.pref | 14 ++++ > .../opac-tmpl/prog/en/includes/opac-facets.inc | 2 +- > opac/opac-search.pl | 1 + > 6 files changed, 65 insertions(+), 27 deletions(-) > >diff --git a/C4/Search.pm b/C4/Search.pm >index c486df9..2034327 100644 >--- a/C4/Search.pm >+++ b/C4/Search.pm >@@ -309,6 +309,7 @@ sub getRecords { > my $facets_counter = (); > my $facets_info = (); > my $facets = getFacets(); >+ my $facets_maxrecs = C4::Context->preference('maxRecordsForFacets')||20; > > my @facets_loop; # stores the ref to array of hashes for template facets loop > >@@ -418,7 +419,6 @@ sub getRecords { > for ( my $j = $offset ; $j < $times ; $j++ ) { > my $records_hash; > my $record; >- my $facet_record; > > ## Check if it's an index scan > if ($scan) { >@@ -451,33 +451,55 @@ sub getRecords { > > # warn "RECORD $j:".$record; > $results_hash->{'RECORDS'}[$j] = $record; >- >- # Fill the facets while we're looping, but only for the biblioserver >- $facet_record = MARC::Record->new_from_usmarc($record) >- if $servers[ $i - 1 ] =~ /biblioserver/; >- >- #warn $servers[$i-1]."\n".$record; #.$facet_record->title(); >- if ($facet_record) { >- for ( my $k = 0 ; $k <= @$facets ; $k++ ) { >- ($facets->[$k]) or next; >- my @fields = map {$facet_record->field($_)} @{$facets->[$k]->{'tags'}} ; >- for my $field (@fields) { >- my @subfields = $field->subfields(); >- for my $subfield (@subfields) { >- my ( $code, $data ) = @$subfield; >- ($code eq $facets->[$k]->{'subfield'}) or next; >- $facets_counter->{ $facets->[$k]->{'link_value'} }->{$data}++; >- } >- } >- $facets_info->{ $facets->[$k]->{'link_value'} }->{'label_value'} = >- $facets->[$k]->{'label_value'}; >- $facets_info->{ $facets->[$k]->{'link_value'} }->{'expanded'} = >- $facets->[$k]->{'expanded'}; >- } >- } > } >+ > } > $results_hashref->{ $servers[ $i - 1 ] } = $results_hash; >+ >+ # Fill the facets while we're looping, but only for the biblioserver and not for a scan >+ if ( !$scan && $servers[ $i - 1 ] =~ /biblioserver/ ) { >+ >+ my $jmax = $size>$facets_maxrecs? $facets_maxrecs: $size; >+ >+ for ( my $k = 0 ; $k <= @$facets ; $k++ ) { >+ ($facets->[$k]) or next; >+ my @fcodes = @{$facets->[$k]->{'tags'}}; >+ my $sfcode = $facets->[$k]->{'subfield'}; >+ >+ for ( my $j = 0 ; $j < $jmax ; $j++ ) { >+ my $render_record = $results[ $i - 1 ]->record($j)->render(); >+ my @used_datas = (); >+ >+ foreach my $fcode (@fcodes) { >+ >+ # avoid first line >+ my $field_pattern = '\n'.$fcode.' ([^\n]+)'; >+ my @field_tokens = ( $render_record =~ /$field_pattern/g ) ; >+ >+ foreach my $field_token (@field_tokens) { >+ my $subfield_pattern = '\$'.$sfcode.' ([^\$]+)'; >+ my @subfield_values = ( $field_token =~ /$subfield_pattern/g ); >+ >+ foreach my $subfield_value (@subfield_values) { >+ >+ my $data = $subfield_value; >+ $data =~ s/^\s+//; # trim left >+ $data =~ s/\s+$//; # trim right >+ >+ unless ( $data ~~ @used_datas ) { >+ $facets_counter->{ $facets->[$k]->{'link_value'} }->{$data}++; >+ push @used_datas, $data; >+ } >+ } # subfields >+ } # fields >+ } # field codes >+ } # records >+ >+ $facets_info->{ $facets->[$k]->{'link_value'} }->{'label_value'} = $facets->[$k]->{'label_value'}; >+ $facets_info->{ $facets->[$k]->{'link_value'} }->{'expanded'} = $facets->[$k]->{'expanded'}; >+ } # facets >+ } >+ # End PROGILONE > } > > # warn "connection ", $i-1, ": $size hits"; >diff --git a/catalogue/search.pl b/catalogue/search.pl >index f3f6008..7f1f0ea 100755 >--- a/catalogue/search.pl >+++ b/catalogue/search.pl >@@ -656,6 +656,7 @@ $template->param( > total => $total, > opacfacets => 1, > facets_loop => $facets, >+ displayFacetCount=> C4::Context->preference('displayFacetCount')||0, > scan => $scan, > search_error => $error, > ); >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc >index b53bfb7..710dc23 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc >@@ -17,7 +17,7 @@ > <!-- TMPL_IF NAME="type_label_Series" -->Series<!-- /TMPL_IF --> > <!-- TMPL_IF NAME="type_label_Libraries" -->Libraries<!-- /TMPL_IF --> > <ul> >- <!-- TMPL_LOOP NAME="facets" --><li><a href="/cgi-bin/koha/catalogue/search.pl?<!-- TMPL_VAR NAME="query_cgi" ESCAPE="HTML" --><!-- TMPL_VAR NAME="limit_cgi" ESCAPE="HTML"--><!-- TMPL_IF NAME="sort_by" -->&sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&limit=<!-- TMPL_VAR NAME="type_link_value" -->:<!-- TMPL_VAR NAME="facet_link_value" -->" title="<!-- TMPL_VAR NAME="facet_title_value" -->"><!-- TMPL_VAR NAME="facet_label_value" --></a> <!-- (<!-- TMPL_VAR NAME="facet_count" -->) --></li><!-- /TMPL_LOOP --><!-- TMPL_IF NAME="expandable" --> >+ <!-- TMPL_LOOP NAME="facets" --><li><a href="/cgi-bin/koha/catalogue/search.pl?<!-- TMPL_VAR NAME="query_cgi" ESCAPE="HTML" --><!-- TMPL_VAR NAME="limit_cgi" ESCAPE="HTML"--><!-- TMPL_IF NAME="sort_by" -->&sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&limit=<!-- TMPL_VAR NAME="type_link_value" -->:<!-- TMPL_VAR NAME="facet_link_value" -->" title="<!-- TMPL_VAR NAME="facet_title_value" -->"><!-- TMPL_VAR NAME="facet_label_value" --></a> <!-- TMPL_IF NAME="displayFacetCount" -->(<!-- TMPL_VAR NAME="facet_count" -->)<!-- /TMPL_IF --></li><!-- /TMPL_LOOP --><!-- TMPL_IF NAME="expandable" --> > <li class="showmore"><a href="/cgi-bin/koha/catalogue/search.pl?<!-- TMPL_VAR NAME="query_cgi" ESCAPE="HTML" --><!-- TMPL_VAR NAME="limit_cgi" ESCAPE="HTML" --><!-- TMPL_IF NAME="sort_by" -->&sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&expand=<!-- TMPL_VAR NAME="expand" -->#<!-- TMPL_VAR NAME="type_id" -->">Show More</a></li> > <!-- /TMPL_IF --> > </ul></li> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref >index 5ff267f..d0a58e0 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref >@@ -99,6 +99,14 @@ Searching: > az: from A to Z. > za: from Z to A. > - >+ - pref: displayFacetCount >+ type: boolean >+ default: no >+ choices: >+ yes: Show >+ no: "Don't show" >+ - facet counts. The relevance of these numbers highly depends on the value of the maxRecordsForFacets preference. Applies to OPAC and staff interface. >+ - > - By default, show > - pref: numSearchResults > class: integer >@@ -129,6 +137,12 @@ Searching: > class: integer > - items per biblio in the search results > - >+ - Build facets based on >+ - pref: maxRecordsForFacets >+ class: integer >+ default: 20 >+ - records from the search results. >+ - > - By default, show > - pref: OPACnumSearchResults > class: integer >diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/opac-facets.inc b/koha-tmpl/opac-tmpl/prog/en/includes/opac-facets.inc >index cc6d235..57f0518 100644 >--- a/koha-tmpl/opac-tmpl/prog/en/includes/opac-facets.inc >+++ b/koha-tmpl/opac-tmpl/prog/en/includes/opac-facets.inc >@@ -18,7 +18,7 @@ > <!-- TMPL_IF NAME="type_label_Libraries" -->Libraries<!-- /TMPL_IF --> > <!-- /TMPL_UNLESS --> > <ul> >- <!-- TMPL_LOOP NAME="facets" --><li><a href="/cgi-bin/koha/opac-search.pl?<!-- TMPL_VAR NAME="query_cgi" --><!-- TMPL_VAR NAME="limit_cgi" ESCAPE="HTML" --><!-- TMPL_IF NAME="sort_by" -->&sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&limit=<!-- TMPL_VAR NAME="type_link_value" -->:<!-- TMPL_VAR NAME="facet_link_value" -->" title="<!-- TMPL_VAR NAME="facet_title_value" ESCAPE="HTML" -->"><!-- TMPL_VAR NAME="facet_label_value" --></a> <!-- (<!-- TMPL_VAR NAME="facet_count" -->) --></li><!-- /TMPL_LOOP --><!-- TMPL_IF NAME="expandable" --> >+ <!-- TMPL_LOOP NAME="facets" --><li><a href="/cgi-bin/koha/opac-search.pl?<!-- TMPL_VAR NAME="query_cgi" --><!-- TMPL_VAR NAME="limit_cgi" ESCAPE="HTML" --><!-- TMPL_IF NAME="sort_by" -->&sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&limit=<!-- TMPL_VAR NAME="type_link_value" -->:<!-- TMPL_VAR NAME="facet_link_value" -->" title="<!-- TMPL_VAR NAME="facet_title_value" ESCAPE="HTML" -->"><!-- TMPL_VAR NAME="facet_label_value" --></a> <!-- TMPL_IF NAME="displayFacetCount">(<!-- TMPL_VAR NAME="facet_count" -->)<!-- /TMPL_IF --></li><!-- /TMPL_LOOP --><!-- TMPL_IF NAME="expandable" --> > <li class="showmore"><a href="/cgi-bin/koha/opac-search.pl?<!-- TMPL_VAR NAME="query_cgi" --><!-- TMPL_VAR NAME="limit_cgi" ESCAPE="HTML" --><!-- TMPL_IF NAME="sort_by" -->&sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&offset=<!-- TMPL_VAR NAME="offset" -->&expand=<!-- TMPL_VAR NAME="expand" -->#<!-- TMPL_VAR NAME="type_id" -->">Show More</a></li> > <!-- /TMPL_IF --> > </ul></li> >diff --git a/opac/opac-search.pl b/opac/opac-search.pl >index 0f52650..271f501 100755 >--- a/opac/opac-search.pl >+++ b/opac/opac-search.pl >@@ -628,6 +628,7 @@ $template->param( > total => $total, > opacfacets => 1, > facets_loop => $facets, >+ displayFacetCount=> C4::Context->preference('displayFacetCount')||0, > scan => $scan, > search_error => $error, > ); >-- >1.6.0.6 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 3154
:
2696
|
3036
|
3201
|
3222
|
3223
|
3224
| 3332 |
3334