diff options
Diffstat (limited to 'httemplate/elements/select-table.html')
-rw-r--r-- | httemplate/elements/select-table.html | 114 |
1 files changed, 63 insertions, 51 deletions
diff --git a/httemplate/elements/select-table.html b/httemplate/elements/select-table.html index 83445f41a..0c3c00563 100644 --- a/httemplate/elements/select-table.html +++ b/httemplate/elements/select-table.html @@ -1,65 +1,77 @@ -% -% -% ##required -% # 'table' => 'table_name', -% # 'name_col' => 'name_column', -% # -% ##strongly recommended (you want your forms to be "sticky" on errors, right?) -% # 'value' => 'current_value', -% # -% ##opt -% # 'empty_label' => '', #better specify it though, the default might change -% # 'hashref' => {}, -% # 'extra_sql' => '', -% # 'records' => \@records, #instead of hashref -% # 'pre_options' => [ 'value' => 'option' ], #before normal options -% # 'element_name' => '', #HTML element name, defaults to the name of -% # # the primary key column -% # 'element_etc' => '', #additional attributes (i.e. "DISABLED") for the -% # #<SELECT> element -% -% my( %opt ) = @_; -% -% #warn "***** select-table: \n". Dumper(%opt); -% -% my $key = dbdef->table($opt{'table'})->primary_key; #? $opt{'primary_key'} || -% -% my $name_col = $opt{'name_col'}; -% -% my @records = (); -% if ( $opt{'records'} ) { -% @records = @{ $opt{'records'} }; -% } else { -% @records = qsearch( { -% 'table' => $opt{'table'}, -% 'hashref' => ( $opt{'hashref'} || {} ), -% 'extra_sql' => ( $opt{'extra_sql'} || '' ), -% }); -% } -% -% my @pre_options = $opt{'pre_options'} ? @{ $opt{'pre_options'} } : (); -% -% - - <SELECT NAME="<% $opt{'element_name'} || $key %>" <% $opt{'element_etc'} %>> + % while ( @pre_options ) { <OPTION VALUE="<% shift(@pre_options) %>"><% shift(@pre_options) %> -% } +% } <OPTION VALUE=""><% $opt{'empty_label'} || 'all' %> -% foreach my $record ( sort { $a->$name_col() cmp $b->$name_col() } -% @records -% ) -% { -% +% foreach my $record ( sort { $a->$name_col() cmp $b->$name_col() } @records ) { <OPTION VALUE="<% $record->$key() %>"<% $opt{'value'} == $record->$key() ? ' SELECTED' : '' %>><% $record->$name_col() %> -% } +% } </SELECT> +<%init> + +##required +# 'table' => 'table_name', +# 'name_col' => 'name_column', +# +##strongly recommended (you want your forms to be "sticky" on errors, right?) +# 'value' => 'current_value', +# +##opt +# 'empty_label' => '', #better specify it though, the default might change +# 'hashref' => {}, +# 'extra_sql' => '', +# 'records' => \@records, #instead of hashref +# 'pre_options' => [ 'value' => 'option' ], #before normal options +# 'element_name' => '', #HTML element name, defaults to the name of +# # the primary key column +# 'element_etc' => '', #additional attributes (i.e. "DISABLED") for the +# #<SELECT> element +# 'debug' => 0, #set true to enable + +my( %opt ) = @_; + +warn "elements/select-table.html: \n". Dumper(%opt) + if exists $opt{debug} && $opt{debug}; + +my $key = dbdef->table($opt{table})->primary_key; #? $opt{primary_key} || + +my $name_col = $opt{name_col}; + +$opt{hashref} ||= {}; + +my @records = (); +if ( $opt{records} ) { + @records = @{ $opt{records} }; +} else { + @records = qsearch( { + 'table' => $opt{table}, + 'hashref' => $opt{hashref}, + 'extra_sql' => ( $opt{extra_sql} || '' ), + }); +} + +unless ( ! $opt{value} + or ! exists( $opt{hashref}->{disabled} ) #?? + or grep { $opt{value} == $_->$key() } @records + ) { + delete $opt{hashref}->{disabled}; + $opt{hashref}->{$key} = $opt{value}; + my $record = qsearchs( { + 'table' => $opt{table}, + 'hashref' => $opt{hashref}, + 'extra_sql' => ( $opt{extra_sql} || '' ), + }); + push @records, $record if $record; +} + +my @pre_options = $opt{pre_options} ? @{ $opt{pre_options} } : (); +</%init> |