App-ZofCMS
view release on metacpan or search on metacpan
lib/App/ZofCMS/Plugin/DateSelector.pm view on Meta::CPAN
else {
@out = 0..59;
}
@out = grep { not $_ % $s->{minute_step} } @out;
my $q_value = $q->{ $s->{q_name} . '_' . 'minute' };
return [
map +{
value => $out[$_],
vis_value => sprintf("Minute: %02d", $out[$_]),
selected =>
(
( not defined $q_value and $_ == 0 )
or
( defined $q_value and $q_value eq $out[$_] )
) ? 1 : 0,
}, 0..$#out,
];
}
sub _prepare_second {
my ( $s, $q ) = @_;
my @out;
if ( $s->{interval_max} eq 'minute'
and (localtime $s->{start})[5] == (localtime $s->{end})[5]
and (localtime $s->{start})[4] == (localtime $s->{end})[4]
and (localtime $s->{start})[3] == (localtime $s->{end})[3]
and (localtime $s->{start})[2] == (localtime $s->{end})[2]
) {
@out = (localtime $s->{start})[1] .. (localtime $s->{end})[1];
}
else {
@out = 0..59;
}
@out = grep { not $_ % $s->{second_step} } @out;
my $q_value = $q->{ $s->{q_name} . '_' . 'second' };
return [
map +{
value => $out[$_],
vis_value => sprintf("Second: %02d", $out[$_]),
selected =>
(
( not defined $q_value and $_ == 0 )
or
( defined $q_value and $q_value eq $out[$_] )
) ? 1 : 0,
}, 0..$#out,
];
}
sub _html_template {
return <<'TEMPLATE_END';
<select name="<tmpl_var escape='html' name='select_name'>" class="<tmpl_var escape='html' name='select_class'>"<tmpl_if name='select_id'> id="<tmpl_var escape='html' name='select_id'>"</tmpl_if>><tmpl_loop name='options'>
<option value="<tmpl_var escape='html' name='value'>"<tmpl_if name='selected'> selected</tmpl_if>><tmpl_var escape='html' name='vis_value'></option></tmpl_loop>
</select>
TEMPLATE_END
}
1;
__END__
=encoding utf8
=head1 NAME
App::ZofCMS::Plugin::DateSelector - plugin to generate and "parse" <select>s for date/time input
=head1 SYNOPSIS
In ZofCMS Template or Main Config File
# the Sub plugin is used only for demonstration here
plugins => [ { DateSelector => 2000 }, { Sub => 3000 } ],
plug_date_selector => {
class => 'date_selector',
id => 'date_selector',
q_name => 'date',
t_name => 'date_selector',
start => time() - 30000000,
end => time() + 30000000,
interval_step => 'minute',
interval_max => 'year',
},
plug_sub => sub {
my $t = shift;
$t->{t}{DATE} = "[$t->{d}{date_selector}{localtime}]";
},
In L<HTML::Template> template:
<form...
<label for="date_selector">When: </label><tmpl_var name="date_selector">
.../form>
<tmpl_if name="DATE">
<p>You selected: <tmpl_var name="DATE"></p>
<tmpl_else>
<p>You did not select anything yet</p>
</tmpl_if>
=head1 DESCRIPTION
The module is a plugin for L<App::ZofCMS> that provides means to generate several
C<< <select> >> elements for date and time selection by the user. Plugin also provides means
to "parse" those C<< <select> >>s from the query to generate either epoch time, same string
as C<localtime()> or access each selection individually from a hashref.
This documentation assumes you've read L<App::ZofCMS>, L<App::ZofCMS::Config> and L<App::ZofCMS::Template>
( run in 0.924 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )