Bug 4421: Add alternate holdings display and prefs
This patch adds the ability to specify a field with alternate holdings information for display when a biblio has no items associated with it. Two sysprefs are added: * AlternateHoldingsField specifies what field/subfields contain the alternate holdings information. When blank, the alternate holdings information is not displayed. The default is blank, as this is a new feature. * AlternateHoldingsSeparator specifies the string to be used to separate multiple subfields in the alternate holdings display. The default is ' '. Example use case: A library which does not have a 1-1 relationship between uncontrolled 852 fields from a legacy system and actual physical items on the shelf wishes to display holdings information from the 852, but does not want to create item records which are almost certain to be inaccurate. By enabling the alternate holdings feature (AlternateHoldingsField = '852abcdhi' and AlternateHoldingsSeparator = ' -- '), the library is able to gradually add item records as they locate the physical items, without losing the holdings information presently stored in the uncontrolled 852 fields. To test: 1) Set AlternateHoldingsField to '852abcdhi' 2) Set AlternateHoldingsSeparator to ' -- ' 3) Change the hidden value of subfields 'a', 'b', 'c', 'd', 'h', and/or 'i' of field 852 to 0 so that they display 4) Create a record which has data in the 852, but no item record 5) Look at holdings tab, where the data you entered should be displayed Proof-of-concept initially developed for the American Numismatic Society. Signed-off-by: Jared Camins-Esakov <jcamins@bywatersolutions.com> Signed-off-by: Nicole C. Engard <nengard@bywatersolutions.com> Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
This commit is contained in:
parent
9e3dbeaf39
commit
f1663ada48
29
C4/Search.pm
29
C4/Search.pm
|
|
@ -1748,6 +1748,35 @@ sub searchResults {
|
|||
$oldbiblio->{orderedcount} = $ordered_count;
|
||||
$oldbiblio->{isbn} =~
|
||||
s/-//g; # deleting - in isbn to enable amazon content
|
||||
|
||||
if (C4::Context->preference("AlternateHoldingsField") && $items_count == 0) {
|
||||
my $fieldspec = C4::Context->preference("AlternateHoldingsField");
|
||||
my $subfields = substr $fieldspec, 3;
|
||||
my $holdingsep = C4::Context->preference("AlternateHoldingsSeparator") || ' ';
|
||||
my @alternateholdingsinfo = ();
|
||||
my @holdingsfields = $marcrecord->field(substr $fieldspec, 0, 3);
|
||||
my $alternateholdingscount = 0;
|
||||
|
||||
for my $field (@holdingsfields) {
|
||||
my %holding = ( holding => '' );
|
||||
my $havesubfield = 0;
|
||||
for my $subfield ($field->subfields()) {
|
||||
if ((index $subfields, $$subfield[0]) >= 0) {
|
||||
$holding{'holding'} .= $holdingsep if (length $holding{'holding'} > 0);
|
||||
$holding{'holding'} .= $$subfield[1];
|
||||
$havesubfield++;
|
||||
}
|
||||
}
|
||||
if ($havesubfield) {
|
||||
push(@alternateholdingsinfo, \%holding);
|
||||
$alternateholdingscount++;
|
||||
}
|
||||
}
|
||||
|
||||
$oldbiblio->{'ALTERNATEHOLDINGS'} = \@alternateholdingsinfo;
|
||||
$oldbiblio->{'alternateholdings_count'} = $alternateholdingscount;
|
||||
}
|
||||
|
||||
push( @newresults, $oldbiblio )
|
||||
if(not $hidelostitems
|
||||
or (($items_count > $itemlost_count )
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package C4::XSLT;
|
||||
# Copyright (C) 2006 LibLime
|
||||
# <jmf at liblime dot com>
|
||||
# Parts Copyright ByWater Solutions 2011
|
||||
#
|
||||
# This file is part of Koha.
|
||||
#
|
||||
|
|
@ -132,7 +133,8 @@ sub XSLTParse4Display {
|
|||
DisplayOPACiconsXSLT URLLinkText viewISBD
|
||||
OPACBaseURL TraceCompleteSubfields
|
||||
UseAuthoritiesForTracings TraceSubjectSubdivisions
|
||||
Display856uAsImage OPACDisplay856uAsImage / )
|
||||
Display856uAsImage OPACDisplay856uAsImage
|
||||
AlternateHoldingsField AlternateHoldingsSeparator / )
|
||||
{
|
||||
my $sp = C4::Context->preference( $syspref );
|
||||
next unless defined($sp);
|
||||
|
|
|
|||
|
|
@ -246,6 +246,33 @@ $template->param(
|
|||
C4::Search::enabled_staff_search_views,
|
||||
);
|
||||
|
||||
if (C4::Context->preference("AlternateHoldingsField") && scalar @items == 0) {
|
||||
my $fieldspec = C4::Context->preference("AlternateHoldingsField");
|
||||
my $subfields = substr $fieldspec, 3;
|
||||
my $holdingsep = C4::Context->preference("AlternateHoldingsSeparator") || ' ';
|
||||
my @alternateholdingsinfo = ();
|
||||
my @holdingsfields = $record->field(substr $fieldspec, 0, 3);
|
||||
|
||||
for my $field (@holdingsfields) {
|
||||
my %holding = ( holding => '' );
|
||||
my $havesubfield = 0;
|
||||
for my $subfield ($field->subfields()) {
|
||||
if ((index $subfields, $$subfield[0]) >= 0) {
|
||||
$holding{'holding'} .= $holdingsep if (length $holding{'holding'} > 0);
|
||||
$holding{'holding'} .= $$subfield[1];
|
||||
$havesubfield++;
|
||||
}
|
||||
}
|
||||
if ($havesubfield) {
|
||||
push(@alternateholdingsinfo, \%holding);
|
||||
}
|
||||
}
|
||||
|
||||
$template->param(
|
||||
ALTERNATEHOLDINGS => \@alternateholdingsinfo,
|
||||
);
|
||||
}
|
||||
|
||||
my @results = ( $dat, );
|
||||
foreach ( keys %{$dat} ) {
|
||||
$template->param( "$_" => defined $dat->{$_} ? $dat->{$_} : '' );
|
||||
|
|
|
|||
|
|
@ -304,3 +304,6 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES (
|
|||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('StaffAuthorisedValueImages','1','',NULL,'YesNo');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACDisplay856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding OPACXSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('Display856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding Staff Client XSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsField','','The MARC field/subfield that contains alternate holdings information for bibs taht do not have items attached (e.g. 852abchi for libraries converting from MARC Magician).',NULL,'free');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsSeparator','','The string to use to separate subfields in alternate holdings displays.',NULL,'free');
|
||||
|
||||
|
|
|
|||
|
|
@ -304,3 +304,6 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES (
|
|||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('StaffAuthorisedValueImages','1','',NULL,'YesNo');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACDisplay856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding OPACXSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('Display856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding Staff Client XSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsField','','The MARC field/subfield that contains alternate holdings information for bibs taht do not have items attached (e.g. 852abchi for libraries converting from MARC Magician).',NULL,'free');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsSeparator','','The string to use to separate subfields in alternate holdings displays.',NULL,'free');
|
||||
|
||||
|
|
|
|||
|
|
@ -306,3 +306,5 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES (
|
|||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('StaffAuthorisedValueImages','1','',NULL,'YesNo');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACDisplay856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding OPACXSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('Display856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding Staff Client XSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsField','','The MARC field/subfield that contains alternate holdings information for bibs taht do not have items attached (e.g. 852abchi for libraries converting from MARC Magician).',NULL,'free');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsSeparator','','The string to use to separate subfields in alternate holdings displays.',NULL,'free');
|
||||
|
|
|
|||
|
|
@ -291,3 +291,6 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES (
|
|||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('StaffAuthorisedValueImages','1','',NULL,'YesNo');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACDisplay856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding OPACXSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('Display856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding Staff Client XSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsField','','The MARC field/subfield that contains alternate holdings information for bibs taht do not have items attached (e.g. 852abchi for libraries converting from MARC Magician).',NULL,'free');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsSeparator','','The string to use to separate subfields in alternate holdings displays.',NULL,'free');
|
||||
|
||||
|
|
|
|||
|
|
@ -303,3 +303,6 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES (
|
|||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('StaffAuthorisedValueImages','1','',NULL,'YesNo');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACDisplay856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding OPACXSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('Display856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding Staff Client XSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsField','','The MARC field/subfield that contains alternate holdings information for bibs taht do not have items attached (e.g. 852abchi for libraries converting from MARC Magician).',NULL,'free');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsSeparator','','The string to use to separate subfields in alternate holdings displays.',NULL,'free');
|
||||
|
||||
|
|
|
|||
|
|
@ -358,3 +358,5 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES (
|
|||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('StaffAuthorisedValueImages','1','',NULL,'YesNo');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACDisplay856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding OPACXSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('Display856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding Staff Client XSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsField','','The MARC field/subfield that contains alternate holdings information for bibs taht do not have items attached (e.g. 852abchi for libraries converting from MARC Magician).',NULL,'free');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsSeparator','','The string to use to separate subfields in alternate holdings displays.',NULL,'free');
|
||||
|
|
|
|||
|
|
@ -383,3 +383,5 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES (
|
|||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('StaffAuthorisedValueImages','1','',NULL,'YesNo');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACDisplay856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding OPACXSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('Display856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding Staff Client XSLT option must be on','OFF|Details|Results|Both','Choice');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsField','','The MARC field/subfield that contains alternate holdings information for bibs taht do not have items attached (e.g. 852abchi for libraries converting from MARC Magician).',NULL,'free');
|
||||
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsSeparator','','The string to use to separate subfields in alternate holdings displays.',NULL,'free');
|
||||
|
|
|
|||
|
|
@ -4187,6 +4187,13 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
|
|||
$dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('AllowSelfCheckReturns',0,'If enabled, patrons may return items through the Web-based Self Checkout','','YesNo')");
|
||||
$dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('SelfCheckHelpMessage','','Enter HTML to include under the basic Web-based Self Checkout instructions on the Help page','70|10','Textarea')");
|
||||
print "Upgrade to $DBversion done ( Add Self-checkout by Login system preferences )\n";
|
||||
}
|
||||
|
||||
$DBversion = "3.03.00.XXX";
|
||||
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
|
||||
$dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsField','','The MARC field/subfield that contains alternate holdings information for bibs taht do not have items attached (e.g. 852abchi for libraries converting from MARC Magician).',NULL,'free')");
|
||||
$dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsSeparator','','The string to use to separate subfields in alternate holdings displays.',NULL,'free')");
|
||||
print "Upgrade to $DBversion done (Add sysprefs to control alternate holdings information display)\n";
|
||||
SetVersion ($DBversion);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,12 @@ Cataloging:
|
|||
- Map the MARC subfield
|
||||
- pref: itemcallnumber
|
||||
- "to an item's callnumber. (This can contain multiple subfields to look in; for instance <code>082ab</code> would look in 082 subfields a and b.)<br />Examples: <strong>Dewey</strong>: <code>082ab</code> or <code>092ab</code>; <strong>LOC</strong>: <code>050ab</code> or <code>090ab</code>; <strong>from the item record</strong>: <code>852hi</code>"
|
||||
-
|
||||
- Display MARC subfield
|
||||
- pref: AlternateHoldingsField
|
||||
- "as holdings information for records that do not have items (This can contain multiple subfields to look in; for instance <code>852abhi</code> would look in 852 subfields a, b, h, and i.), with the subfields separated by"
|
||||
- pref: AlternateHoldingsSeparator
|
||||
- "."
|
||||
-
|
||||
- Fill in the <a href="http://www.loc.gov/marc/organizations/orgshome.html">MARC organization code</a>
|
||||
- pref: MARCOrgCode
|
||||
|
|
|
|||
|
|
@ -378,7 +378,13 @@ function verify_images() {
|
|||
</table>
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_ELSE -->
|
||||
<p>No physical items for this record</p>
|
||||
<!-- TMPL_IF NAME="ALTERNATEHOLDINGS" -->
|
||||
<!-- TMPL_LOOP NAME="ALTERNATEHOLDINGS" -->
|
||||
<div id="alternateholdings"><span class="holdings_label">Holdings:</span> <!-- TMPL_VAR NAME="holding" --></div>
|
||||
<!-- /TMPL_LOOP -->
|
||||
<!-- TMPL_ELSE -->
|
||||
<div id="noitems">No physical items for this record</div>
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- /TMPL_IF -->
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -554,7 +554,16 @@ YAHOO.util.Event.onContentReady("searchheader", function () {
|
|||
<!-- /TMPL_LOOP --></ul>
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_ELSE -->
|
||||
<!-- TMPL_IF NAME="ALTERNATEHOLDINGS" -->
|
||||
<strong id="altholdings_heading">Other holdings:</strong>
|
||||
<ul>
|
||||
<!-- TMPL_LOOP NAME="ALTERNATEHOLDINGS" -->
|
||||
<li id="alternateholdings"><!-- TMPL_VAR NAME="holding" --></li>
|
||||
<!-- /TMPL_LOOP -->
|
||||
</li>
|
||||
<!-- TMPL_ELSE -->
|
||||
<span class="unavailable">No items</span>
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- /TMPL_IF --> <!-- /items count -->
|
||||
</div></td>
|
||||
|
||||
|
|
|
|||
|
|
@ -418,7 +418,13 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
|
|||
</table>
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_ELSE -->
|
||||
<p>No physical items for this record</p>
|
||||
<!-- TMPL_IF NAME="ALTERNATEHOLDINGS" -->
|
||||
<!-- TMPL_LOOP NAME="ALTERNATEHOLDINGS" -->
|
||||
<div id="alternateholdings"><span class="holdings_label">Holdings:</span> <!-- TMPL_VAR NAME="holding" --></div>
|
||||
<!-- /TMPL_LOOP -->
|
||||
<!-- TMPL_ELSE -->
|
||||
<div id="noitems">No physical items for this record</div>
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- /TMPL_IF -->
|
||||
|
||||
<!-- TMPL_IF NAME="OpenOPACShelfBrowser" -->
|
||||
|
|
|
|||
|
|
@ -455,7 +455,13 @@ $(document).ready(function(){
|
|||
<!-- /TMPL_LOOP -->
|
||||
</span>
|
||||
<!-- TMPL_ELSE -->
|
||||
<span class="unavailable">No items available:</span>
|
||||
<!-- TMPL_IF NAME="ALTERNATEHOLDINGS" -->
|
||||
<!-- TMPL_LOOP NAME="ALTERNATEHOLDINGS" -->
|
||||
<span id="alternateholdings"><!-- TMPL_VAR NAME="holding" --></span>,
|
||||
<!-- /TMPL_LOOP -->
|
||||
<!-- TMPL_ELSE -->
|
||||
<span class="unavailable">No items available:</span>
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- /TMPL_IF -->
|
||||
<span class="unavailable">
|
||||
<!-- TMPL_IF NAME="onloancount" --> Checked out (<!-- TMPL_VAR NAME="onloancount" -->), <!-- /TMPL_IF -->
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@
|
|||
<xsl:variable name="OPACURLOpenInNewWindow" select="marc:sysprefs/marc:syspref[@name='OPACURLOpenInNewWindow']"/>
|
||||
<xsl:variable name="URLLinkText" select="marc:sysprefs/marc:syspref[@name='URLLinkText']"/>
|
||||
<xsl:variable name="Show856uAsImage" select="marc:sysprefs/marc:syspref[@name='OPACDisplay856uAsImage']"/>
|
||||
<xsl:variable name="AlternateHoldingsField" select="substring(marc:sysprefs/marc:syspref[@name='AlternateHoldingsField'], 1, 3)"/>
|
||||
<xsl:variable name="AlternateHoldingsSubfields" select="substring(marc:sysprefs/marc:syspref[@name='AlternateHoldingsField'], 4)"/>
|
||||
<xsl:variable name="AlternateHoldingsSeparator" select="marc:sysprefs/marc:syspref[@name='AlternateHoldingsSeparator']"/>
|
||||
<xsl:variable name="leader" select="marc:leader"/>
|
||||
<xsl:variable name="leader6" select="substring($leader,7,1)"/>
|
||||
<xsl:variable name="leader7" select="substring($leader,8,1)"/>
|
||||
|
|
@ -961,10 +964,23 @@
|
|||
</xsl:for-each>
|
||||
</span>
|
||||
</xsl:if>
|
||||
<span class="results_summary">
|
||||
<span class="results_summary" id="availability">
|
||||
<span class="label">Availability: </span>
|
||||
<xsl:choose>
|
||||
<xsl:when test="count(key('item-by-status', 'available'))=0 and count(key('item-by-status', 'reference'))=0">No copies available
|
||||
<xsl:when test="count(key('item-by-status', 'available'))=0 and count(key('item-by-status', 'reference'))=0">
|
||||
<xsl:choose>
|
||||
<xsl:when test="string-length($AlternateHoldingsField)=3 and marc:datafield[@tag=$AlternateHoldingsField]">
|
||||
<xsl:variable name="AlternateHoldingsCount" select="count(marc:datafield[@tag=$AlternateHoldingsField])"/>
|
||||
<xsl:for-each select="marc:datafield[@tag=$AlternateHoldingsField][1]">
|
||||
<xsl:call-template select="marc:datafield[@tag=$AlternateHoldingsField]" name="subfieldSelect">
|
||||
<xsl:with-param name="codes"><xsl:value-of select="$AlternateHoldingsSubfields"/></xsl:with-param>
|
||||
<xsl:with-param name="delimeter"><xsl:value-of select="$AlternateHoldingsSeparator"/></xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:for-each>
|
||||
(<xsl:value-of select="$AlternateHoldingsCount"/>)
|
||||
</xsl:when>
|
||||
<xsl:otherwise>No copies available</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:when>
|
||||
<xsl:when test="count(key('item-by-status', 'available'))>0">
|
||||
<span class="available">
|
||||
|
|
|
|||
|
|
@ -42,6 +42,8 @@ use C4::VirtualShelves;
|
|||
use C4::XSLT;
|
||||
use C4::ShelfBrowser;
|
||||
use C4::Charset;
|
||||
use MARC::Record;
|
||||
use MARC::Field;
|
||||
|
||||
BEGIN {
|
||||
if (C4::Context->preference('BakerTaylorEnabled')) {
|
||||
|
|
@ -227,6 +229,33 @@ my $subtitle = GetRecordValue('subtitle', $record, GetFrameworkCode($bib
|
|||
subtitle => $subtitle,
|
||||
);
|
||||
|
||||
if (C4::Context->preference("AlternateHoldingsField") && scalar @items == 0) {
|
||||
my $fieldspec = C4::Context->preference("AlternateHoldingsField");
|
||||
my $subfields = substr $fieldspec, 3;
|
||||
my $holdingsep = C4::Context->preference("AlternateHoldingsSeparator") || ' ';
|
||||
my @alternateholdingsinfo = ();
|
||||
my @holdingsfields = $record->field(substr $fieldspec, 0, 3);
|
||||
|
||||
for my $field (@holdingsfields) {
|
||||
my %holding = ( holding => '' );
|
||||
my $havesubfield = 0;
|
||||
for my $subfield ($field->subfields()) {
|
||||
if ((index $subfields, $$subfield[0]) >= 0) {
|
||||
$holding{'holding'} .= $holdingsep if (length $holding{'holding'} > 0);
|
||||
$holding{'holding'} .= $$subfield[1];
|
||||
$havesubfield++;
|
||||
}
|
||||
}
|
||||
if ($havesubfield) {
|
||||
push(@alternateholdingsinfo, \%holding);
|
||||
}
|
||||
}
|
||||
|
||||
$template->param(
|
||||
ALTERNATEHOLDINGS => \@alternateholdingsinfo,
|
||||
);
|
||||
}
|
||||
|
||||
foreach ( keys %{$dat} ) {
|
||||
$template->param( "$_" => defined $dat->{$_} ? $dat->{$_} : '' );
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue