@@ -, +, @@ --- .../bootstrap/en/modules/opac-shelves.tt | 15 +++--- opac/opac-shelves.pl | 52 +++++++++++-------- 2 files changed, 38 insertions(+), 29 deletions(-) --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt +++ a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt @@ -524,14 +524,15 @@ Holdings: - [% IF ( itemsloo.ITEM_RESULTS ) %] - [% FOREACH ITEM_RESULT IN itemsloo.ITEM_RESULTS %] - [% ITEM_RESULT.homebranch | html %] - [% IF ( ITEM_RESULT.location_opac ) %] - [% ITEM_RESULT.location_opac | html %] + [% IF itemsloo.ITEM_RESULTS %] + [% FOREACH item IN itemsloo.ITEM_RESULTS %] + [% item.homebranch | html %] + [% SET location_opac = AuthorisedValues.GetByCode( 'LOC', item.location, 1 ) %] + [% IF location_opac %] + [% location_opac | html %] [% END %] - [% IF ( ITEM_RESULT.itemcallnumber ) %] - ([% ITEM_RESULT.itemcallnumber | html %]) + [% IF item.itemcallnumber %] + ([% item.itemcallnumber | html %]) [% IF ( loop.last ) %].[% ELSE %],[% END %] [% END %] [% END %] --- a/opac/opac-shelves.pl +++ a/opac/opac-shelves.pl @@ -304,7 +304,7 @@ if ( $op eq 'view' ) { $art_req_itypes = Koha::CirculationRules->guess_article_requestable_itemtypes({ $patron ? ( categorycode => $patron->categorycode ) : () }); } - my @items; + my @items_info; while ( my $content = $contents->next ) { my $biblionumber = $content->biblionumber; my $this_item = GetBiblioData($biblionumber); @@ -317,19 +317,6 @@ if ( $op eq 'view' ) { }); $record_processor->process($record); - if ($xslfile) { - my $variables = { - anonymous_session => ($loggedinuser) ? 0 : 1 - }; - $this_item->{XSLTBloc} = XSLTParse4Display( - $biblionumber, $record, - "OPACXSLTListsDisplay", 1, - undef, $sysxml, - $xslfile, $lang, - $variables - ); - } - my $marcflavour = C4::Context->preference("marcflavour"); my $itemtype = Koha::Biblioitems->search({ biblionumber => $content->biblionumber })->next->itemtype; $itemtype = Koha::ItemTypes->find( $itemtype ); @@ -352,10 +339,6 @@ if ( $op eq 'view' ) { $this_item->{size} = q||; } - # Getting items infos for location display - my @items_infos = &GetItemsLocationInfo( $biblionumber ); - $this_item->{'ITEM_RESULTS'} = \@items_infos; - if (C4::Context->preference('TagsEnabled') and C4::Context->preference('TagsShowOnList')) { $this_item->{TagLoop} = get_tags({ biblionumber => $biblionumber, approved=>1, 'sort'=>'-weight', @@ -363,10 +346,35 @@ if ( $op eq 'view' ) { }); } + my @items; my $items = $biblio->items; + my $allow_onshelf_holds; + my @hidden_items; while ( my $item = $items->next ) { - $this_item->{allow_onshelf_holds} = Koha::CirculationRules->get_onshelfholds_policy( { item => $item, patron => $patron } ); - last if $this_item->{allow_onshelf_holds}; + if ( $item->hidden_in_opac({rules => C4::Context->yaml_preference('OpacHiddenItems')} ) ) { + push @hidden_items, $item->itemnumber; + next; + } + + $allow_onshelf_holds ||= Koha::CirculationRules->get_onshelfholds_policy( + { item => $item, patron => $patron } ); + + push @items, $item; # This is for non-xslt only + } + $this_item->{allow_onshelf_holds} = $allow_onshelf_holds; + $this_item->{'ITEM_RESULTS'} = \@items; + + if ($xslfile) { + my $variables = { + anonymous_session => ($loggedinuser) ? 0 : 1 + }; + $this_item->{XSLTBloc} = XSLTParse4Display( + $biblionumber, $record, + "OPACXSLTListsDisplay", 1, + \@hidden_items, $sysxml, + $xslfile, $lang, + $variables + ); } if ( grep {$_ eq $biblionumber} @cart_list) { @@ -375,7 +383,7 @@ if ( $op eq 'view' ) { $this_item->{biblio_object} = $biblio; $this_item->{biblionumber} = $biblionumber; - push @items, $this_item; + push @items_info, $this_item; } $template->param( @@ -383,7 +391,7 @@ if ( $op eq 'view' ) { can_delete_shelf => $shelf->can_be_deleted($loggedinuser), can_remove_biblios => $shelf->can_biblios_be_removed($loggedinuser), can_add_biblios => $shelf->can_biblios_be_added($loggedinuser), - itemsloop => \@items, + itemsloop => \@items_info, sortfield => $sortfield, direction => $direction, csv_profiles => [ --