[Koha-patches] [PATCH 49/54] opac-detail subject/author links improvements
paul.poulain at biblibre.com
paul.poulain at biblibre.com
Thu Dec 16 11:54:43 CET 2010
From: Paul Poulain <paul.poulain at biblibre.com>
When the user clicks on a subject or an author, the list of subjects (authors) is displayed
and the user can choose more than 1 subject (author) to search on
this is very convenient when, for example, subjects are :
France, history, kingdom, war
to do a search on "France + war" easily
---
.../opac-tmpl/prog/en/modules/opac-detail.tmpl | 174 ++++++++++++++++++--
opac/opac-detail.pl | 73 ++++++--
2 files changed, 218 insertions(+), 29 deletions(-)
diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
index 084c484..1c131a3 100644
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
@@ -25,7 +25,17 @@
KOHA.Google.GetCoverFromIsbn();<!-- /TMPL_IF --><!-- TMPL_IF NAME="TagsEnabled" -->
$(".tagbutton").click(KOHA.Tags.add_tag_button);<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="opacbookbag" -->$("a.print").parent().after("<li><a class=\"addtocart\" href=\"#\" onclick=\"addRecord('"+$("input[name=bib]").val()+"'); return false;\">"+_("Add to Your Cart")+"<\/a><\/li>");
-<!-- /TMPL_IF -->});
+<!-- /TMPL_IF -->
+<!-- TMPL_IF NAME="MARCSUBJCTS" -->
+ $("#magnifier a").each(function(){
+ var lgth = $(this).attr('href').length;
+ var authid = $(this).attr('href').substring(47, lgth );
+ if (!parseInt(authid)) {
+ $(this).hide();
+ }
+ });
+<!-- /TMPL_IF -->
+});
YAHOO.util.Event.onContentReady("furtherm", function () {
$("#furtherm").css("display","block").css("visibility","hidden");
@@ -44,6 +54,95 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
//]]>
</script>
+<script type="text/JavaScript" language="JavaScript">
+ function showAuthors(element, value){
+ check("#authorsList", value);
+ makeAuthorRequest();
+ var left = element.offsetLeft || 0;
+ var top = element.offsetTop || 0;
+ $('.authorSearch').css('display', 'block');
+ $('.authorSearch').css('left', left);
+ $('.authorSearch').css('top', top + 15);
+ }
+
+ function hideMenu(elem) {
+ $(elem).css('display', 'none');
+ }
+
+ function check(elem, value) {
+ $(elem).find("li").each(function (){
+ if ($(this).find("input").val() == value) { $(this).find("input").attr("checked", "true"); }
+ else { $(this).find("input").attr("checked", ""); }
+ });
+ }
+
+ function checkAll(elem) {
+ var check = "";
+ if ($(elem).find("li:first").find("input").attr("checked")){ check = true; }
+ $(elem).find("li").not(":first").each(function (){
+ $(this).find("input").attr("checked", check);
+ });
+ elem == "#authorsList" ? makeAuthorRequest() : makeSubjectRequest();
+ }
+
+ function makeAuthorRequest(){
+ var request = "/cgi-bin/koha/opac-search.pl?q=";
+ var alreadyFound = false;
+ $("#authorsList").find("li").each(function (){
+ if ($(this).find("input").attr("checked") && $(this).find("input").attr("name") == "checkbox") {
+ value = $(this).find("input").val();
+ if (alreadyFound){ request += " and " + value; }
+ else {
+ request += value;
+ alreadyFound = true;
+ }
+ }
+ });
+ if (alreadyFound) {
+ $("#validAuthorSearch").attr("href", request);
+ }else {
+ $("#validAuthorSearch").removeAttr("href");
+ }
+
+ }
+ //Subjects
+ function showSubjects(element, value, code){
+ $("#subjectsList").find("li").each(function (){
+ $(this).find("input").attr("checked", "");
+ });
+ $("#subjectsList").find("li").each(function (){
+ if ($(this).find("input").val() == value && $(this).find("input").attr("code") == code) {
+ $(this).find("input").attr("checked", "true");
+ var elem = this;
+ while ($(elem).prev("li").children().attr("id") == "checkbox") {
+ $(elem).prev("li").find("input").attr("checked", "true");
+ elem = $(elem).prev("li");
+ }
+ }
+ });
+ makeSubjectRequest();
+ var left = element.offsetLeft || 0;
+ var top = element.offsetTop || 0;
+ $('.subjectSearch').css('display', 'block');
+ $('.subjectSearch').css('left', left);
+ $('.subjectSearch').css('top', top + 15);
+ }
+ function makeSubjectRequest() {
+ var request = "/cgi-bin/koha/opac-search.pl?q=";
+ var alreadyFound = false;
+ $("#subjectsList").find("li").each(function (){
+ if ($(this).find("input").attr("checked") && $(this).find("input").attr("name") == "checkbox") {
+ value = $(this).find("input").val();
+ if (alreadyFound){ request += " and " + value; }
+ else {
+ request += value;
+ alreadyFound = true;
+ }
+ }
+ });
+ alreadyFound ? $("#validSubjectSearch").attr("href", request) : $("#validSubjectSearch").removeAttr("href");
+ }
+</script>
<style type="text/css">
#addtagl { display: none; }
</style>
@@ -94,7 +193,24 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
<!-- TMPL_ELSE -->
<h1><!-- TMPL_VAR NAME="title" escape="html" --><!-- TMPL_IF NAME="subtitle" --> <span class="subtitle"><!-- TMPL_LOOP NAME="subtitle" --><!-- TMPL_VAR NAME="subfield" --> <!-- /TMPL_LOOP --></span><!-- /TMPL_IF --></h1>
<!-- TMPL_IF NAME="author" --><h5 class="author">by <a href="/cgi-bin/koha/opac-search.pl?q=au:<!-- TMPL_VAR NAME="author" ESCAPE="URL" -->"><!-- TMPL_VAR NAME="author" ESCAPE="HTML" --></a></h5><!-- /TMPL_IF -->
- <div id="views"><span class="view"><span id="Normalview">Normal View</span></span> <span class="view"><a id="MARCview" href="/cgi-bin/koha/opac-MARCdetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">MARC View</a></span> <!-- TMPL_IF NAME="ISBD" --><span class="view"><a id="ISBDview" href="/cgi-bin/koha/opac-ISBDdetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">ISBD View</a></span><!-- /TMPL_IF -->
+ <div id="views">
+ <span class="view">
+ <span id="Normalview">Normal View</span>
+ </span>
+
+ <!-- TMPL_IF NAME="can_opac_view_MARC" -->
+ <span class="view">
+ <a id="MARCview" href="/cgi-bin/koha/opac-MARCdetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">MARC View</a>
+ </span>
+ <!-- /TMPL_IF -->
+
+ <!-- TMPL_IF NAME="can_opac_view_ISBD" -->
+ <!-- TMPL_IF NAME="ISBD" -->
+ <span class="view">
+ <a id="ISBDview" href="/cgi-bin/koha/opac-ISBDdetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">ISBD View</a>
+ </span>
+ <!-- /TMPL_IF -->
+ <!-- /TMPL_IF -->
</div>
<span class="results_summary"><!-- TMPL_UNLESS NAME="item-level_itypes" -->
@@ -109,12 +225,26 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
</span>
<!-- TMPL_IF name="MARCAUTHORS" -->
- <span class="results_summary"><span class="label">Authors:</span>
- <!-- TMPL_LOOP NAME="MARCAUTHORS" -->
- <!-- TMPL_LOOP NAME="MARCAUTHOR_SUBFIELDS_LOOP" --><!-- TMPL_VAR NAME="separator" --><a title="‡<!-- TMPL_VAR NAME=code --> <!-- TMPL_VAR NAME=value -->" href="/cgi-bin/koha/opac-search.pl?q=<!-- TMPL_LOOP NAME=link_loop --><!-- TMPL_VAR NAME=operator ESCAPE="URL" --><!-- TMPL_VAR NAME='limit' ESCAPE="URL" -->:<!-- TMPL_VAR NAME=link ESCAPE="URL" --><!-- /TMPL_LOOP -->"><!-- TMPL_VAR NAME="value" --></a><!-- /TMPL_LOOP -->
- <!-- TMPL_UNLESS NAME="__last__" -->|
-<!-- /TMPL_UNLESS -->
+ <span class="results_summary">
+ <span class="label">Authors:</span>
+ <div class="authorSearch">
+ <span><b>Select the item(s) to search :</b></span>
+ <ul id="authorsList">
+ <li><input type="checkbox" onchange="checkAll('#authorsList')"> <b>all</b></li>
+ <!-- TMPL_LOOP NAME="bouncemarcauthorsarray" -->
+ <li><input type="checkbox" name="checkbox" onclick="makeAuthorRequest()" value="<!-- TMPL_IF name="searchbyauthority" --><!-- TMPL_IF name="authoritylink" -->an:<!-- TMPL_VAR name="authoritylink" --><!-- TMPL_ELSE -->au,wrdl:<!-- TMPL_LOOP name="term" --><!-- TMPL_VAR name="value" --><!-- TMPL_UNLESS NAME="__last__" -->+<!-- /TMPL_UNLESS --><!-- /TMPL_LOOP --><!-- /TMPL_IF --><!-- TMPL_ELSE -->au,wrdl:<!-- TMPL_LOOP name="term" --><!-- TMPL_VAR name="value" --><!-- TMPL_UNLESS NAME="__last__" -->+<!-- /TMPL_UNLESS --><!-- /TMPL_LOOP --><!-- /TMPL_IF -->"><!-- TMPL_LOOP name="term" --> <!-- TMPL_VAR name="value" --> <!-- /TMPL_LOOP --></li>
+ <!-- /TMPL_LOOP -->
+ </ul>
+ <a href="#" onclick="hideMenu('.authorSearch');">Cancel</a> | <a id="validAuthorSearch"href="#">Search</a>
+ </div>
+ <!-- TMPL_LOOP NAME="bouncemarcauthorsarray" -->
+ <a href="<!-- TMPL_IF name="authoritylink" -->/cgi-bin/koha/opac-authoritiesdetail.pl?authid=<!-- TMPL_VAR name="authoritylink" --><!-- TMPL_ELSE --><!-- /TMPL_IF -->" >
+ <img height="15" src="/opac-tmpl/prog/images/filefind.png">
+ </a>
+ <a href="#" onclick="showAuthors(this, '<!-- TMPL_IF name="searchbyauthority" --><!-- TMPL_IF name="authoritylink" -->an:<!-- TMPL_VAR name="authoritylink" --><!-- TMPL_ELSE -->au,wrdl:<!-- TMPL_LOOP name="term" --><!-- TMPL_VAR name="value" --><!-- TMPL_UNLESS NAME="__last__" -->+<!-- /TMPL_UNLESS --><!-- /TMPL_LOOP --><!-- /TMPL_IF --><!-- TMPL_ELSE -->au,wrdl:<!-- TMPL_LOOP name="term" --><!-- TMPL_VAR name="value" --><!-- TMPL_UNLESS NAME="__last__" -->+<!-- /TMPL_UNLESS --><!-- /TMPL_LOOP --><!-- /TMPL_IF -->')"><!-- TMPL_LOOP name="term" --><!-- TMPL_VAR name="value" --> <!-- /TMPL_LOOP --></a> |
<!-- /TMPL_LOOP -->
+ <!-- /TMPL_UNLESS -->
+ <!-- /TMPL_LOOP -->
</span>
<!-- /TMPL_IF -->
@@ -164,12 +294,30 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="MARCSUBJCTS" -->
- <span class="results_summary"><span class="label">Subject(s):</span>
+ <span class="results_summary"><span class="label">Subject(s):</span>
+ <div class="subjectSearch" >
+ <span><b>Select the item(s) to search :</b></span>
+ <ul id="subjectsList">
+ <li><input id="all" type="checkbox" onchange="checkAll('#subjectsList')"> <b>all</b></li>
+ <!-- TMPL_LOOP NAME="MARCSUBJCTS" -->
+ <!-- TMPL_LOOP NAME="MARCSUBJECT_SUBFIELDS_LOOP" -->
+ <li><input type="checkbox" onclick="makeSubjectRequest()" name="checkbox" id="checkbox" code="<!-- TMPL_VAR name="value" -->" value="<!-- TMPL_IF name="searchbyauthority" -->an:<!-- TMPL_LOOP name="link_loop" --><!-- TMPL_VAR name="link" --><!-- /TMPL_LOOP --><!-- TMPL_ELSE -->su,wrdl:<!-- TMPL_VAR name="value" --><!-- /TMPL_IF -->"> <!-- TMPL_VAR name="value" --></li>
+ <!-- /TMPL_LOOP -->
+ <li><hr id="trait"></li>
+ <!-- /TMPL_LOOP -->
+ </ul>
+ <a href="#" onclick="hideMenu('.subjectSearch')">Cancel</a> | <a id="validSubjectSearch"href="#">Search</a>
+ </div>
<!-- TMPL_LOOP NAME="MARCSUBJCTS" -->
<!-- TMPL_LOOP NAME="MARCSUBJECT_SUBFIELDS_LOOP" -->
- <!-- TMPL_VAR NAME="separator" --><a title="$<!-- TMPL_VAR NAME="code" --> <!-- TMPL_VAR NAME="value" -->" href="/cgi-bin/koha/opac-search.pl?q=<!-- TMPL_LOOP NAME="link_loop" --><!-- TMPL_VAR NAME="operator" ESCAPE="URL" --><!-- TMPL_VAR NAME="limit" ESCAPE="URL" -->:<!-- TMPL_VAR NAME="link" ESCAPE="URL" --><!-- /TMPL_LOOP -->"><!-- TMPL_VAR NAME="value" --></a><!-- /TMPL_LOOP -->
- <!-- TMPL_IF NAME="__LAST__" --><!-- TMPL_ELSE -->|<!-- /TMPL_IF -->
- <!-- /TMPL_LOOP --></span>
+ <!-- TMPL_VAR NAME="separator" -->
+ <span id="magnifier">
+ <a href="/cgi-bin/koha/opac-authoritiesdetail.pl?authid=<!-- TMPL_LOOP NAME="link_loop" --><!-- TMPL_VAR NAME="link" ESCAPE="URL" --><!-- /TMPL_LOOP -->"><img height="15" src="/opac-tmpl/prog/images/filefind.png"></a>
+ </span>
+ <a href="#" onclick="showSubjects(this, '<!-- TMPL_IF name="searchbyauthority" -->an:<!-- TMPL_LOOP name="link_loop" --><!-- TMPL_VAR name="link" --><!-- /TMPL_LOOP --><!-- TMPL_ELSE -->su,wrdl:<!-- TMPL_VAR name="value" --><!-- /TMPL_IF -->', '<!-- TMPL_VAR name="value" -->')"><!-- TMPL_VAR NAME="value" --></a><!-- /TMPL_LOOP -->
+ <!-- TMPL_IF NAME="__LAST__" --><!-- TMPL_ELSE -->|<!-- /TMPL_IF -->
+ <!-- /TMPL_LOOP -->
+ </span>
<!-- TMPL_ELSE -->
<!-- TMPL_IF name="subjects" --><span class="results_summary"><span class="label">Subject(s):</span> <!-- TMPL_LOOP name="subjects" --><a href="/cgi-bin/koha/opac-search.pl?q=su:<!-- TMPL_VAR NAME="subject" escape="URL" -->"><!-- TMPL_VAR NAME="subject" --></a> | <!-- /TMPL_LOOP --></span><!-- /TMPL_IF -->
<!-- /TMPL_IF -->
@@ -393,6 +541,8 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
<th>Status</th>
<!-- TMPL_IF NAME="itemdata_itemnotes" --><th>Notes</th><!-- /TMPL_IF -->
<th>Date Due</th>
+ <!-- TMPL_IF NAME="itemdata_serialseq" --><th>Serial number</th><!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="itemdata_publisheddate" --><th>Publication date</th><!-- /TMPL_IF -->
</tr></thead>
<tbody><!-- TMPL_LOOP NAME="ITEM_RESULTS" -->
<tr><!-- TMPL_IF NAME="item-level_itypes" --><td><!-- TMPL_UNLESS NAME="noItemTypeImages" --><!-- TMPL_IF NAME="imageurl" --><img src="<!-- TMPL_VAR NAME="imageurl" -->" title="<!-- TMPL_VAR NAME="description" -->" alt="<!-- TMPL_VAR NAME="description" -->" /><!-- /TMPL_IF --><!-- /TMPL_UNLESS --> <!-- TMPL_VAR NAME="description" --></td><!-- /TMPL_IF -->
@@ -405,6 +555,8 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
<td><!-- TMPL_INCLUDE NAME="item-status.inc" --></td>
<!-- TMPL_IF NAME="itemdata_itemnotes" --><td><!-- TMPL_VAR NAME="itemnotes" --></td><!-- /TMPL_IF -->
<td><!-- TMPL_VAR NAME="datedue" --></td>
+ <!-- TMPL_IF NAME="itemdata_serialseq" --><td><!-- TMPL_VAR Name="serialseq"--></td><!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="itemdata_publisheddate" --><td><!-- TMPL_VAR Name="publisheddate"--></td><!-- /TMPL_IF -->
<!-- TMPL_IF NAME="type" -->
<td><a href="/cgi-bin/koha/maint/catmaintain.pl?type=fixitemtype&bi=<!-- TMPL_VAR NAME="biblioitemnumber" -->&item=<!-- TMPL_VAR NAME="itemtype" -->">Fix Itemtype</a></td>
<!-- /TMPL_IF -->
diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl
index cf5edf7..0b0d629 100755
--- a/opac/opac-detail.pl
+++ b/opac/opac-detail.pl
@@ -62,6 +62,7 @@ my $biblionumber = $query->param('biblionumber') || $query->param('bib');
$template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') );
$template->param( 'ItemsIssued' => CountItemsIssued( $biblionumber ) );
+$template->param(C4::Search::enabled_opac_search_views);
my $record = GetMarcBiblio($biblionumber);
if ( ! $record ) {
@@ -166,8 +167,8 @@ for my $itm (@items) {
$itm->{'imageurl'} = getitemtypeimagelocation( 'opac', $itemtypes->{ $itm->{itype} }->{'imageurl'} );
$itm->{'description'} = $itemtypes->{ $itm->{itype} }->{'description'};
}
- foreach (qw(ccode enumchron copynumber itemnotes uri)) {
- $itemfields{$_} = 1 if ($itm->{$_});
+ foreach (qw(ccode enumchron copynumber itemnotes uri serialseq publisheddate)) {
+ $itemfields{$_} = 1 if ( $itm->{$_} );
}
# walk through the item-level authorised values and populate some images
@@ -190,7 +191,8 @@ for my $itm (@items) {
$itm->{transfertwhen} = format_date($transfertwhen);
$itm->{transfertfrom} = $branches->{$transfertfrom}{branchname};
$itm->{transfertto} = $branches->{$transfertto}{branchname};
- }
+ }
+ $itm->{publisheddate}=format_date($itm->{publisheddate});
}
## get notes and subjects from MARC record
@@ -203,22 +205,57 @@ my $marcseriesarray = GetMarcSeries ($record,$marcflavour);
my $marcurlsarray = GetMarcUrls ($record,$marcflavour);
my $subtitle = GetRecordValue('subtitle', $record, GetFrameworkCode($biblionumber));
- $template->param(
- MARCNOTES => $marcnotesarray,
- MARCSUBJCTS => $marcsubjctsarray,
- MARCAUTHORS => $marcauthorsarray,
- MARCSERIES => $marcseriesarray,
- MARCURLS => $marcurlsarray,
- norequests => $norequests,
- RequestOnOpac => C4::Context->preference("RequestOnOpac"),
- itemdata_ccode => $itemfields{ccode},
- itemdata_enumchron => $itemfields{enumchron},
- itemdata_uri => $itemfields{uri},
- itemdata_copynumber => $itemfields{copynumber},
- itemdata_itemnotes => $itemfields{itemnotes},
- authorised_value_images => $biblio_authorised_value_images,
- subtitle => $subtitle,
+#search rebound parameter
+my $searchByauthority = 0;
+if ( C4::Context->preference("OPACSearchReboundBy") eq "authority" ) {
+ $searchByauthority = 1;
+}
+
+#search rebound on author
+my @reboundmarcauthorsarray;
+foreach my $author (@$marcauthorsarray) {
+ my ( $a, $b, $authoritylink, @term );
+ foreach my $subfield ( @{ $author->{'MARCAUTHOR_SUBFIELDS_LOOP'} } ) {
+ if ( $subfield->{'code'} eq "a" && @{ $subfield->{'link_loop'} }[0]->{"limit"} eq "an" ) {
+ $authoritylink = @{ $subfield->{'link_loop'} }[0]->{"link"};
+ }
+ unless ( $subfield->{'code'} eq "3" || $subfield->{'code'} eq "4" ) { push( @term, { value => $subfield->{'value'} } ); }
+ }
+ push(
+ @reboundmarcauthorsarray,
+ { term => \@term,
+ authoritylink => $authoritylink,
+ searchbyauthority => $searchByauthority,
+ }
);
+}
+
+#search rebound on subject
+foreach my $subject (@$marcsubjctsarray) {
+ foreach my $subfield ( @{ $subject->{'MARCSUBJECT_SUBFIELDS_LOOP'} } ) {
+ $subfield->{'searchbyauthority'} = $searchByauthority;
+ }
+}
+
+$template->param(
+ MARCNOTES => $marcnotesarray,
+ MARCSUBJCTS => $marcsubjctsarray,
+ MARCAUTHORS => $marcauthorsarray,
+ MARCSERIES => $marcseriesarray,
+ MARCURLS => $marcurlsarray,
+ norequests => $norequests,
+ RequestOnOpac => C4::Context->preference("RequestOnOpac"),
+ itemdata_serialseq => $itemfields{serialseq},
+ itemdata_publisheddate => $itemfields{publisheddate},
+ itemdata_ccode => $itemfields{ccode},
+ itemdata_enumchron => $itemfields{enumchron},
+ itemdata_uri => $itemfields{uri},
+ itemdata_copynumber => $itemfields{copynumber},
+ itemdata_itemnotes => $itemfields{itemnotes},
+ authorised_value_images => $biblio_authorised_value_images,
+ subtitle => $subtitle,
+ bouncemarcauthorsarray => \@reboundmarcauthorsarray,
+);
foreach ( keys %{$dat} ) {
$template->param( "$_" => defined $dat->{$_} ? $dat->{$_} : '' );
--
1.7.1
More information about the Koha-patches
mailing list