Schrift
[thread]511[/thread]

HTML-Ausgabe auf mehrere Seiten verteilen



<< >> 4 Einträge, 1 Seite
slide
 2005-06-15 18:32
#5104 #5104
User since
2005-02-15
6 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

ich suche nach folgender Lösung:
Ich habe ein Array of Hash das von einer foreach-Schleife durchlaufen wird. In der foreach-Schleife werden Elemente des Array of Hash verglichen. Die Ergebnisse werden ausgegeben.
Jetzt das Problem:
Wenn es mehr als z.B. 3 Ergebnisse sind sollen diese auf mehrere Seiten verteilt werden.
Es sollen dann unten die Seiten angezeigt werden mit einem Link (1, 2, 3, 4....)
Immer 3 Ergebnisse pro Seite. Kann mir jemand weiter helfen?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
foreach (@$array) { #Das Array of Hash durchlaufen
if ($_->{plz} eq $convert && $_->{Geschlecht} eq $temp) { #Wenn in dem aktuellen Element Stadt der eingegebene Ort steht...
my $pfad_bild = "../bilder/".$_->{Bild_klein}; #Den richtigen Pfad des kleinen Bildes anhängen
print "<table align=center height=\"60px\"\"><tr><td align=left>ID: </td><td align=left>".$_->{ID}."</a></td>\n"; #Ausgabe der ID
print "<td rowspan=6 align = left><a href=script.pl?id=$_->{ID};orte=$_->{Stadt}><img src=$pfad_bild border=0></a></td></tr>\n"; #Einfügen des Bildes
print "<tr><td align=left>Ort: </td><td align=left>".$_->{Stadt}."</td></tr>\n"; #Ausgabe der Stadt
print "<tr><td align=left>Name: </td><td align=left>".$_->{Name}."</td></tr>\n"; #Ausgabe des Names
print "<tr><td align=left>Geschlecht: </td><td align=left>".$_->{Geschlecht}."</td></tr>\n"; #Ausgabe Mann oder Frau
print "<tr><td align = left>Alter: </td><td align = left>".$_->{Alter}."</td></tr>\n"; #Ausgabe des Alters
print "<tr><td align = left width=\"100\">Groesse: </td><td width=\"500\" align = left>".$_->{Groesse}."</td></tr>\n"; #Ausgabe der Größe
print "<tr><td colspan=3 align=right><a href=script.pl?id=$_->{ID};plz=$_->{plz};art=$_->{Geschlecht}><b>...Details</b><br><br></td></tr></table><br>"; #Link für Detailsansicht, es wird die ID mitgeschickt um das Element des Arrays zu wissen
}
elsif ($_->{plz} eq $convert && $_->{Art} eq $temp) { #Wenn in dem aktuellen Element Stadt der eingegebene Ort steht...
my $pfad_bild = "../bilder/".$_->{Bild_klein}; #Den richtigen Pfad des kleinen Bildes anhängen
print "<table align=center height=\"60px\"\"><tr><td align=left>ID: </td><td align=left>".$_->{ID}."</a></td>\n"; #Ausgabe der ID
print "<td rowspan=4 align = left><a href=script.pl?id=$_->{ID};orte=$_->{Stadt}><img src=$pfad_bild border=0></a></td></tr>\n"; #Einfügen des Bildes
print "<tr><td align=left>Straße: </td><td align=left>".$_->{Strasse}."</td></tr>\n"; #Ausgabe des Names
print "<tr><td align=left>Ort: </td><td align=left>".$_->{Stadt}."</td></tr>\n"; #Ausgabe der Stadt
print "<tr><td align = left width=\"100\">Kontakt: </td><td width=\"500\" align = left>".$_->{Kontakt}."</td></tr>\n"; #Ausgabe der Größe
print "<tr><td></td></tr>\n";
print "<tr><td colspan=3 align=right><a href=script.pl?id=$_->{ID};plz=$_->{plz};art=$_->{Art};><b>...Details</b><br><br></td></tr></table><br>"; #Link für Detailsansicht, es wird die ID mitgeschickt um das Element des Arrays zu wissen
}
}
Strat
 2005-06-15 19:26
#5105 #5105
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
setze eine Variable, die die aktuelle seite enthaelt
Code: (dl )
1
2
3
4
5
6
7
8
9
my $actualPage = 12;
my $resultsPerPage = 3;

my $start = ($actualPage-1)*$resultsPerPage;
my $end = $start + $resultsPerPage - 1;

# und dann ein arrayslice...
foreach (@$array[$start..$end])
 # ...


Die Anzahl der Seiten erhaeltst du, indem du:
Code: (dl )
my $count = int(($#$array + $resultsPerPage - 2) / $resultsPerPage );

rechnest (falls ich mich gerade nicht verrechnet habe)\n\n

<!--EDIT|Strat|1118849418-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
slide
 2005-06-16 19:13
#5106 #5106
User since
2005-02-15
6 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke für die schnelle Antwort!
Mir ist alles klar, bis auf das Aufrufen der nächsten Seite, wenn  es also mehrere Seiten zur Ausgabe gibt. Wie mach ich das mit dem Link zur z.B. Seite 2. Das arrayslice muss ja dann irgendwie wieder aufgerufen werden.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
my $number = 1;

my $actualPage = 1;
my $resultsPerPage = 4;
my $count = int((@$array+$resultsPerPage-2)/$resultsPerPage);
my $start = ($actualPage-1)*$resultsPerPage;
my $end = $start+$resultsPerPage-1;

foreach (@$array[$start..$end]) { #Das Array of Hash durchlaufen
if ($_->{plz} eq $convert && $_->{Geschlecht} eq $temp) { #Wenn in dem aktuellen Element Stadt der eingegebene Ort steht...
my $pfad_bild = "../bilder/".$_->{Bild_klein}; #Den richtigen Pfad des kleinen Bildes anhängen
print "<table align=center height=\"60px\"\"><tr><td align=left>ID: </td><td align=left>".$_->{ID}."</a></td>\n"; #Ausgabe der ID
print "<td rowspan=6 align = left><a href=script.pl?id=$_->{ID};orte=$_->{Stadt}><img src=$pfad_bild border=0></a></td></tr>\n"; #Einfügen des Bildes
print "<tr><td align=left>Ort: </td><td align=left>".$_->{Stadt}."</td></tr>\n"; #Ausgabe der Stadt
print "<tr><td align=left>Name: </td><td align=left>".$_->{Name}."</td></tr>\n"; #Ausgabe des Names
print "<tr><td align=left>Geschlecht: </td><td align=left>".$_->{Geschlecht}."</td></tr>\n"; #Ausgabe Mann oder Frau
print "<tr><td align = left>Alter: </td><td align = left>".$_->{Alter}."</td></tr>\n"; #Ausgabe des Alters
print "<tr><td align = left width=\"100\">Groesse: </td><td width=\"500\" align = left>".$_->{Groesse}."</td></tr>\n"; #Ausgabe der Größe
print "<tr><td colspan=3 align=right><a href=script.pl?id=$_->{ID};plz=$_->{plz};art=$_->{Geschlecht}><b>...Details</b><br><br></td></tr></table><br>"; #Link für Detailsansicht, es wird die ID mitgeschickt um das Element des Arrays zu wissen
}
elsif ($_->{plz} eq $convert && $_->{Art} eq $temp) { #Wenn in dem aktuellen Element Stadt der eingegebene Ort steht...
my $pfad_bild = "../bilder/".$_->{Bild_klein}; #Den richtigen Pfad des kleinen Bildes anhängen
print "<table align=center height=\"60px\"\"><tr><td align=left>ID: </td><td align=left>".$_->{ID}."</a></td>\n"; #Ausgabe der ID
print "<td rowspan=4 align = left><a href=script.pl?id=$_->{ID};orte=$_->{Stadt}><img src=$pfad_bild border=0></a></td></tr>\n"; #Einfügen des Bildes
print "<tr><td align=left>Straße: </td><td align=left>".$_->{Strasse}."</td></tr>\n"; #Ausgabe des Names
print "<tr><td align=left>Ort: </td><td align=left>".$_->{Stadt}."</td></tr>\n"; #Ausgabe der Stadt
print "<tr><td align = left width=\"100\">Kontakt: </td><td width=\"500\" align = left>".$_->{Kontakt}."</td></tr>\n"; #Ausgabe der Größe
print "<tr><td></td></tr>\n";
print "<tr><td colspan=3 align=right><a href=script.pl?id=$_->{ID};plz=$_->{plz};art=$_->{Art};><b>...Details</b><br><br></td></tr></table><br>"; #Link für Detailsansicht, es wird die ID mitgeschickt um das Element des Arrays zu wissen
}
}
print "<br><a href=\"../index.html\">zurück</a><br>\n"; #Link zur Startseite
#print "Anzahl der Seiten: ".$count."<br>\n";
print "Seiten: \n";
while ($number<$count) {
print $number++." \n";
}
print "</p>";
print "</div></div>\n";
print "</body></html>\n";

So werden jetzt die 3 Ergebnisse ausgegeben und unten die Seitenzahlen die nachher die links werden sollen dargestellt.
Jetzt muss ich auf die Seite 2 klicken können und das arrayslice muss wieder durchlaufen werden. Oder verstehe ich das falsch?
Grüßle
Strat
 2005-06-16 19:33
#5107 #5107
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
du verwendest da einfach als link die Variable $actualPage, z.B.
Code: (dl )
1
2
3
use CGI;
my $cgi = CGI->new();
my $actualPage = $cgi->param('actualPage') || 1;

und setzt den Link z.B.
Code: (dl )
1
2
3
4
print "Zur Seite: ";
for my $i (1..$#pages) {
 print qq~<a href="$script?actualPage=$i">$i</a> ~;
} # for

vermutlich reicht es aus, nur den teilbereich des arrayslices zu erstellen, der fuer die ausgabe benoetigt wird. wie das geht, haengt davon ab, von woher du das array befuellst. Bei einer MySql-Datenbank hilft dir z.B. sowas wie
[sql]SELECT ... FROM ... LIMIT $start,$resultsPerPage
[/sql]\n\n

<!--EDIT|Strat|1118936066-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 4 Einträge, 1 Seite



View all threads created 2005-06-15 18:32.