]> wagnertech.de Git - mfinanz.git/blobdiff - SL/Template/Simple.pm
Einheiten die Waren zugeordnet sind entsprechend als Fremdschlüssel verknüpfen.
[mfinanz.git] / SL / Template / Simple.pm
index 3baeaac2d32a3d8bce59abcc2762fb8aa09342c2..8ad622043e92f4f2f8ce4c92f36cd05a2e2e6c68 100644 (file)
@@ -10,6 +10,8 @@ package SL::Template::Simple;
 
 use strict;
 
 
 use strict;
 
+use Scalar::Util qw(blessed);
+
 # Parameters:
 #   1. The template's file name
 #   2. A reference to the Form object
 # 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;
 
   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};
     $value = $form->{TEMPLATE_ARRAYS}->{$var};
   } else {
     $value = $form->{$var};
@@ -163,6 +177,7 @@ sub _parse_block_if {
 
   my $not           = $1;
   my $var           = $2;
 
   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" %>
   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;
   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();
   if (!$block) {
     $self->{"error"} = "Unclosed $self->{tag_start}if$self->{tag_end}." unless ($self->{"error"});
     $main::lxdebug->leave_sub();