Blätterfunktion umbauen?

Soo, hier ist das Script. Habe es getestet, sollten keine Bugs mehr drin sein. Layout kannst du selber anpassen, und dem Script halt die Werte der aktuellen Seite und die Gesamtseitenanzahl geben.

Testen kannst du es hier: http://multimolti.com/test/pagination.php

PHP:
<?php

$minpage = 1; // niedrigste Seitenzahl, wahrscheinlich 1 oder 0
$maxpage = 100; // höchste Seitenzahl, kommt auf die Anzahl der Posts und Posts/Page an
$area = 3; // wie viele Links zu Seiten "um deine Seite herum" anzeigen?

$currpage = (isset($_GET['p']) && is_numeric($_GET['p']) ? $_GET['p'] : 1) ; // die momentane Seite  

// Funktion, die entweder den Link oder die Zahl fett ausgibt, wenn man grade auf der Seite ist
function displayLink($page, $currpage)
{
	if($page == $currpage)
		echo '<b>'.$page.'</b> | ';
	else
		echo '<a href="'.$_SERVER['SCRIPT_NAME'].'?p='.$page.'">'.$page.'</a> | ';
}

// zum Test anzeigen, auf welcher Seite man ist
echo '<h1>Ich bin momentan auf Seite '.$currpage.'</h1>';


// wenn es nur so wenig Seiten gibt, dass sich Pagination nicht lohnt, einfach alle
// Seiten anzeigen
if($maxpage <= $area * 4 + 1)
{
	for($i = 1; $i <= $maxpage; $i++)
		displayLink($i);
}
else
{
	// ansonsten Pagination anwenden
	
	// immer mindestens $area Links vorne anzeigen
	for($i = 1; $i <= $area; $i++)
		displayLink($i, $currpage);
	
	// checken, ob die Links links und rechts von der akteullen Seite sich mit den Links vorne
	// und hinten überschneiden, wenn ja, verhindern
	if($currpage - $area <= $area)
	{
		$middlemin = $area + 1;
	}	
	else
	{
		$middlemin = $currpage - $area;
		
		// Punkte nur anzeigen, wenn sie auch benötigt werden
		echo " ... | ";
	}
	
	if($currpage + $area >= $maxpage - $area)
	{
		$middlemax = $maxpage - $area - 1;
		$echodots = false;
	}
	else
	{
		$middlemax = $currpage + $area;
		
		// Punkte nur anzeigen, wenn sie auch benötigt werden
		$echodots = true;
	}
	
	// wenn möglich, $area Links links und rechts von der aktuellen Seite anzeigen
	for($i = $middlemin; $i <= $middlemax; $i++)
		displayLink($i, $currpage);
	
	if($echodots)
		echo " ... | ";
	
	// immer mindestens $area Links hinten anzeigen
	for($i = $maxpage - $area; $i <= $maxpage; $i++)
		displayLink($i, $currpage);	
}

?>
 
Danke für deine Mühe, aber wo kommt die sql abfrage hin?

Und wie könnt ich das script auf versch Seiten einsetzen?

Denn ich hatte vor die "Hauptfunktion" in eine extra php zu packen und den rest der von den seiten abhängig, über die jeweilige sql abfrage zu schreiben.
 
Dann pack doch meinen Code einfach in eine Funktion und die Variablen $minpage, $maxpage, $currpage und $area als Parameter dazu.
Wo die SQL Abfrage hinsoll kann ich doch nicht wissen, das hat ja auch nichts mit der Pagination zu tun. Die Pagination braucht nichts von SQL, nur die oben genannten Variablen, und die musst du dir halt irgendwie organisieren. $maxpage z.B. durch [Gesamtanzahl der Filme] / [Filme pro Seite]. $minpage ist meistens 1, $currpage wird irgendwo als Paramter in deiner URL drinstehen und $area kannst du eigentlich bei 3 lassen.
 
Ah ok,
was ist eigentlich $page ?
Die variable ist doch nirgendwo definiert oder hab ich was übersehen?

Und nochmals vielen vielen vielen dank, ich bin wirklich seeeehr dankbar für deine wirklich tolle hilfe
 
also irgendwie klappt das alles jetzt nicht mehr, jetzt funktionieren befehle nicht mehr, die vorher gingen und es wird mir auch keine pagination angezeigt

if(mysql_num_rows($sql) <> 0)

Der funktioniert auch nicht mehr zu meiner sql abfrage.

Ich bin mir relativ sicher, dass ichs richtig eingebaut habe.

Kann ich dir evtl meine php seite, bzw nen ausschnitt aus dem ganze schicken? Ich will nicht hier alles dazu posten
 
was ist eigentlich $page ?
Die variable ist doch nirgendwo definiert oder hab ich was übersehen?

$page ist der Parameter der Funktion, die Variable wird also beim Aufrufen der Funktion definiert.

also irgendwie klappt das alles jetzt nicht mehr, jetzt funktionieren befehle nicht mehr, die vorher gingen und es wird mir auch keine pagination angezeigt

if(mysql_num_rows($sql) <> 0)

Der funktioniert auch nicht mehr zu meiner sql abfrage.

Ich bin mir relativ sicher, dass ichs richtig eingebaut habe.

Kann ich dir evtl meine php seite, bzw nen ausschnitt aus dem ganze schicken? Ich will nicht hier alles dazu posten

Ich kann das ganze einfach noch mal in eine PHP-Funktion stecken:

PHP:
<?php

$minpage = 1; // niedrigste Seitenzahl, wahrscheinlich 1 oder 0
$maxpage = 100; // höchste Seitenzahl, kommt auf die Anzahl der Posts und Posts/Page an
$area = 3; // wie viele Links zu Seiten "um deine Seite herum" anzeigen?

$currpage = (isset($_GET['p']) && is_numeric($_GET['p']) ? $_GET['p'] : 1) ; // die momentane Seite

// Funktion, die entweder den Link oder die Zahl fett ausgibt, wenn man grade auf der Seite ist
function displayLink($page, $currpage)
{
	if($page == $currpage)
		echo '<b>'.$page.'</b> | ';
	else
		echo '<a href="'.$_SERVER['SCRIPT_NAME'].'?p='.$page.'">'.$page.'</a> | ';
}

// Funktion, die die Links zu den Seiten anzeigt
function displayPages($minpage, $maxpage, $currpage, $area)
{
    // wenn es nur so wenig Seiten gibt, dass sich Pagination nicht lohnt, einfach alle
    // Seiten anzeigen
    if($maxpage <= $area * 4 + 1)
    {
        for($i = 1; $i <= $maxpage; $i++)
            displayLink($i);
    }
    else
    {
        // ansonsten Pagination anwenden

        // immer mindestens $area Links vorne anzeigen
        for($i = 1; $i <= $area; $i++)
            displayLink($i, $currpage);

        // checken, ob die Links links und rechts von der akteullen Seite sich mit den Links vorne
        // und hinten überschneiden, wenn ja, verhindern
        if($currpage - $area <= $area)
        {
            $middlemin = $area + 1;
        }
        else
        {
            $middlemin = $currpage - $area;

            // Punkte nur anzeigen, wenn sie auch benötigt werden
            echo " ... | ";
        }

        if($currpage + $area >= $maxpage - $area)
        {
            $middlemax = $maxpage - $area - 1;
            $echodots = false;
        }
        else
        {
            $middlemax = $currpage + $area;

            // Punkte nur anzeigen, wenn sie auch benötigt werden
            $echodots = true;
        }

        // wenn möglich, $area Links links und rechts von der aktuellen Seite anzeigen
        for($i = $middlemin; $i <= $middlemax; $i++)
            displayLink($i, $currpage);

        if($echodots)
            echo " ... | ";

        // immer mindestens $area Links hinten anzeigen
        for($i = $maxpage - $area; $i <= $maxpage; $i++)
            displayLink($i, $currpage);
    }
}


// zum Test anzeigen, auf welcher Seite man ist
echo '<h1>Ich bin momentan auf Seite '.$currpage.'</h1>';

displayPages($minpage, $maxpage, $currpage, $area);

?>

Jetzt musst du einfach nur die beiden Funktionen in eine deiner PHP-Dateien kopieren, wo sowieso schon Funktionen drin sind, und dann dort, wo die Links zu den Seiten angezeigt werden sollen, displayPages($minpage, $maxpage, $currpage, $area); mit den entsprechenden Parametern aufrufen.
 
Zurück