Blättern durch GB-Einträge - mal etwas anspruchsvoller

Hallo,

Ich habe für fast die gleiche Funktion mal ein Klasse geschrieben wenn du Interessiert bist schau mal hier Workshop

Das ergebnis sieht dann so aus:
screen.gif


MfG Funjoy
 
Danke für das Angebot, aber ich werde wohl erstmal die hier diskutierte Version nutzen.

Thx @ Komtur
Stell mich manchmal ein wenig blöd an und überseh solche fehler leicht, denke aber schon, dass ich den Cdoe soweit verstanden habe ;)
 
Tach
ich habe für solche Probleme irgendwann mal ne Allround lösung gemacht...sollte soweit Poblemlos laufen
Hat sogar einen Fix für dieses Problem:
[1],[2], ... [4],[5]
Sollten Fragen auftauchen musst du versuchen mich irgendwie zu erreichen ;)
Gruß
TiM
[edit]
dür die "<<<" und "<<" Knöpfe davor und dahinter musste nur ganz unten beim echo $out; die Links dafür mitausgeben, Die gesamtseitenzahl und den Offeset hast du ja
[/edit]

PHP:
<?php
	//*Config*
	
	$seiten = 30; //dieser
	$offset = 12; //und dieser Wert sollten aus dem Script eingetragen werden

	$sep = ","; //Seperator
	$long_sep = " ... "; //Seperator für ausgelassene Seiten
	$pre_sep = "["; //vorm Link
	$post_sep = "]"; //nachm Link

	$show_pre = 2; //anzahl d seiten vorne die sowieso anzeigt werden
	$show_post = 2; //das selbe von hinten
	$show_l_r = 1; //wenn akt. seite in der mitte, soviele nach links & rechts zeigen
	$difference_at = 2; //wieviel zwischenraum muss sein, damit long_sep eingesetzt wird (nur offset)
	
	//nich vergessen in der add_links funktion den link zu aktualisieren!
	//*Config*
	function add_links($start,$end) {
		global $sep, $pre_sep, $post_sep, $seiten, $offset;
		$re = "";
		for($i=$start; $i<=$end; $i++)
			//                           Link hier! $i = seite 
			$re .= $pre_sep . "<a href=\"/data/test.php?offset=$i\">" . $i . "</a>" . $post_sep . $sep;	
		Return $re;
		
	}

	//error handler
	if($difference_at < 1)die("\$difference_at darf nicht < 1 sein");

	$out = "";
	if(($show_pre+$show_post)>= $seiten)
		$out .= add_links(1,$seiten);
	elseif($offset) {
		if(($offset-$show_l_r > $show_pre+$difference_at) && ($offset+$show_l_r+$difference_at <= ($seiten-$show_post))) {
			//Mitte
			$out .= add_links(1,$show_pre);
			$out .= $long_sep;
			$out .= add_links($offset-$show_l_r, $offset+$show_l_r);
			$out .= $long_sep;
			$out .= add_links(($seiten-$show_post+1),$seiten);
		}elseif(($offset-$show_l_r <= $show_pre+$difference_at)  &&  ($offset+$show_l_r < ($seiten-$show_post))) {
			//Berührt Links
			$out .= add_links(1,$offset+$show_l_r);
			$out .= $long_sep;
			$out .= add_links(($seiten-$show_post+1),$seiten);
		}elseif(($offset-$show_l_r > $show_pre+$difference_at) && ($offset+$show_l_r+$difference_at > ($seiten-$show_post))) {
			//Berührt Rechts
			$out .= add_links(1,$show_pre);
			$out .= $long_sep;
			$out .= add_links($offset-$show_l_r, $seiten);
		}
	}else {
		$out .= add_links(1,$show_pre);
		$out .= $long_sep;
		$out .= add_links(($seiten-$show_post+1),$seiten);
	}
	echo($out); //anzeigen
?>
 
Zuletzt bearbeitet:
Da bin ich nochmal.
Ich war bisher eigentlich nur fixiert darauf, dass die darstellungsweise stimmte, dass ich garnicht gemerkt habe, dass das Blättern überhaupt nicht funktioniert :rolleyes:
Ein Bild davon könnt ihr euch hier machen.

So schaut der Code aus:
PHP:
$show_entries = 10; // Wieviele Einträge sollen pro Seite angezeigt werden?

if(!isset($_GET['start'])) 
{ 
  $start  = 0; 
} 
else 
{ 
  $start = $_GET['start']; 
} 

$sqlab = "SELECT * FROM guestbook";
$res = mysql_query($sqlab);
$num = mysql_num_rows($res);
$sqlab = "SELECT * FROM guestbook ORDER BY id DESC LIMIT $start, $show_entries";
$res = mysql_query($sqlab);

$num_pages = ceil($num/$show_entries);
$curr_page = $start/$show_entries;

...

$str    = ""; 
$punkte = false; 

if($start > 1) 
{ 
  $str .= "<a href=\"$PHP_SELF?start=". ($start - 1) ."\">&laquo; Zur&uuml;ck</a> "; 
} 

for($i == 1;$i <= $num_pages; $i++) 
{ 
  if($i == $start) 
  { 
    $str   .= "<b>$i</b> "; 
    $punkte = false; 
  } 
  elseif(($i == ($start-1)) && (($start-1) > 0)) 
  { 
     $str .= "<a href=\"$PHP_SELF?start=$i\">$i</a> "; 
  } 
  elseif(($i == ($start + 1)) && (($start+1) <= $num_pages)) 
  { 
     $str .= "<a href=\"$PHP_SELF?start=$i\">$i</a> "; 
  }            
  elseif($i == 1) 
  { 
    $str .= "<a href=\"$PHP_SELF?start=$i\">$i</a> "; 
  } 
  elseif($i == ($num_pages)) 
  { 
    $str .= "<a href=\"$PHP_SELF?start=$i\">$i</a> "; 
  } 
  elseif(($i > 1) && ($i < ($num_pages))) 
  { 
    if(!$punkte) 
    { 
      $str .="... "; 
      $punkte = true; 
    } 
  } 
} 
if($start < $num_pages) 
{ 
  $str .= "<a href=\"$PHP_SELF?start=". ($start + 1) ."\">Weiter &raquo;</a> "; 
}

Wie muss ich den Code anpassen, damit das Blättern auch tatsächlich funktioniert?
 
PHP:
$start = 0;
Sollte $start nicht 1 sein? Soweit ich das überblicken kann, hast du für jede Seite als Seitenvariable immer die Seitenzahl, beginnst also nicht bei 0, sondern bei 1 zu zählen.
 
ja, aber dann wird der erste beitrag nicht angezeigt.
das problem liegt wohl an der sql-anweisung mit dem limit
wie muss ich die anpassen?
 
Nee, ich will ja auch ne Lösung für den code aus meinen vorletzten post und nichts komplett neues
 
Dass du da nicht selbst drauf kommst...
PHP:
<?php
  [...]
  $sqlab = "SELECT * FROM guestbook ORDER BY id DESC LIMIT ".($start*$show_entries).", ".$show_entries;
  [...]
?>
 
hmm...
Jetzt funktioniert das Blättern zwar, aber der erste Eintrag der auf der ersten Seite angezeigt wird ist eigentlich der erste Eintrag der zweiten seite!?
Ausserdem wird auf der letzte Seite garnichts angezeigt...

Woran kann das jetzt noch liegen?
 
Zurück