hallo, HOBols,
ähm - ich schmeiss dir mal ein paar Zeilen Code rein, die sind bei mir gleich in nem globalen Template. Mit dem Subaufruf kannst du einfach die Optionfelder für die einzelnen Datumswerte als Pulldown nutzen.
Erst mal die Subs, unten dann wie sie aufgerufen werden:
-----schnipp----
# Erst mal die Datumsteilwerte in eigene Variablen schreiben
$date = jetzt;
# -------- Datumsteile in Var schreiben ------- #
$jar= datum ("$date","Jahr"); $mon = datum ("$date","Monat");
$dag = datum ("$date", "Tag"); $stund = datum ("$date", "Stunde");
$min = datum ("$date", "Minute"); $sek = datum ("$date", "Sekunde");
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
sub opt_min
{# Syntax: &opt_min (minutenzahl) ohne Parameter aktueller Minute selected
# Parameterwerte werden selected in Optionfelder gesetzt
# ........ Optionfeld Minutenzahl ........ #
my $_min = ($_[0] ne "" ? $_[0] : $min); my @lz_min = (0..60); my $_a_opt_min;
# ........ Optionfeld Minutenzahl bauen ........ #
foreach (@lz_min)
{ $_=(length($_)==1 ? "0$_" : $_); # fuerende Null bei einstelligen Werten einbauen (Danke Sander!)
if ($_ eq $_min)
{$_a_opt_min.="<option selected value=\"$_\">$_</option>"
}else
{$_a_opt_min.="<option value=\"$_\">$_</option>";
}
}
return ($_a_opt_min);
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# ........ Optionfeld für Stundenzahlen ........ #
sub opt_stund
{# Syntax: &opt_stund (Stundenzahl) ohne Parameter aktuelle Stunde selected
# Parameterwerte werden selected in Optionfelder gesetzt
my $_stund = ($_[0] ne "" ? $_[0] : $stund); my @lz_stund = (0..24); my $_a_opt_stund; # Doppelqotes aus Übergabevar entfernen
# ........ Optionfeld Tageszahl ........ #
foreach (@lz_stund)
{ $_=(length($_)==1 ? "0$_" : $_); # fuerende Null bei einstelligen Werten einbauen (Danke Sander!)
if ($_ eq $_stund) {
$_a_opt_stund.="<option selected value=\"$_\">$_</option>";
}else{
$_a_opt_stund.="<option value=\"$_\">$_</option>";
}
}
return ($_a_opt_stund);
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# ........ Optionfeld für Tageszahlen ........ #
sub opt_dag
{# Syntax: &opt_dag (tagesdatum) ohne Parameter aktueller Tag selected
# Parameterwerte werden selected in Optionfelder gesetzt
my $_dag = ($_[0] ne "" ? $_[0] : $dag); my @lz_dag = (1..31); my $_a_opt_dag;
# ........ Optionfeld Tageszahl ........ #
foreach (@lz_dag)
{
if ($_ eq $_dag) {
$_a_opt_dag.="<option selected value=\"$_\">$_</option>";
}else{
$_a_opt_dag.="<option value=\"$_\">$_</option>";
}
}
return ($_a_opt_dag);
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# ........ Optionfeld für Monatszahlen ........ #
sub opt_mon
{# Syntax: &opt_mon (monatszahl) ohne Parameter aktueller Monat selected
# Parameterwerte werden selected in Optionfelder gesetzt
# ........ Optionfled Monatszahl ........ #
my $_mon = ($_[0] ne "" ? $_[0] : $mon); my @lz_mon = (1..12); my $_a_opt_mon;
foreach (@lz_mon)
{
if ($_ eq $_mon) {
$_a_opt_mon.="<option selected value=\"$_\">$_</option>";
}else{
$_a_opt_mon.="<option value=\"$_\">$_</option>";
}
}
return ($_a_opt_mon);
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# ........ Optonfeld für Jahreszahlen ........ #
sub opt_jar
{# Syntax: &opt_jar (jahreszahl) ohne Parameter aktuelles Jahr selected
# Parameterwerte werden selected in Optionfelder gesetzt
my $_jar = ($_[0] ne "" ? $_[0] : $jar); my @lz_jar = (($jar-10)..($jar+10)); my $_a_opt_jar;
# ........ Optionfeld Jahreszahl ........ #
foreach(@lz_jar)
{
if ($_ eq $_jar){
$_a_opt_jar.="<option selected value=\"$_\">$_</option>";
}else{
$_a_opt_jar.="<option value=\"$_\">$_</option>";
}
}
return ($_a_opt_jar);
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
-----schnapp------
So, die Syntax für den Aufruf ist jeweils beschrieben, nun kommt es nur darauf an, die Optionfelder als Formularelemente richtig einzubauen, hier mal ein Beispiel für die Serie mit dem Feldname "Datum":
-----schnipp-----
out<<EOF;
.....
<tr>
<td colspan=2 class=klein>
<span class=dunkel>
Datum: <br>
<select class="muss" name="_Datum_Tag:=" size=1 class=select.weiss>
<option>Tag</option>
${ \&opt_dag($s_dag) }
</select>
<select class="muss" name="_Datum_Monat:=" size=1 class=select.weiss>
<option>Monat</option>
${ \&opt_mon($s_mon) }
</select>
<select class="muss" name="_Datum_Jahr:=" size=1 class=select.weiss>
<option>Jahr</option>
${ \&opt_jar($s_jar) }
</select>
</td>
<td colspan=2 class=klein valign=top>
<span class=dunkel>Zeit Beginn: <br>
<select class="muss" id="_Datum_Stunde:=" name="_Datum_Stunde:=" size=1>
<option value="">Stunde</option>
${ \&opt_stund($s_stund) }
</select>
<select class="muss" id="_Datum_Minute:=" name="_Datum_Minute:=" size=1>
<option value="">Minute</option>
${ \&opt_min($s_min) }
</select>
</span>
</td>
</tr>
....
EOF
---- schnapp ----
Die Subroutinen werden hier jeweils interpoliert im EOF-Block aufgerufen.
Wenn dir das zu doof ist, kannst du auch einfach den Spass an na Variable zuweisen in etwa so:
$anz_opt_dag = &opt_dag();
Beachten musst du, dass die Feldwerte für ein Datumsfeld "auseinandergepflückt" werden müssen - in der Art _Feldname_Tag:= (oder wenn dus nicht gleich in den Put-Hash haben willst _Feldname_Tag= hier musst du dann aber beim Speichern oder Ändern die Werte noch an die richtige Stelle schreiben - ist etwas komplexer als mit Feldname:=, gibts aber auch ne elegante Lösung für - zumal man mit mod keine Datenfeldinhalte löschen kann und mittels chg bei nicht übergebene Feld-Variablen-Inhalten die Feldinhalte von vorhandenen Datensätzen einfach gelöscht werden... - ich denk mal, dass das von Christoph in der lang erwarteten neuen Version richtig gut gelöst sein wird.... ;-)
Im obigen Beispiel wird vorher aus einer DB ein Datensatz gelesen und die Inhalte des Datumsfeldes in seine Einzelteile in ner neuen Variablen $s_"Datumsteil" gespeichert und dann als selected der jeweilige Wert genommen (falls er vorhanden ist) - das ganze deshalb, um ein Formular nur einmal zu bauen und je nach Parametern im Templateaufruf entweder das aktuelle Datum selected zu setzen (bei Neueingabe eines Datensatzes) oder aber aus vorhandenen Daten, wenn diese geändert werden sollen....
Hoffe es hilft dir weiter
Gruss
Ruben