Beitrag von bernd (25 Beiträge) am Sonntag, 31.Juli.2005, 20:20.
versuch an einer einfachen blätterfunkiton
guten abend,
ich versuche mich gerade an einer einfachen blätterfunktion.
durch range=0,5 lege ich fest, in welchen blöcken geblättert werden soll.
im link lege ich durch kundennr=$kundennr fest, daß nur die daten genommen werden, wo dessen kundennr drinsteht.
die seite wird auch durch ergänzung der kundennr aufgerufen.
$_link$append&kundennr=$kundennr&range=$oldrange,$_range_length
ich bekomme auch die weiter links angezeigt, doch es will einfach nicht blättern!
bernd
----------------
get "kundennr==$kundennr sort=datum" range=0,5, "artikel", "erghash";
....
my $newrange=$_range+$_range_length;
my $oldrange=$_range-$_range_length;
$oldrange=0 if $oldrange<0 && $oldrange>-$_range_length;
out "<center>";
out "<< <a href=\"$_link$append&kundennr=$kundennr&range=$oldrange,$_range_length\">Zurück</a> " if $oldrange>=0;
out "<a href=\"$_link$append&kundennr=$kundennr&range=$newrange,$_range_length\">Weiter</a> >>" if $newrange<$_amount_query;
out "</center>";
--------------------------
Antworten
Beitrag von Claus (4645 Beiträge) am Sonntag, 31.Juli.2005, 21:04.
Re: versuch an einer einfachen blätterfunkiton
das Beispiel aus der Doku kannste knicken, habe ich auch mal 1:1 probiert. funzt nicht!!
Habe ein paar Stunden gebraucht, um das korrekt anzupassen.
Wünsche dir viel Spaß dabei, denn ohne perl-Kenntnisse kommst du da eh nicht weiter.
Bin ja grundsätzlich immer bereit zu helfen, aber alles hat mal seine Grenze.
wenn ich jetzt noch Doku-Teile anpassen muß ist einfach mal "Schulz"!
Dafür bin ich nicht zuständig.
Auch wenn ich mir jetzt wieder den Zorn zuziehe, aber auch unbequeme Dinge müssen mal gesagt werden.
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 1.August.2005, 00:58.
Re: versuch an einer einfachen blätterfunkiton
Selbstverständlich funzt der Blätter-Code aus der Doku... Genauso wie er da steht...
Antworten
Beitrag von Olaf (382 Beiträge) am Montag, 1.August.2005, 00:22.
Re: versuch an einer einfachen blätterfunkiton
Na, ich finde es auch nicht gut wenn Einträge in der BIB noch mit Fehlern bestückt sind, aber vielleicht haben die Ersteller das noch immer nicht bemerkt...
Ich habe hier mal einen Quellcode, den Du mal testen solltest.
Vielleicht liegt es auch an Deinem get-Befehl?
# neu blättern-Zeichen
my $newrange=$_range+$_range_length;
my $oldrange=$_range-$_range_length;
$oldrange=0 if $oldrange<0 && $oldrange>-$_range_length;
out "<< <a href=\"$_link&range=$oldrange,$_range_length\"onmouseover='window.status=\"neuere Infos\";return true;'onmouseout='window.status=\"Bernds Seite\";return true;'onmousedown='window.status=\"Bernds Seite\";return true;'><font color=\"yellow\">neuere Infos</a></font> " if $oldrange>=0;
out " <a href=\"$_link&range=$newrange,$_range_length\"onmouseover='window.status=\"ältere Infos\";return true;'onmouseout='window.status=\"Bernds Seite\";return true;'onmousedown='window.status=\"Bernds Seite\";return true;'><font color=\"yellow\">ältere Infos</a></font> >>" if $newrange<$_amount_query;
# neu blättern-Zeichen
Ich benutze Tinas-Blättern-BIB-Beispiel, aber ich weiss nicht, ob ich da auch etwas verbessern oder ergänzen musste. Aber im Forum/BIB ist es wohl mehr gefragt.
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 1.August.2005, 00:58.
Re: versuch an einer einfachen blätterfunkiton
Ändere die Zeile
get "kundennr==$kundennr sort=datum" range=0,5, "artikel", "erghash";
in
get "kundennr==$kundennr sort=datum range^=0,5", "artikel", "erghash";
;-)
Antworten
Beitrag von bernd (25 Beiträge) am Montag, 1.August.2005, 02:09.
Re: versuch an einer einfachen blätterfunkiton
hallo,
am range^=0,5 liegt es nicht. da werden alle einträge angzeigt.
bei range=0,5 paßt das schon.
es liegt vermutlich am erweitern des blätterlinks um die $kundennr
das kriegt er nicht gerafft.
wenn ich die seite mit www......&kundennr=123 aufrufe, soll auch nur
in den einträgen mit kundennr 123 geblättert werden und nicht in allen.
-------------
out "<< <a href=\"$_link$append&kundennr=$kundennr&range=$oldrange,$_range_length\">Zurück</a> " if $oldrange>=0;
out "<a href=\"$_link$append&kundennr=$kundennr&range=$newrange,$_range_length\">Weiter</a> >>" if $newrange<$_amount_query;
--------------
guten nacht
bernd
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 1.August.2005, 02:15.
Re: versuch an einer einfachen blätterfunkiton
Wenn Du bei der Abfrage
range=0,5
schreibst, dann werden immer die ersten 5 Einträge angezeigt und Blättern kann nicht funktionieren.
range^=0,5
holt die ersten 5 Einträge nur dann, wenn nichts anderes über die URL gesetzt wird.
Wie lautet denn Dein kompletter Code, der Fehler liegt woanders...
Antworten
Beitrag von bernd (25 Beiträge) am Montag, 1.August.2005, 11:42.
Re: versuch an einer einfachen blätterfunkiton
guten morgen,
hier mal mein code:
<perl>
get "kundennr==$kundennr", "kunden", "erghash2";
while(get_next("erghash2")){
out<<EOF;
<tr><td>
<b>$kundennr</b><br>
<b>$name</b><br>
$strasse<br>
$plz $ort<br>
<hr>
</td>
</table>
EOF
}
get "kundennr==$kundennr sort=datum range=^0,5", "artikel", "erghash";
while(get_next("erghash")){
@l_datums = ("$datum");
foreach my $dat(sort @l_datums){
$dat=datum("$datum", "Tag0.Monat0.Jahr2");
out<<EOF;
<table width=100%>
<tr>
<td><b>$artikelname</b> (Kundennr.: $kundennr)<br>
Datum: $dat<br>
Beschreibung:<br>
</td></tr>
my $newrange=$_range+$_range_length;
my $oldrange=$_range-$_range_length;
$oldrange=0 if $oldrange<0 && $oldrange>-$_range_length;
out "<center>";
out "<a href=\"$_link$append&kundennr=$kundennr&range=$oldrange,$_range_length\">Zurück</a> " if $oldrange>=0;
out "<a href=\"$_link$append&kundennr=$kundennr&range=$newrange,$_range_length\">Weiter</a>" if $newrange<$_amount_query;
out "</td></tr>";
</perl>
die seite würde man dann so aufrufen:
http://www.baseportal.de/cgi-bin/baseportal.pl?htx=/bernd99/muster/artikel&kundennr=123
bernd
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 1.August.2005, 14:35.
Re: versuch an einer einfachen blätterfunkiton
Schau mal, Du hast =^ geschrieben statt ^=:
get "kundennr==$kundennr sort=datum range=^0,5", "artikel", "erghash";
Richtig ist:
get "kundennr==$kundennr sort=datum range^=0,5", "artikel", "erghash";
Mmh, dann noch was: Du lässt Dir die Einträge sortiert nach "datum" geben und sortierst sie dann selber nochmal um - ebenfalls nach "datum"... Das ist unnötig ;-) D.h. Die folgenden beiden Zeilen kannste rausschmeissen:
@l_datums = ("$datum");
foreach my $dat(sort @l_datums){
...
Und weiter unten dann eine schliessende geschweifte Klammer:
Antworten
Beitrag von bernd (25 Beiträge) am Montag, 1.August.2005, 15:57.
Re: versuch an einer einfachen blätterfunkiton
daran liegt es aber nicht :-(
bei folgenden link müßte eine seite mit 5 artikeln und dann ein weiter.link
zum 6. artikel sein.
es werden aber alle 6 auf einmal angezeigt und der weiter-link funktioniert nicht.
abgesehen davon dürfte ja auch kein zurück-link da sein?!?
http://www.baseportal.de/cgi-bin/baseportal.pl?htx=/bernd99/muster/artikel&kundennr=123
-------------------------
<perl>
get "kundennr==$kundennr", "kunden", "erghash2";
while(get_next("erghash2")){
out<<EOF;
<tr><td>
<b>$kundennr</b><br>
<b>$name</b><br>
$strasse<br>
$plz $ort<br>
<hr>
</td>
</table>
EOF
}
get "kundennr==$kundennr sort=datum range^=0,5", "artikel", "erghash";
while(get_next("erghash")){
$dat=datum("$datum", "Tag0.Monat0.Jahr2");
out<<EOF;
<table width=100%>
<tr>
<td><b>$artikelname</b> (Kundennr.: $kundennr)<br>
Datum: $dat<br>
Beschreibung:<br>
</td></tr>
<tr><td>
EOF
}
my $newrange=$_range+$_range_length;
my $oldrange=$_range-$_range_length;
$oldrange=0 if $oldrange<0 && $oldrange>-$_range_length;
out "<center>";
out "<a href=\"$_link$append&kundennr=$kundennr&range=$oldrange,$_range_length\">Zurück</a> " if $oldrange>=0;
out "<a href=\"$_link$append&kundennr=$kundennr&range=$newrange,$_range_length\">Weiter</a>" if $newrange<$_amount_query;
out "</td></tr>";
</perl>
--------------------------------------------------
Antworten
Beitrag von hempelr (1976 Beiträge) am Montag, 1.August.2005, 18:57.
Re: versuch an einer einfachen blätterfunkiton
nagut...
Erstens: HTML haut nicht hin, du machst für jeden DS ne Tabelle auf, aber nirgendwo eine zu
Zweitens: Bei mehreren get in einem Template (auch bei relationalem get) ist es nach meiner Erfahrung sinnvoll, Parameter nicht nach Systemvariablen zu benennen, sondern eigene Namen zu geben. Bspw. wird hier $_range und $range_length immer durch das get auf die Kundendatei mit 0 überschrieben, somit hat der Scriptblock fürs Blättern nix zum rechnen und der Anzeigebereich ist immer falsch.
Man kann bei mehreren get offenbar keine bp-internen Parameter direkt mit übergeben
Probiers mal so:
---schnipp
<perl>
# Werte für Range vorbelegen
my $ra ||= 0;
my $ra_l ||= 5;
get "kundennr==$kundennr", "kunden", "erghash2";
while(get_next("erghash2")){
out<<EOF;
<table width=100%>
<tr><td>
<b>$kundennr</b><br>
<b>$name</b><br>
$strasse<br>
$plz $ort<br>
<hr>
</td>
</table>
EOF
} # E while_get_next
out "<table width=100%>";
get "kundennr==$kundennr sort=datum range=$ra,$ra_l", "artikel", "erghash";
while(get_next("erghash")){
$dat=datum("$datum", "Tag0.Monat0.Jahr2");
out<<EOF;
<tr>
<td><b>$artikelname</b> (Kundennr.: $kundennr)<br>
Datum: $dat<br>
Beschreibung:<br>
$beschreibung</td>
</td></tr>
<tr><td>
EOF
} # E While_get_next
my $newrange=$_range+$_range_length;
my $oldrange=$_range-$_range_length;
$oldrange=0 if $oldrange<0 && $oldrange>-$_range_length;
out "<center>";
out "<a href=\"$_link&kundennr=$kundennr&ra=$oldrange&$ra_l=$ra_l\">Zurück</a> " if $oldrange>=0;
out "<a href=\"$_link&kundennr=$kundennr&ra=$newrange&$ra_l=$ra_l\">Weiter</a>" if $newrange<$_amount_query;
out "</td></tr></table>";
</perl>
---schnapp
Nicht getestet!
Hoffe es hilft dir
Ruben
Antworten
Beitrag von hempelr (1976 Beiträge) am Montag, 1.August.2005, 19:01.
sorry - kleiner Fehler - Re: versuch an einer einfachen blätterfunkiton
die Linkzeilen bitte korrigieren, es darf nicht heissen ..&$ra_l=$ra_l... sondern &ra_l=$ra_l, also nach dem & kein $
Antworten
Beitrag von bernd (25 Beiträge) am Montag, 1.August.2005, 19:32.
Re: versuch an einer einfachen blätterfunkiton
schade.
es werden zwar die ersten 5 angezeigt und auch der weiter-link, doch bei klick darauf, bleiben die selben 5 einträge angezeigt.
http://baseportal.de/cgi-bin/baseportal.pl?htx=/bernd99/muster/artikel&kundennr=123
bernd
---------------------
<center>
<perl>
# Werte für Range vorbelegen
my $ra ||= 0;
my $ra_l ||= 5;
get "kundennr==$kundennr", "kunden", "erghash2";
while(get_next("erghash2")){
out<<EOF;
<table width=400><tr><td>
<b>$kundennr</b><br>
<b>$name</b><br>
$strasse<br>
$plz $ort<br>
<hr>
</td></tr>
EOF
get "kundennr==$kundennr sort=datum range=$ra,$ra_l", "artikel", "erghash";
while(get_next("erghash")){
$dat=datum("$datum", "Tag0.Monat0.Jahr2");
out<<EOF;
<tr><td>
<b>$artikelname</b> (Kundennr.: $kundennr)<br>
Datum: $dat<br>
Beschreibung:<br>
$beschreibung
</td></tr>
<tr><td>
EOF
}
my $newrange=$_range+$_range_length;
my $oldrange=$_range-$_range_length;
$oldrange=0 if $oldrange<0 && $oldrange>-$_range_length;
out "<center>";
out "<a href=\"$_link&kundennr=$kundennr&ra=$oldrange&ra_l=$ra_l\">Zurück</a> " if $oldrange>=0;
out "<a href=\"$_link&kundennr=$kundennr&ra=$newrange&ra_l=$ra_l\">Weiter</a>" if $newrange<$_amount_query;
out "</td></tr></table>";
</perl>
---------------------
Antworten
Beitrag von hempelr (1976 Beiträge) am Montag, 1.August.2005, 20:47.
Re: versuch an einer einfachen blätterfunkiton
jaja - sorry - mein Fehler....
Mach mal das "my" vor der Zuweisung an $ra und $ra_l am Anfang weg - dann müsste es aber funzen...
Antworten
Beitrag von bernd (25 Beiträge) am Montag, 1.August.2005, 21:00.
many thanx to ruben !!!
genau!!
das wars - einfach genial.
vielen dank!
bernd
Antworten