WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik


Homepage und Webhosting-Forum

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.


Forum » PHP & MySQL » Seitenausgabe zurück|1 2 3|weiter » Antworten
Benutzername:
Passwort: Passwort vergessen?
Inhalt der Nachricht: Fett | Kursiv | Unterstrichen | Link | Bild | Smiley | Zitat | Zentriert | Quellcode| Kleiner Text
Optionen: Emailbenachrichtigung bei Antworten
 

Die letzten 5 Postings in diesem Thema » Alle anzeigen
von Omega2k
hast auch wieder recht...
aber das alles jetzt auf die Schnelle zu erklären ist glaub ich mal nicht möglich...

Grundsätzlich muss man eben beim Generieren nur darauf achten, dass es 2 Möglichkeiten gibt:

$seiten_gesamt<=$link_anzahl oder nicht...

D.h. wenn die Gesamtzahl aller Seiten maximal so groß ist wie die Seitenverweise, die angezeigt werden sollen, macht das << und >> (oder "zurück" und "weiter") sowie der Sprung zur letzten oder ersten Seite keinen Sinn... also fällt es da weg.

Andernfalls (wenn $seiten_gesamt>$link_anzahl) muss nur die aktuelle Seite überprüft werden...

D.h. man errechnet die Spanne von wo bis wo die Links gehen sollen ...|2|3|4|... also von 2 bis einschließlich 4. und falls der Startwert (hier 2) eben größer als 1 ist, macht es schon Sinn an Anfang einfach das <<|1|... anzuhängen... das gleiche gilt für das Ende.
Also wenn das Ende der Spanne (hier 4) kleiner als die "gesamte Seitenanzahl-1" ist (z.B. wenn wir hier 10 Seiten hätten, kommt an das Ende einfach ...|10|>>

Das mit der Funktion eval("\$link .= \"".$layout['frst_page']."\";"); ist etwas vereinfacht nur das gleiche wie $string="Hallo $username, wie gehts"; --------> da wird ja dann auch $username durch die gerade gesetzte Variable ersetzt... bei EVAL hat es nur den Vorteil, dass man die Strings aus der MySQL oder wie hier (was eigentlich identisch ist) aus einem Array...
von languitar
Is ja schön und gut, aber wenn er deine Funktion jetzt einfach einbindet, hat er auch nichts gelernt.
von Omega2k
Ich glaub mal nicht, dass es NUR um das LIMIT geht, in der DB... das leuchtet glaub schon ein, wie ("...LIMIT $starteintrag,$laenge") funktioniert, oder? Nur beachten, dass $starteintrag = 0 für die 1. Zeile, NICHT 1!

So, jetzt zum Hauptproblem! Das Auflisten der Seiten und der Verweise:
Dafür hab ich mir grad mal schnell eine Funktion geschrieben, die vorab alles definieren lässt...

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: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
50: 
51: 
52: 
53: 
54: 
55: 
56: 
57: 
58: 
59: 
60:
function seiten_link($seiten_nummer=1,$seiten_gesamt=1,$pro_seite=5,$link_anzahl=3){
	$SELF=$_SERVER['PHP_SELF']; if($seiten_gesamt==0)$seiten_gesamt=1;
	
	$layout['actv_page'] = '<b>$i</b>';
	$layout['next_page'] = '<a href=\"$SELF?seite=$page_\">&gt;&gt;</a>';
	$layout['prev_page'] = '<a href=\"$SELF?seite=$page_\">&lt;&lt;</a>';
	$layout['frst_page'] = '<a href=\"$SELF?seite=0\">1</a>';
	$layout['last_page'] = '<a href=\"$SELF?seite=$page_\">$seiten_gesamt</a>';
	$layout['page_link'] = '<a href=\"$SELF?seite=$page_\">$i</a>';
	$layout['spac_page'] = '...';
	$layout['spac_link'] = '|';
	$layout['star_link'] = 'Seite $seiten_nummer/$seiten_gesamt [';
	$layout['ende_link'] = ']';

	eval("\$link = \"".$layout['star_link']."\";");
	if ($seiten_gesamt<=$link_anzahl){
		for ($i=1;$i<=$seiten_gesamt;$i++){
			if($i==$seiten_nummer) eval("\$link .= \"".$layout['actv_page']."\";");
			else { $page_=$i-1;    eval("\$link .= \"".$layout['page_link']."\";"); }
			if($i<$seiten_gesamt)  eval("\$link .= \"".$layout['spac_link']."\";");
		}
		eval("\$link .= \"".$layout['ende_link']."\";");
	}else{
		$anfang=$seiten_nummer-1;
		$ende=$anfang+$link_anzahl-1;
		if ($anfang<1){
			$ende=$ende+1;
			$anfang=1;
		}
		if (($anfang+$link_anzahl-1)>=$seiten_gesamt){
			$anfang=$seiten_gesamt-$link_anzahl+1;
			$ende=$seiten_gesamt;
		}
		if ($anfang>1){
			$page_=$seiten_nummer-2;
			eval("\$link .= \"".$layout['prev_page']."\";");
			eval("\$link .= \"".$layout['spac_link']."\";");
			eval("\$link .= \"".$layout['frst_page']."\";");
			eval("\$link .= \"".$layout['spac_link']."\";");
			eval("\$link .= \"".$layout['spac_page']."\";");
			eval("\$link .= \"".$layout['spac_link']."\";");
		}
		for ($i=$anfang;$i<=$ende;$i++){
			if($i==$seiten_nummer) eval("\$link .= \"".$layout['actv_page']."\";");
			else{$page_=($i-1);    eval("\$link .= \"".$layout['page_link']."\";");}
			if($i<$seiten_gesamt)  eval("\$link .= \"".$layout['spac_link']."\";");
		}
		if(($seiten_nummer+$link_anzahl-1)<=$seiten_gesamt){
			eval("\$link .= \"".$layout['spac_page']."\";");
			eval("\$link .= \"".$layout['spac_link']."\";");
			$page_=($seiten_gesamt-1);
			eval("\$link .= \"".$layout['last_page']."\";");
			eval("\$link .= \"".$layout['spac_link']."\";");
			$page_=$seiten_nummer;
			eval("\$link .= \"".$layout['next_page']."\";");
		}
		eval("\$link .= \"".$layout['ende_link']."\";");
	}
	return $link;
}


Zur Verwendung:

Die Arrays oben kann man frei definieren, lediglich die $variablen MÜSSEN so bleiben, logisch, weil sonst EVAL nicht klappt... Aber alles drumrum - kannste anpassen wie Du willst. Nacher im Programm selbst wird dann diese Kette automatisch mit Folgenden Angaben generiert:

1:
$string = seiten_link($seiten_nummer,$seiten_gesamt,$pro_seite,$link_anzahl);


Wobei:
$seiten_nummer = die aktive Seite ist (also von 1 - letzte Seite, NICHT VON 0 AB)
$seiten_gesamt = Anzahl der Seiten, am Besten mit
1:
ceil($alle_eintraege/$pro_seite)
berechnen, klappt am besten...
$pro_seite = Wieviele Einträge pro Seite angezeigt werden sollen
$link_anzahl = Anzahl der Links (z.B. 3 = [1|2|3|...|8|>>] oder 5 = [1|2|3|4|5|...|8|>>] und natürlich mitten drin auch... [<<|1|...|4|5|6|7|8|...|12|>>] nur als Beispiel...

PS: Ach ja wenn noch genug Einträge reinkommen... (ist nur ein Prototyp) - dann könnt Ihr hier ne DEMO sehen: http://omega2k.dyn.ee:592/guestbook/guestbook.php
von languitar
Guck doch mal in einem MySQL-Handbuch nach der Syntax für LIMIT. Das ist recht selbsterklärend.
von Can
Das Limit soll aber nicht 5 sein, sondern $i, 5 (oder so ähnlich)!

Nach oben