From: Moritz Bunkus Date: Thu, 28 Oct 2010 16:01:28 +0000 (+0200) Subject: Unterstützung für Variablenzugriffe auf Objekte/Hashes in Druckvorlagen X-Git-Tag: release-2.7.0beta1~246 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=0ffb94b48c8c9183805633241f53bd0b0f66d176;p=kivitendo-erp.git Unterstützung für Variablenzugriffe auf Objekte/Hashes in Druckvorlagen Wenn z.B. SL::Order->order_details $form->{ORDER_OBJ} auf eine Instanz von SL::DB::Order setzt, so kann im Template wie folgt darauf zugegriffen werden: Kunddenname: <%ORDER_OBJ.customer.name%> --- diff --git a/SL/Template/Simple.pm b/SL/Template/Simple.pm index d7a7c3525..8ad622043 100644 --- a/SL/Template/Simple.pm +++ b/SL/Template/Simple.pm @@ -10,6 +10,8 @@ package SL::Template::Simple; use strict; +use Scalar::Util qw(blessed); + # Parameters: # 1. The template's file name # 2. A reference to the Form object @@ -91,7 +93,19 @@ sub _get_loop_variable { my $form = $self->{form}; my $value; - if (($get_array || @indices) && (ref $form->{TEMPLATE_ARRAYS} eq 'HASH') && (ref $form->{TEMPLATE_ARRAYS}->{$var} eq 'ARRAY')) { + if ($var =~ m/\./) { + $value = $form; + for my $part (split(m/\./, $var)) { + if (ref($value) =~ m/^(?:Form|HASH)$/) { + $value = $value->{$part}; + } elsif (blessed($value) && $value->can($part)) { + $value = $value->$part; + } else { + $value = ''; + last; + } + } + } elsif (($get_array || @indices) && (ref $form->{TEMPLATE_ARRAYS} eq 'HASH') && (ref $form->{TEMPLATE_ARRAYS}->{$var} eq 'ARRAY')) { $value = $form->{TEMPLATE_ARRAYS}->{$var}; } else { $value = $form->{$var};