Boxes on Abstract Pages
This tutorial looks at ways to add items to eprint abstract pages without the need to manipulate any XML code.
This can be done by adding a box to either the top,bottom,left or right of the abstract page.
These can be useful but don't always turn out in the correct place, hence manipulating XML can be more preferable in the long run.
An EPrints Box
These are very simple and live under the Screen plug-ins Box directory:
- cfg/plugins/EPrints/Plugin/Screen/EPrint/Box/package_name.pm
All they require is a render method as shown in the basic shell below:
package EPrints::Plugin::Screen::EPrint::Box::package_name; @ISA = ( 'EPrints::Plugin::Screen::EPrint::Box' ); use strict; sub render { my( $self ) = @_; my $repository = $self->{repository}; my $eprint = $self->{processor}->{eprint}; my $frag = $repository->make_doc_fragment; $frag->appendChild($repository->make_text("HELLO")); return $frag; }
Configuring your box
For this you need a config file in cfg/cfg.d/package_name.pl which contains the following:
$c->{plugins}->{"Screen::EPrint::Box::package_name"}->{appears}->{summary_top} = undef; $c->{plugins}->{"Screen::EPrint::Box::package_name"}->{appears}->{summary_right} = undef; $c->{plugins}->{"Screen::EPrint::Box::package_name"}->{appears}->{summary_bottom} = 800; $c->{plugins}->{"Screen::EPrint::Box::package_name"}->{appears}->{summary_left} = undef;
So this box will appear bellow the summary_page citation with a priority of 800 (anything less will appear below and anything more above).
Installing as a package
If you specify you config file properly in the spec file you should be able to click the "Configure Add-on" button to change these values.
Extension Exercise
Make a screen plug-in which has a postinst and prerm which invalidate the abstract pages. The render method of this screen should still re-direct the user to the config file however!
For the invalidate abstract code see XML manipulation of the Abstract page using a Bazaar Module
Clue to the redirecting:
my $config_file = "cfg.d/package_name.pl"; my $screen_id = "Admin::Config::View::Perl"; my $redirect_url = $session->current_url() . "?screen=" . $screen_id . "&configfile=" . $config_file; $session->redirect( $redirect_url ); exit();