NAME
Template::Plugin::MARC - Template::Toolkit plugin to make MARC friendly
SYNOPSIS
[% USE record = MARC(mymarc) %] <!-- translate MARC::Record to T::T hash --> <h1>[% record.f245.sa %]</h1> <!-- subfield 245$a --> [% record.f245.all %] <!-- all subfields concatenated together --> [% FOREACH link IN record.f856s %] <!-- process each 856 field --> <a href="whatever/[% link.su %]">[% link.sy %]</a> <!-- create a link on 856$y --> [% END %] <!-- /FOREACH link IN record.856s --> [% FOREACH contents IN record.f505s %] <!-- process each 505 field --> [% FOREACH subf IN contents.subfields %] <!-- process each subfield --> [% SWITCH subf.code %] [% CASE 'a' %] <span class='contents'>[% subf.value %]</span> [% CASE 't' %] <span class='title'>[% subf.value %]</span> [% CASE 'r' %] <span class='responsibility'>[% subf.value %]</span> [% END %] [% END %] <!-- /FOREACH contents.subfields --> [% END %] <!-- /FOREACH contents IN record.f505s --> [% FOREACH subj IN record.f6xxs %] <a href="whatever/[% subj.s9 %]">[% subj.sa %]</a> <!-- create a link on 6[0-9]{2}$a --> [% END %] [% FOREACH field IN record.fields %] [% SWITCH field.tag %] [% CASE '600' %] Subject: [% field.all %] is what we are all about [% CASE '700' %] Co-author: [% field.all %], I presume? [% END %] [% END %]
DESCRIPTION
A Template::Toolkit plugin which given a MARC::Record object parses it into a hash that can be accessed directly in Template::Toolkit.
ACCESSORS
By using some clever AUTOLOAD acrobatics, this plugin offers the user six types of accessors.
Direct accessors
[% record.f245.sa %]
print $record->f245->sa;
By prefixing field numbers with an 'f' and subfield codes with an 's', the first field/subfield with a given tag/code can be accessed.
Concatenated accessors
[% record.f245.all %]
print $record->f245->all;
A string consisting of all subfields concatenated together is accessible through the all member of field objects.
Subfield iterators
[% FOREACH subfield IN record.f245.subfields %]
[% subfield.code %] = [% subfield.value %]
[% END %]
foreach my $subfield ($record->f245) {
print $subfield->code, ' = ', $subfield->value;
}
Subfield iterators are accessible through the subfields member of field objects.
Field iterators
[% FOREACH field IN record.f500s %]
[% field.all %]
[% END %]
foreach my $field ($record->f500s) {
print $field->all;
}
Field iterators are accessible by adding an 's' to the end of field names: f500s, etc.
Section iterators
[% FOREACH field IN record.f5xxs %]
[% field.all %]
[% END %]
foreach my $field ($record->f5xxs) {
print $field->all;
}
All the fields in a section (identified by the first digit of the tag) can be accessed with 'fNxxs' and then iterated through.
Complete field list
[% FOREACH field IN record.fields %]
[% field.all %]
[% END %]
foreach my $field ($record->fields) {
print $field->all;
}
All the fields in a record can be accessed via the fields object method.
WHAT THIS PLUGIN DOES NOT DO
This plugin will not sanity-check your code to make sure that you are accessing fields and subfields with proper allowances for repetition. If you access a value using [% record.f505.st %] it is presumed that was intentional, and there will be no warning or error of any sort.
However, the flip-side of this is that this plugin will not dictate your code style. You can access the data using direct (non-repeatable) accessors, by iterating over subfields, by iterating over subfields of a specific tag, by iterating over fields in a particular block (0xx, 1xx, 2xx, etc.), or by iterating over all fields.
METHODS
load
Used by Template::Toolkit for loading this plugin.
new
Instantiates a new object for the given MARC::Record. Can be called using any of the following declarations:
[% USE MARC(mymarc) %]
[% USE marc(mymarc) %]
[% USE MARC mymarc %]
[% USE MARC(marc=mymarc) %]
[% USE MARC marc=mymarc %]
When run from Perl, the object can be created with either of the following two calling conventions:
$record = Template::Plugin::MARC->new({}, $marc, [\%config]);
$record = Template::Plugin::MARC->new([$context], { marc => $marc });
The $context hashref passed as the first argument is mandatory when using positional parameters and optional when using named parameters.
init
Initializes the MARC object. This is called only on the first access attempt on the object, to avoid unnecessary processing.
filter
$record->filter({ '4' => 'edt' })->[0]->sa
[% record.filter('4'='edt').0.sa
Filters a set of fields according to the specified criteria
marc
Returns the MARC::Record object associated with the instance.
HELPER CLASSES
Template::Plugin::MARC::Field
Object class to allow nested auto-loading. Not used directly.
Template::Plugin::MARC::Subfield
Object class to allow nested auto-loading. Not used directly.
SEE ALSO
MARC::Record, Template::Toolkit
AUTHOR
Jared Camins-Esakov, C & P Bibliography Services <jcamins@cpbibliography.com>
COPYRIGHT AND LICENSE
Copyright (C) 2012 by C & P Bibliography Services
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.14.2 or, at your option, any later version of Perl 5 you may have available.