From a9f9aa2291cedca8c405948f331f7d91247329af Mon Sep 17 00:00:00 2001 From: Josh Stompro Date: Tue, 23 Jun 2020 15:31:01 -0500 Subject: [PATCH] Show series in results display One way to show series info on the results page in the catalog. Thank you to Anna Goben for sharing this with me and Jason Boyer for creating the example. Signed-off-by: Josh Stompro --- .../src/templates/opac/parts/result/series.tt2 | 54 ++++++++++++++++++++++ Open-ILS/src/templates/opac/parts/result/table.tt2 | 1 + 2 files changed, 55 insertions(+) create mode 100644 Open-ILS/src/templates/opac/parts/result/series.tt2 diff --git a/Open-ILS/src/templates/opac/parts/result/series.tt2 b/Open-ILS/src/templates/opac/parts/result/series.tt2 new file mode 100644 index 0000000000..d83ed80ed5 --- /dev/null +++ b/Open-ILS/src/templates/opac/parts/result/series.tt2 @@ -0,0 +1,54 @@ +[%- + series_tags = ['440', '490', '800', '810', '811', '830', '694']; + loc = ctx.search_ou; + +BLOCK render_series; + results = []; + FOR tag IN series_tags; + FOR node IN attrs.marc_xml.findnodes('//*[@tag="' _ tag _ '"]'); + all_terms = []; + graphics = []; + series = ''; + cur_tag = node.getAttribute('tag'); + NEXT IF cur_tag == '490' && node.getAttribute('ind1') == '1'; + FOR subfield IN node.childNodes; + NEXT UNLESS subfield.nodeName == "subfield"; + code = subfield.getAttribute('code'); + IF code == '6'; + linked_fields = [subfield.textContent()]; + target_field = node.getAttribute('tag'); + get_linked_880s; + END; + NEXT IF cur_tag == '490' && !code.match('[av]'); + NEXT IF cur_tag == '800' && !code.match('[tv]'); + NEXT IF cur_tag == '810' && !code.match('[tv]'); + NEXT IF cur_tag == '811' && !code.match('[tv]'); + NEXT IF cur_tag == '830' && !code.match('[av]'); + + # at this point, we actually have a partial term to use. + single_term = subfield.textContent | html; + all_terms.push(subfield.textContent.replace('[#"^$\+\-,\.:;&|\[\]()]', ' ')); + total_term = all_terms.join(" ").replace('\s+$', ''); + + url = mkurl(ctx.opac_root _ '/results', + { qtype=>'series', query=>total_term }, stop_parms.merge(expert_search_parms, general_search_parms, browse_search_parms, facet_search_parms) + ); + series = series _ '' _ single_term _ ' '; + END; + FOREACH link880 IN graphics; + link = link880.value | html; + series = series _ '
' _ link _ '
'; + END; + results.push(series); + END; + END; + entries = results.join(" -- "); +-%] + +[%- entries -%] +[%- END %] + +[%- series_anchors = PROCESS render_series; + IF series_anchors.length > 0; %] +
Series: [% series_anchors %]
+[%- END %] diff --git a/Open-ILS/src/templates/opac/parts/result/table.tt2 b/Open-ILS/src/templates/opac/parts/result/table.tt2 index de5e4438d5..ed3abb23af 100644 --- a/Open-ILS/src/templates/opac/parts/result/table.tt2 +++ b/Open-ILS/src/templates/opac/parts/result/table.tt2 @@ -181,6 +181,7 @@ END; -%] + [% INCLUDE "opac/parts/result/series.tt2" %]
[%- IF attrs.format_label; %] [% FOR format IN attrs.all_formats %] -- 2.11.0