X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/0fba3edda47fca21bedb14eb88e0f5f8d983bb38..066fbb38f:/SL/Template/Simple.pm diff --git a/SL/Template/Simple.pm b/SL/Template/Simple.pm index 3baeaac2d..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}; @@ -163,6 +177,7 @@ sub _parse_block_if { my $not = $1; my $var = $2; + my $comparison = $3; # Optionaler Match um $4..$8 my $operator_neg = $4; # '=' oder '!' oder undef, wenn kein Vergleich erkannt my $operator_type = $5; # '=' oder '~' für Stringvergleich oder Regex my $quoted_word = $7; # nur gültig, wenn quoted string angegeben (siehe unten); dann "value" aus <%if var == "value" %> @@ -173,7 +188,7 @@ sub _parse_block_if { substr($$contents, 0, length($&)) = ""; my $block; - ($block, $$contents) = $self->find_end($$contents, 0, $var, $not); + ($block, $$contents) = $self->find_end($$contents, 0, "$var $comparison", $not); if (!$block) { $self->{"error"} = "Unclosed $self->{tag_start}if$self->{tag_end}." unless ($self->{"error"}); $main::lxdebug->leave_sub();