Beitrag von Mattias (110 Beiträge) am Freitag, 28.März.2003, 12:39.
Variablenverlust beim Blättern in Suchergebnissen (Perl)
Hallo, bin noch ziemlicher Newbie in Perl. Habe eine Liste mit einem Suchformular. Die Blätterfunktion (thx@Raphael) habe ich mir wie folgt angepasst:
$rtag="&_Datum_Tag~=$tag" if $tag;
$rmonat="&_Datum_Monat~=$monat" if $monat;
$rjahr="&_Datum_Tag~=$jahr" if $jahr;
$rort="&Ort~=$ort" if $ort;
$rsuch="&_fullsearch~~$such" if $such;
$rparam="$rtag$rmonat$rjahr$rort$rsuch";
if($rparam==""){
$rquery=$_amount_all;
}else{
$rquery=$_amount_query;
}
my $newrange=$_range+$_range_length;
my $oldrange=$_range-$_range_length;
$oldrange=0 if $oldrange<0 && $oldrange>-$_range_length;
$BrowseLine ="<tr><td colspan=\"3\" align=\"center\">[ ";
if ($oldrange>=0) {
$BrowseLine .= "<a href=\"$BPpath/$basepath&range=$oldrange,$_range_length$rparam\">Vorherige Seite</a> | "; }
else {
$BrowseLine .= "Vorherige Seite | "; }
$BrowseLine .= "<a href=\"#suchen\">suchen</a> | ";
if ($newrange<$rquery) {
$BrowseLine .= "<a href=\"$BPpath/$basepath&range=$newrange,$_range_length$rparam\">Nächste Seite</a> ]"; }
else {
$BrowseLine .= "Nächste Seite ]"; }
$BrowseLine .= "</td></tr>";
Mittels $rparam und $rquery gelingt es mir, die Suchbegriffe in die Blätterfunktion einzubinden, aber nur ein Mal. Blättere ich weiter, sind sie weg, und es erscheinen wieder alle Einträge. Nun kann ich wohl die Variablen irgendwo in einem anderen Frame oder mit JS zwischenspeichern, aber vielleicht kennt jemand von euch eine einfachere Lösung? Über die "Suche im Forum" habe ich jedenfalls nichts gefunden. Danke!
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 28.März.2003, 13:01.
Re: Variablenverlust beim Blättern in Suchergebnissen (Perl)
Antworten
Beitrag von Mattias (110 Beiträge) am Freitag, 28.März.2003, 14:14.
Vielen Dank
für die schnelle Antwort!
Antworten
Beitrag von Mattias (110 Beiträge) am Freitag, 28.März.2003, 14:40.
Sorry, funzt nicht.
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 28.März.2003, 15:24.
Re: Sorry, funzt nicht.
na dann bräuchten wir etwas mehr code:
wie werden die daten übergeben?
was passiert davor, dahinter...
Sander
Antworten
Beitrag von Mattias (110 Beiträge) am Freitag, 28.März.2003, 16:17.
Re: Sorry, funzt nicht.
Okay, also das ganze Dingens läuft über ein Form, das die Variablen an die selbe Seite übergibt:
<form action="http://..." method="post" enctype="multipart/form-data">
Die Eingabe erfolgt auch ganz normal über:
<input name="ort:="> usw.
<input type="submit" value="Suchen">
Nichts Aufregendes also. Nach dem Submit geht's auf der selben Seite mit Perl los:
init "events";
if (!($_range_length)) {
$_range_length=$browseamount;
$_range=0; }
$rparam.="&_Datum_Tag~=$tag" if $tag;
$rparam.="&_Datum_Monat~=$monat" if $monat;
$rparam.="&_Datum_Tag~=$jahr" if $jahr;
$rparam.="&Ort~=$ort" if $ort;
$rparam.="&_fullsearch~~$such" if $such;
if($rparam==""){
$rquery=$_amount_all;
}else{
$rquery=$_amount_query;
}
my $newrange=$_range+$_range_length;
my $oldrange=$_range-$_range_length;
$oldrange=0 if $oldrange<0 && $oldrange>-$_range_length;
$BrowseLine ="<tr><td colspan=\"3\" align=\"center\">[ ";
if ($oldrange>=0) {
$BrowseLine .= "<a href=\"$BPpath/$basepath&range=$oldrange,$_range_length$rparam\">Vorherige Seite</a> | "; }
else {
$BrowseLine .= "Vorherige Seite | "; }
$BrowseLine .= "<a href=\"#suchen\">suchen</a> | ";
if ($newrange<$rquery) {
$BrowseLine .= "<a href=\"$BPpath/$basepath&range=$newrange,$_range_length$rparam\">Nächste Seite</a> ]"; }
else {
$BrowseLine .= "Nächste Seite ]";
}
$BrowseLine .= "</td></tr>";
$ort =~ s/\ /\\\ /g;
get "_Datum_Tag==$tag&_Datum_Monat==$monat&_Datum_Jahr==$jahr&Ort~=$ort&_fullsearch~~$such sort=Datum range=$_range,$_range_length", "events", "DATA";
if($_amount_query==1){
$eintr="ausgewählter Eintrag";
}else{
$eintr="ausgewählte Einträge";
}
out "<tr><td colspan=\"3\" align=\"center\"><h3>( $_amount_query $eintr )</h3></td></tr>";
out "<tr><td colspan=\"3\"><br></td></tr>";
out $BrowseLine;
out "<tr><td colspan=\"3\"><br></td></tr>";
out "<tr><td colspan=\"2\" class=\"s\">Wann:</td><td class=\"s\">Wo:</td></tr>";
while (get_next("DATA"))
{
$dat=datum($Datum,"Tag. Monatname Jahr");
$zeit=datum($Uhrzeit,"Stunde:Minute");
if(index($Karten,"http://")==0){
$Karten="<a href=\"$Karten\" target=\"_blank\">$Karten</a>";
}
out "<tr bgcolor=\"#cceedd\"><td>$dat</td><td>$zeit Uhr</td><td>$Ort</td></tr><tr><td colspan=\"3\">$Veranstaltung</td></tr>";
out "<tr><td>Karten:</td><td colspan=\"2\">$Karten</td></tr>" if $Karten;
out "<tr><td>Email:</td><td colspan=\"2\"><a href=\"mailto:$Mail\">$Mail</a></td></tr>" if $Mail;
out "<tr><td colspan=\"3\"><br></td></tr>";
}
out $BrowseLine;
Wie gesagt, ohne Abfrage geht die Blätterfunktion tadellos, und mit dem Code, wie ich ihn jetzt hab, wird auch das Suchergebnis korrekt angezeigt, und man kann einmal nach vorn blättern. Dann aber sind die übergebenen Variablen weg. Klar, man könnte sie auch in einem anderen Form speichern und dieses mit der Blätterfunktion abschicken, dann wären sie wieder da. Aber ich denke, da gibt's bestimmt eine viel einfachere Lösung.
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 28.März.2003, 16:23.
Re: Sorry, funzt nicht.
soooo: du mußt die vars anders übergeben
<input name="ort="> usw
dann stehen sie in %_get
da du bei get die abfrage schon fertig eingebaut hast, müssen die vars wieder im %_get landen. mit
$rparam.="&_Datum_Tag~=$tag" if $tag;
landen sie im %_sel.
Also
$rparam.="&tag=$_get{tag}" if $_get{tag};
$rparam.="&monat=$_get{monat}" if $_get{monat};
Hier ist wichtig, das die vars nur mit einem = übergeben werden.
Sander
Antworten
Beitrag von Mattias (110 Beiträge) am Freitag, 28.März.2003, 17:03.
Ich krieg's einfach nicht hin
Das mit $_get{xxx} hatte ich schon probiert, auch mit $_cgi{xxx} und sogar mit $_put{xxx}. Jetzt hab ich aus dem Inputnamen mal das ":" rausgenommen. Nun wird mit $_get{xxx} der Ort ein Mal übergeben (wie vorher), dann ist wieder zappenduster.
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 28.März.2003, 20:20.
Re: Ich krieg's einfach nicht hin
bitte poste das komplette form mit deinem kompletten Code...
ist doch gar nicht so schwer :-)
Antworten
Beitrag von Mattias (110 Beiträge) am Freitag, 28.März.2003, 20:53.
Juhuu, hab's geknackt!!!
Hab mir die Vars mal der Reihe nach ausgeben lassen. Das Problem war, dass $ort nach dem Submit im %_get landet und nach dem Blättern im %_sel. Hab ich also je eine Zeile mit $_get{xxx} und eine mit $_sel{xxx} gemacht, und jetzt passt es. Knifflig war noch der Zeitpunkt der Abfrage, der muss direkt hinter der Definition von $_range_length liegen, sonst verwurschtelt mir die Blätterfunktion die Variablen.
Trotzdem vielen Dank, der Tipp mit den Hashes war Gold wert! Gruß Mattias.
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 28.März.2003, 21:12.
Re: Juhuu, hab's geknackt!!!
das er in %_sel landet liegt bestimmt daran, das du im link == stehen hast
Antworten
Beitrag von Mattias (110 Beiträge) am Freitag, 28.März.2003, 15:14.
Sorry, funzt nicht.
Antworten