Hallo, Thomas,
wenn ich es richtig verstehe, willst du Kategorienweise sortiert die zugehörigen Datensätze ausgeben, richtig?
Dann folgende Erklärung und dann die Code-Schnipsel (für Kategorien in einem Optionfeld der DB)
1. Die Optionen holen und den Inhalt in eine Liste schreiben
2. Die Liste Elementweise auslesen und für jedes Element die Datenbank durchgehen und dann die Inhalte ausgeben
----schnippels
# Optionfeld holen
#-- Code von Sander - Danke! --
get "Field==!kategorie","spielzeug.fields", "feldbau";
@l_art = split/\n/,$Params; #optionen rausdröseln
shift @l_kategorie; #erstes element entfernen, beschreibung des felds
... irgendwas weiter
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
# ein Optionfeld zur Ausgabe im Template mit diesem Inhalt kann wie folgt gebaut werden:
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
$opt_kategorie = "<select name='input_kategorie='>";
$opt_kategorie. = "<option value=''>Auswahl...";
foreach $t (@l_kategorie) {
$opt_kategorie.= $t eq $input_kategorie ? "<option value=$t selected>$t" : "<option value=$t>$t"; # selected auf übergebenen Wert
} # E foreach optionfeldbau
$opt_kategorie. = "</select>";
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
# DB nach Optionfeld Kategorienweise durchgehen (alles)
foreach $t (@l_art) {ww
get "kategorie==$t", "spielzeug","holart";
while (get_next("holart")){
....nun hier deine Ausgaben oder Schreiben in Variable ....
} # E while_get_next
} # E foreach optionliste
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
# DB nach Einzel-Kategorien durchgehen (nach übergebenen Werten
# aus dem Optionfeld von oben)
get "kategorie==$input_kategorie", "spielzeug","holeinzelart";
while (get_next("holart")){
....nun hier deine Ausgaben oder Schreiben in Variable ....
} # E while_get_next
---- schnappels
Wichtig: Die Kategorien müssen zwingend Einzelworte ohne Leerzeichen sein, sonst haut das nicht hin.
Wenn du mehrere Worte in den Kategorien hast, wäre es günstig, nach "beginnt mit" abzufragen und eindeutige Erste Worte in die Kategorie einzufügen. (s. auch Doku unter http://baseportal.de/cgi-bin/baseportal.pl?htx=/hilfe/baseportal/db_help&help=50) Da muss dann der Wert für das Attribut value im Option-Feld noch mittels Perl generiert werden, evtl. so:
---- schnipp
$opt_val = substr $t,0,index $t, ' '; # erstes Wort bis zum Leerzeichen
---- schnapp
im Einsatz für den dynamischen Aufbau des Optionfeldes und dann das Holen der entsprechenden Datensätze könnte das so aussehen:
---- schnippels
# Optionfeld bauen (vorher Liste @l_kategorie füllen!)
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
$opt_kategorie = "<select name='input_kategorie='>";
$opt_kategorie. = "<option value=''>Auswahl...";
foreach $t (@l_kategorie) {
my $opt_val = substr $t,0,index $t, ' ';
$opt_kategorie.= $opt_val eq $input_kategorie ? "<option value=$opt_val selected>$t" : "<option value=$opt_val>$t"; # selected auf übergebenen Wert
} # E foreach optionfeldbau
$opt_kategorie. = "</select>";
.... irgendwas weiter
# Datensätze holen für ans Template übergebenen Parameter $input_kategorie
get "kategorie~=$input_kategorie", "spielzeug","holeinzelart";
while (get_next("holart")){
....nun hier deine Ausgaben oder Schreiben in Variable ....
} # E while_get_next
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
Hoffe, es hilft dir weiter und ich hab keine Fehler in den Scriptteiltext gebaut ;-)
Ruben