<%doc> Example: include( '/elements/select-state.html', #recommended country => $current_country, state => $current_state, #optional prefix => $optional_unique_prefix, onchange => $javascript, disabled => 0, #bool disable_empty => 1, #defaults to 1, disable the empty option empty_label => 'all', #label for empty option disable_countyupdate => 0, #bool - disabled update of the select-state.html style => [ 'attribute:value', 'another:value' ], ); <%init> my %opt = @_; foreach my $opt (qw( state country prefix onchange disabled empty_label svcpart )) { $opt{$opt} = '' unless exists($opt{$opt}) && defined($opt{$opt}); } $opt{'disable_empty'} = 1 unless exists($opt{'disable_empty'}); my $pre = $opt{'prefix'}; my $onchange = ( $opt{'disable_countyupdate'} ? '' : $pre.'state_changed(this); ' ). $opt{'onchange'}; $opt{'style'} ||= []; my $style = scalar(@{$opt{style}}) ? 'STYLE="'. join(';', @{$opt{style}}). '"' : ''; tie my %states, 'Tie::IxHash', states_hash( $opt{'country'} ); if ( $opt{'svcpart'} ) { my $sth = dbh->prepare( 'SELECT DISTINCT state FROM phone_avail WHERE svcnum IS NULL' ) or die dbh->errstr; $sth->execute or die $sth->errstr; my %avail_states = map { $_->[0] => 1 } @{ $sth->fetchall_arrayref }; delete $states{$_} foreach grep ! $avail_states{$_}, keys %states; }