Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 81f99fbd

Von Moritz Bunkus vor mehr als 2 Jahren hinzugefügt

  • ID 81f99fbda636506147299bedcfa26abf98e1c85b
  • Vorgänger 2590383a
  • Nachfolger be3e7212

Drucken: Variablen in Positionen interpolieren

Alle Variablen, die in Schleifen ausgegeben
werden (z.B. Artikelbeschreibung, Langtext, aber auch die Steuern)
werden nun ebenfalls der Interpolation unterzogen, sodass
z.B. in wiederkehrenden Rechnungen <%current_quarter%> in
Artikelbeschreibungen genutzt werden kann — aber auch Belegfelder.

Unterschiede anzeigen:

SL/Form.pm
3214 3214
    today     => DateTime->today,
3215 3215
  };
3216 3216

  
3217
  if ($defaults->print_interpolate_variables_in_positions) {
3218
    $self->substitute_placeholders_in_template_arrays({ field => 'description', type => 'text' }, { field => 'longdescription', type => 'html' });
3219
  }
3220

  
3221
  return $self;
3222
}
3223

  
3224
sub substitute_placeholders_in_template_arrays {
3225
  my ($self, @fields) = @_;
3226

  
3227
  foreach my $spec (@fields) {
3228
    $spec     = { field => $spec, type => 'text' } if !ref($spec);
3229
    my $field = $spec->{field};
3230

  
3231
    next unless exists $self->{TEMPLATE_ARRAYS} && exists $self->{TEMPLATE_ARRAYS}->{$field};
3232

  
3233
    my $tag_start = $spec->{type} eq 'html' ? '&lt;%' : '<%';
3234
    my $tag_end   = $spec->{type} eq 'html' ? '%&gt;' : '%>';
3235
    my $formatter = $spec->{type} eq 'html' ? sub { $::locale->quote_special_chars('html', $_[0] // '') } : sub { $_[0] };
3236

  
3237
    $self->{TEMPLATE_ARRAYS}->{$field} = [
3238
      apply { s{${tag_start}(.+?)${tag_end}}{ $formatter->($self->{$1}) }eg }
3239
        @{ $self->{TEMPLATE_ARRAYS}->{$field} }
3240
    ];
3241
  }
3242

  
3217 3243
  return $self;
3218 3244
}
3219 3245

  

Auch abrufbar als: Unified diff