<%doc> Example: <% include('/elements/auto-table.html', ### # required ### 'header' => [ '#', 'Item', 'Amount' ], 'fields' => [ 'id', 'name', 'amount' ], ### # highly recommended ### 'size' => [ 4, 12, 8 ], 'maxl' => [ 4, 12, 8 ], 'align' => [ 'right', 'left', 'right' ], ### # optional ### 'data' => [ [ 1, 'Widget', 25 ], [ 12, 'Super Widget, 7 ] ], #or 'records' => [ qsearch('item', { } ) ], # or any other array of FS::Record objects 'select' => [ '', [ 1 => 'option 1', 2 => 'option 2', ... ], # options for second field '' ], 'prefix' => 'mytable_', ) %> Values will be passed through as "mytable_id1", etc. % foreach (@header) { % } % my $row = 0; % for ( $row = 0; $row < scalar @data; $row++ ) { % my $col = 0; % for ( $col = 0; $col < scalar @fields; $col++ ) { % my $id = $prefix . $fields[$col]; % # don't suffix rownum in the final, blank row % $id .= $row if $row < (scalar @data) - 1; % } % } % }
<% $_ %>
% my @o = @{ $select[$col] }; % if( @o ) { % } % else { MAXLENGTH = <% $maxl[$col] %> STYLE = "text-align:<% $align[$col] %>" VALUE = "<% $data[$row][$col] %>" % if( $opt{'autoadd'} ) { onchange = "possiblyAddRow(this);" % } > " ALT = "X" onclick = "deleteRow(this);" >
% if( !$opt{'autoadd'} ) {
% } <%init> my %opt = @_; my @header = @{ $opt{'header'} }; my @fields = @{ $opt{'fields'} }; my @data = (); if($opt{'data'}) { @data = @{ $opt{'data'} }; } elsif($opt{'records'}) { foreach my $rec (@{ $opt{'records'} }) { push @data, [ map { $rec->getfield($_) } @fields ]; } } # else @data = (); push @data, [ map {''} @fields ]; # make a blank row my $prefix = $opt{'prefix'}; my @size = $opt{'size'} ? @{ $opt{'size'} } : (map {16} @fields); my @maxl = $opt{'maxl'} ? @{ $opt{'maxl'} } : @size; my @align = $opt{'align'} ? @{ $opt{'align'} } : (map {'right'} @fields); my @select = @{ $opt{'select'} || [] }; foreach (0..scalar(@fields)-1) { $select[$_] ||= []; }