Kostenlose Unterprogramme bei123.de
Datenbank-Design & bp-Programmierung & Webtools
Webmaster: Harald Fehde & Website: bei123.de

Weitere kostenlose Codeschnipsel und Anwendungen finden Sie:
Alles aus baseportal herausholen bei123.de

list_sort_optionen

Wie erstelle ich eine Liste gruppiert nach Optionen und sortiert nach einem Feld?

Eine Auto-Datei dient als Beispiel für die Umsetzung. Die Datei hat die Felder Marke, Typ, Farbe, Tueren ,Preis(siehe unten). Nachfolgend ein Beispiel, das mit dem Unterprogramm list_sort_optionen durch entsprechende Parameter-Übergabe realisiert wurde.
Als Ergebnis wird die nachfolgende übersichliche Liste mit Farbwechsel je Zeile ausgegeben - über ein verlinktes Feld (hier [Typ]) gelangt man zur Detailansicht (siehe unten).
In diesem Beispiel wird zudem über das Feld [Marke] gruppiert sowie jeweils über das Feld [Preis] summiert - und "Warenwert je Marke" ermittelt. (siehe auch sum_sort_grp)
Felder, Spaltenzahl und Farbwechsel der Zeilen können mit übergebenen Parametern gesteuert werden.


Das Autohaus bei123 hat folgende Angebote:


(0) | Warenwert in EURO: 0,00


2003.03.28,00:00.00#5 (0) | Warenwert in EURO: 0,00


BMW (4) | Warenwert in EURO: 7.000,00

10.00 2.000,003S 2.000,003S 2.000,00kein 1.000,00...

Gelb (2) | Warenwert in EURO: 6,00

10.00 3,0010.00 3,00.........

grün (0) | Warenwert in EURO: 0,00


°grün (0) | Warenwert in EURO: 0,00


Programmcode/Parameter

An das verantwortliche Unterprogramm "list_sort_optionen" werden insgesamt 14 Parameter übergeben:

1. )Dateiname, hier [Autos]
2. )Optionsfeld, hier [Marke] - danach wird gruppiert
3. )Listenfeld, hier [Typ] - wird auf Id zur Detailansicht verlinkt
4. )Detail-htx, hier [/bei123/Service/Autos] - Aufruf des Templates für die Detailansicht
5. )Spaltenzahl, hier [5]
6. )Font-Family, hier [Arial]
7. )Font-Größe des Listenfeldes, hier [1]
8. )Font-Größe des Optionsfeldes, hier [2]
9. )Hintergrundfarbe des Opt.-Feldes, hier[#e6e6e6]
10.)Hintergrundfarbe Zeile1, hier [#ccccff]
11.)Hintergrundfarbe Zeile2, hier [#ffd700]
12.)Infofeld für weitere Kurzinfo, hier [Preis]
13.)Summenfeld, über das je Gruppe summiert wird, hier [Preis]
14.)Summen-Text, hier [Warenwert in EURO: ]

Der nachfolgend gelb unterlegte Text zeigt den Programmcode - zunächst der Aufruf des Unterprogramms mit den entsprechenden Parametern:

<html><body>
<perl>&list_sort_optionen("Autos", "Marke", "Typ", "/bei123/Service/Autos", 5, "Arial", 1, 2, "#e6e6e6", "#ccccff","ffd700","Preis","Warenwert in EURO: ");
</perl>

#---hier das folgt das Unterprogramm:

<perl>sub list_sort_optionen
{
$db=$_[0];
$opt_feld=$_[1];
$sort_feld=$_[2];
$detail_htx=$_[3];
$Zahl_Spalten=$_[4];
$font_family=$_[5];
$font_size=$_[6];
$opt_size=$_[7];
$opt_bg_color=$_[8];
$bg_zeile1=$_[9];
$bg_zeile2=$_[10];
$info_feld=$_[11];
$sum_feld=$_[12];
$sum_text=$_[13];
$rec_link="../cgi-bin/baseportal.pl?htx=$detail_htx&cmd=all";
$width=100/$Zahl_Spalten;

#----die Datei wird über get angesprochen:

get "Id==* sort=$opt_feld,$sort_feld,$info_feld", "$db";
while(get_next("$db"))
{
$opt_namen{$$opt_feld}.="$$sort_feld#"; # der Option die entsprechenden Werte zuordnen
$satz_id{$$opt_feld}.="$Id#"; # der Option die Id Werte zuordnen
$info_feld{$$opt_feld}.="$$info_feld#"; # Ein Feld für Zusatzinformationen
$opt_sum{$$opt_feld}+="$$sum_feld"; # gruppiert summieren
}
foreach (sort(keys %opt_namen))
{@opt_namen=split /#/,$opt_namen{$_}; @satz_id=split /#/,$satz_id{$_}; @info_feld=split /#/,$info_feld{$_};
$l_Option=$_;
$opt_summe=$opt_sum{$_};

# Zahl formartieren mit Unterprogramm FormatZahl

$opt_summe=&FormatZahl($opt_summe,2);# Decimal-Zahl

$cnt_Option=0;
$werte_liste="";
$lcnt=0;
$zcnt=0;
$TD="";
foreach $rec_val (@opt_namen)
{
$cnt_Option++;
$total=@opt_namen;
$rec_id=shift@satz_id;
$info_id=shift@info_feld;

# Preis ist eine Zahl, deshalb ebenfalls mit dem Unter-
# programm FormatZahl formartiren

$info_id=&FormatZahl($info_id,2);# Decimal-Zahl

$lcnt++;
if($total eq $cnt_Option)#-Optionsende feststellen/Tabelle füllen--
{
$rest=($total - ($Zahl_Spalten * int($total/$Zahl_Spalten)));
$fehl_zahl=($Zahl_Spalten-$rest);
$TD="<td width=$width><font face='$font_family' size= $font_size>...</font></td>" x $fehl_zahl if($fehl_zahl<$Zahl_Spalten);
}
$Za=""; # Zeilenanfang
$Ze=""; # Zeilenense
if($lcnt > $Zahl_Spalten)
{
$lcnt=1;
$zcnt++;
}
$zcnt=0 if($zcnt eq 2);#- Farbwechsel-
if($lcnt eq 1)
{
$trcolor="$bg_zeile1" if($zcnt eq 0);
$trcolor="$bg_zeile2" if($zcnt eq 1);
$Za="<tr valign=top bgcolor=$trcolor>";
}
$Ze="</tr>" if($lcnt eq $Zahl_Spalten);
$Ze="$TD</tr>" if($TD ne "" ); # Tabelle füllen

#----Ausgabe der Werteliste je Option definieren:

$werte_liste.="$Za<td width=$width%><font face='$font-family' size=$font_size><a href=\"$rec_link&Id=$rec_id\">$rec_val<a/> $info_id</font></td>$Ze";
}#------ ende foreach $n (@opt_namen)
out <<EOF;

#----Werte in Tabellenform ausgeben

<br><table border=0 width=100% cellpadding=0 cellspacing=1 bgcolor="$opt_bg_color">
<tr><td align=left bgcolor="$opt_bg_color">
<p><font face='$font_family' size=$opt_size><b>$l_Option ($cnt_Option) | $sum_text $opt_summe </b></font>
</td></tr>
<tr valign=top><td align=left>
<table border=0 width=100% cellspacing=0 cellpadding=3>$werte_liste</table>
</td></tr>
</table>
EOF
}#------- ende foreach (sort(keys %opt_namen))
}
</perl>

# Unterprogramm für die Anzeige von Decimalstellen als Komma
# und von Punkten an jeder 3.Stelle vor dem Komma.

<perl>sub FormatZahl
{my ($Zahl, $Stellen) = @_ ,my ($s, $i) = ("", 0);
$Zahl = sprintf("%.$Stellen"."f", $Zahl) if ($Stellen > 0);($Zahl, $Komma) = split(/\./, $Zahl);for ($i=1; $i<=length($Zahl); $i++){$s=(($i % 3 == 0) && ($i<length($Zahl))? "." : "").substr($Zahl,-$i,1).$s;}
$Komma = "," . $Komma if length($Komma);
return $s . $Komma;
}
</perl>
</body></html>

powered in 0.02s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!