[EP-tech] Re: Finding selected lang from configuration
Adam Field
af05v at ecs.soton.ac.uk
Thu Jul 2 11:56:46 BST 2015
You need square brackets around the 0, not curly ones (you're accessing an array, not a hash).
--
Adam Field
Business Relationship Manager and Community Lead
EPrints Services
> On 2 Jul 2015, at 11:52, George Mamalakis <mamalos at eng.auth.gr> wrote:
>
> Hi Adam,
>
> I faced a problem when I performed the changes you suggested,
> specifically with this line:
>
> ${$$vals[0]}{'text'} becomes $vals->[0]->{text}
>
> After I changed this line, the program started to crash (server error).
> When debugging it (by using a custom script that prints the 'title''s
> value), when printing, for one of my records I received a:
>
> Not a HASH reference at (eval 60) line 104.
>
> error. Line 104 was the line containing:
>
> $title = $vals->{0}->{'text'};
>
> Trying to see why this was happening, I realised that the specific
> record was missing the lang value (where el should have been present).
> Meaning:
>
> Previous value: $VAR1 = [
> {
> 'text' => 'The English title',
> 'lang' => 'en'
> },
> {
> 'lang' => '',
> 'text' => "\x{39f}
> \x{395}\x{3bb}\x{3bb}\x{3b7}\x{3bd}\x{3b9}\x{3ba}\x{3cc}\x{3c2}
> \x{3c4}\x{3af}\x{3c4}\x{3bb}\x{3bf}\x{3c2}"
> }
> ];
>
> How come my previous code was handling it without a problem whereas the
> one you proposed weren't? As I said I'm not well acquainted with perl,
> so I'm not even sure how to debug this any further. And, to be honest,
> since missing values will definitely be a case for my repository, I
> cannot adopt your suggestion once it breaks; but I assume that there's
> an easy work-around for this.
>
> Thanks again!
>
> On 01/07/2015 05:14 μμ, Field A.N. wrote:
>> Hi George
>>
>> I wouldn't worry about performance unless you're seeing specific problems. However, you can get it from $repository->id() I believe. Don't assume there's be a database lookup, as its
>>
>> I would also recommend the following changes in syntax for readability:
>>
>> %$v1{'lang'} becomes $v1->{lang}
>> %$v1{'text'} becomes $v1->{text}
>> ${$$vals[0]}{'text'} becomes $vals->[0]->{text}
>>
>> Best Wishes
>>
>> --
>> Adam Field
>> Business Relationship Manager and Community Lead
>> EPrints Services
>> +44 (0)23 8059 8814
>>
>>
>>
>>
>>
>> On 1 Jul 2015, at 11:34, George Mamalakis wrote:
>>
>>> Cheers Adam,
>>>
>>> It worked like a charm! Now please allow me to asking you one more
>>> thing: I changed my title field to contain code that looks for my
>>> repository_id through the $eprint variable (which is my method's
>>> parameter), which means that the system will have to make an additional
>>> database call each time my field is accessed for each object. There's no
>>> easier method of having access to it, I suppose? (eg. directly, like I
>>> have access to the configuration via $c).
>>>
>>> PS. My new title-field code is as follows:
>>>
>>> {
>>> name => 'title',
>>> type => 'virtualwithvalue',
>>> virtual => 1,
>>>
>>> get_value => sub
>>> {
>>> my ($eprint) = @_;
>>> if ($eprint->is_set('ml_title'))
>>> {
>>> my $repo = $eprint->repository;
>>> my $lang = $repo->get_langid;
>>> # if cannot find a user language setting, I'm taking the
>>> default one
>>> if (!$lang)
>>> {
>>> $lang = $c->{defaultlanguage};
>>> }
>>> my $vals = $eprint->get_value('ml_title');
>>> my $title = '';
>>> # set the default lang's text as title
>>> foreach my $v1 (@{$vals})
>>> {
>>> if (%$v1{'lang'} eq $lang)
>>> {
>>> $title = %$v1{'text'};
>>> }
>>> }
>>> # if I couldn't find a title in the user's language, get
>>> the first object's text as title
>>> if ($title eq '')
>>> {
>>> $title = ${$$vals[0]}{'text'} ;
>>> }
>>> return $title;
>>>
>>> }
>>> return undef;
>>> }
>>> },
>>>
>>>
>>>
>>> On 01/07/2015 12:30 μμ, Field A.N. wrote:
>>>> It should be:
>>>>
>>>> $repository->get_lang(), which will return an EPrints::Language object, or $repository->get_langid, which will return the ID of the language.
>>>>
>>>> --
>>>> Adam Field
>>>> Business Relationship Manager and Community Lead
>>>> EPrints Services
>>>> +44 (0)23 8059 8814
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On 30 Jun 2015, at 10:29, George Mamalakis wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> I am testing the multilang field (with virtual fields for title and
>>>>> abstract) and I am trying to make my virtual field return a different
>>>>> title (or abstract) based on what the user's language choice is. How can
>>>>> I have access to that variable on my perl configuration file? (I've
>>>>> tested the default language and works as expected, but I don't find it
>>>>> usable.)
>>>>>
>>>>> Thanks all in advance.
>>>>>
>>>>> --
>>>>> George Mamalakis
>>>>>
>>>>> IT and Security Officer,
>>>>> Electrical and Computer Engineer (Aristotle Univ. of Thessaloniki),
>>>>> PhD (Aristotle Univ. of Thessaloniki),
>>>>> MSc (Imperial College of London)
>>>>>
>>>>> School of Electrical and Computer Engineering
>>>>> Aristotle University of Thessaloniki
>>>>>
>>>>> phone number : +30 (2310) 994379
>>>>>
>>>>>
>>>>> *** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
>>>>> *** Archive: http://www.eprints.org/tech.php/
>>>>> *** EPrints community wiki: http://wiki.eprints.org/
>>>>> *** EPrints developers Forum: http://forum.eprints.org/
>>>> *** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
>>>> *** Archive: http://www.eprints.org/tech.php/
>>>> *** EPrints community wiki: http://wiki.eprints.org/
>>>> *** EPrints developers Forum: http://forum.eprints.org/
>>>
>>> --
>>> George Mamalakis
>>>
>>> IT and Security Officer,
>>> Electrical and Computer Engineer (Aristotle Univ. of Thessaloniki),
>>> PhD (Aristotle Univ. of Thessaloniki),
>>> MSc (Imperial College of London)
>>>
>>> School of Electrical and Computer Engineering
>>> Aristotle University of Thessaloniki
>>>
>>> phone number : +30 (2310) 994379
>>>
>>>
>>>
>>> *** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
>>> *** Archive: http://www.eprints.org/tech.php/
>>> *** EPrints community wiki: http://wiki.eprints.org/
>>> *** EPrints developers Forum: http://forum.eprints.org/
>>
>> *** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
>> *** Archive: http://www.eprints.org/tech.php/
>> *** EPrints community wiki: http://wiki.eprints.org/
>> *** EPrints developers Forum: http://forum.eprints.org/
>>
>
>
> --
> George Mamalakis
>
> IT and Security Officer,
> Electrical and Computer Engineer (Aristotle Univ. of Thessaloniki),
> PhD (Aristotle Univ. of Thessaloniki),
> MSc (Imperial College of London)
>
> School of Electrical and Computer Engineering
> Aristotle University of Thessaloniki
>
> phone number : +30 (2310) 994379
>
>
>
> *** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
> *** Archive: http://www.eprints.org/tech.php/
> *** EPrints community wiki: http://wiki.eprints.org/
> *** EPrints developers Forum: http://forum.eprints.org/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ecs.soton.ac.uk/pipermail/eprints-tech/attachments/20150702/d44009ac/attachment-0001.html
More information about the Eprints-tech
mailing list