EPrints Technical Mailing List Archive

See the EPrints wiki for instructions on how to join this mailing list and related information.

Message: #09830


< Previous (by date) | Next (by date) > | < Previous (in thread) | Next (in thread) > | Messages - Most Recent First | Threads - Most Recent First

RE: [EP-tech] Conditional EPrints Field Names based on Eprint Type


CAUTION: This e-mail originated outside the University of Southampton.

There might be some 'magic' that EPrints can already do for you here…

 

https://github.com/eprints/eprints3.4/blob/master/perl_lib/EPrints/MetaField.pm#L425-L430

 

I think this allows you to define a phrases such as:
<epp:phrase id="eprint_fieldname_abstract">Abstract</epp:phrase>

<epp:phrase id="eprint_fieldname_abstract.report">Executive Summary</epp:phrase>

 

The first would be used for more items, the second for 'report' eprints.

 

I've never used it – but had made a mental note many years ago that it might be useful one day!

 

Cheers,

John

 

From: eprints-tech-request@ecs.soton.ac.uk <eprints-tech-request@ecs.soton.ac.uk> On Behalf Of James Kerwin
Sent: Friday, August 23, 2024 9:11 AM
To: eprints-tech@ecs.soton.ac.uk
Subject: Re: [EP-tech] Conditional EPrints Field Names based on Eprint Type

 

CAUTION: External Message. Use caution opening links and attachments.

CAUTION: This e-mail originated outside the University of Southampton.

CAUTION: This e-mail originated outside the University of Southampton.

Okay, so I'm revising what I thought in the first email.

 

I think a potential starting point is in: /opt/eprints3/perl_lib/EPrints/Plugin/Screen/EPrint/Details.pm around this area:

oreach my $field ( @fields )
{
next unless( $field->get_property( "show_in_html" ) );

my $name = $field->get_name();

my $stage = $self->_find_stage( $eprint, $name );
$stage = "" if !defined $stage;

my $rows = $stages{$stage}->{rows};
my $unspec = $stages{$stage}->{unspec};
$stages{$stage}->{count}++;

my $r_name = $self->_render_name_maybe_with_link( $eprint, $field );

if( $eprint->is_set( $name ) )

{

if( !$field->isa( "EPrints::MetaField::Subobject" ) )

{

push @$rows, $session->render_row(

$r_name,

$eprint->render_value( $field->get_name(), 1 ) );

}

}

 

Thanks,

James

 

On Fri, Aug 23, 2024 at 7:37 AM James Kerwin <jkerwin2101@gmail.com> wrote:

Hi All,

 

We're sprucing up the repository, which is awful news for me.

 

I need to alter how certain field names are rendered, depending on the EPrint type.

 

For example, if an item is an Article type I want the abstract to continue to be rendered as "Abstract". For report I want the Abstract to be rendered as "Executive Summary". That sort of thing. I can do this easily enough using epc:if in the summary_page.xml citation, but I want the field names to be consistent in the Details screen where my team log in.

 

Ideally I would do something in cfg.d, but I think it's going to be more involved than that. I'm aware I could simply conditionally map this in the crosswalks, but I'm trying to limit the number of new fields I create because we already have a lot.

 

Is there a way I should go about this? Looking at Details.pm I can see a "render_name" sub being called. I THINK the version of this I need to alter might be in MetaField.pm, but I'm really not sure.

Does anyone know if this would be possible and where I should start with it? I'm not looking for a fully flushed out solution, just some direction.

Thanks,

James