Blätterfunktion erweitern

fRagiLeMOD

Mitglied
Hallo nochmal,

hat ja das letzte Mal gut funktioniert mit der Hilfe. ;-)

Nun folgendes - ich habe eine Blätter funktion programmiert die bei mehreren Einträgen verteilt auf 12 Seiten so aussieht:

Seite: Erste | Zurück | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Weiter | Letzte

Nun ist es ja nervig, wenn man z.B. 50 Seiten hat, dass alle Zahlen von 1 - 50 dort stehen.
Ich möchte nun nur - wenn man sich beispielsweise auf Seite 7 befindet - dass 5 Seiten angezeigt werden. Und zwar so:

Erste | Zurück | 5 | 6 | 7 | 8 | 9 | Weiter | Letzte

Ich hab schon einiges versucht, komme aber einfach zu keiner Lösung.
Könnt Ihr mir helfen?
Hier die Funktion:

PHP:
// [Anzahl der Beiträge], [Beiträge pro Seite], [Query String], [zusätzlicher Query String]
function browsePages($items, $itemsPerPage, $queryString, $extendedQueryString)
{	
	// Wenn mehrere Query Strings angegeben sind wird & als Oberator gewählt, ansonsten ?
	if($extendedQueryString == '') 
		$operator = '?';
	else 
		$operator = '&';
	// Seitenanzahl bestimmen
	if($items > $itemsPerPage) 
	{
		$pages = intval($items / $itemsPerPage);
		if($items % $itemsPerPage) 
			$pages++;
		echo _PAGES.': ';
	}
	// Eine Seite zurück & Startseite
	if($_GET[$queryString] != 0)
	{	
		$iNegativeQS = $_GET[$queryString] - $itemsPerPage;
		echo '	
		<a href="'.$_SERVER[PHP_SELF].$extendedQueryString.$operator.$queryString.'=0">'._FIRST.'</a> | 
		<a href="'.$_SERVER[PHP_SELF].$extendedQueryString.$operator.$queryString.'='.$iNegativeQS.'">'.GO_BACK.'</a> | ';
	}
	// Seiten auflisten
	for($i = 1; $i <= $pages; $i++)
	{
		$j = ($i - 1) * $itemsPerPage;
		if($_GET[$queryString] == $j)
			echo '<b>'.$i.'</b> | ';
		else //	Beispiel:	        index.php	(	?category=$i	)	? // &	  page		= 	$j
			echo '<a href="'.$_SERVER[PHP_SELF].$extendedQueryString.$operator.$queryString.'='.$j.'">'.$i.'</a> | ';
	}	
	$iLastPage = ($pages * $itemsPerPage) - $itemsPerPage;
	// Eine Seite weiter & letzte Seite
	if($_GET[$queryString] != $iLastPage)
	{
		$iPositiveQS = $_GET[$queryString] + $itemsPerPage;
		echo '	
		<a href="'.$_SERVER[PHP_SELF].$extendedQueryString.$operator.$queryString.'='.$iPositiveQS.'">'.GO_FORWARD.'</a> | 
		<a href="'.$_SERVER[PHP_SELF].$extendedQueryString.$operator.$queryString.'='.$iLastPage.'">'._LAST.'</a>';
	}
}

Gruß fRagiLeMOD
 
Hallo!
Das ist eig gar nicht so schwer, ich hab das selbst erst vor kurzem gemacht. Du must einfach for ein wenig neu berechnen lassen.
PHP:
<?php
for($i = $aktuelleseite - 2; $i <= $aktuelleseite + 2; $i++)
{}
so ungefähr sollte das fuktionieren vllt hilft es dir ja.
Gruß
5im0n
 
Danke, habe letzteres mal ausprobiert und nach ein wenig rumprobieren und tüfteln t es nun bestens.

Hier der Code für alle, die es interessiert ;-)

Einbau in eine Seite, wo die Blätterfunktion verwendet werden soll. (auf MySQL Basis)

Beispiel Request:
PHP:
if(!isset($_REQUEST[seite])) 
	$queryString = 0;
else 
	$queryString = $_REQUEST[seite];

Beispiel MySQL Query:
PHP:
$query = mysql_query("SELECT * FROM ".$tabelle." ORDER BY name DESC LIMIT ".$queryString*$downloadsProSeite.", ".$downloadsProSeite, $verbindung) or die(mysql_error());
$queryNum = mysql_query("SELECT * FROM ".$tabelle, $verbindung) or die(mysql_error());

Beispiel Einbau der Funktion:
PHP:
	include_once 'browsePages.php';
	// Blätterfunktion einbinden - [Anzahl der Beiträge], [Beiträge pro Seite], [Query String], [zusätzlicher Query String]
	browsePages(mysql_num_rows($queryNum), $downloadsProSeite, 'seite', '');

Die Funktion selber

Funktion in Datei browsePages.php
PHP:
// Blätterfunktion
function browsePages($items, $itemsPerPage, $queryString, $extendedQueryString)
{	
	// Wenn mehrere Query Strings angegeben sind wird & als Oberator gewählt, ansonsten ?
	if($extendedQueryString == '') 
		$operator = '?';
	else 
		$operator = '&';
	// Wenn mehr vorhanden Einträge, als auf eine Seite Passen, dann starte Berechnung & Ausgabe
	if($items > $itemsPerPage) 
	{
		// Seitenanzahl bestimmen
		$pages = intval($items / $itemsPerPage);
		if($items % $itemsPerPage) 
			$pages++;
		echo _PAGES.': ';
		// Eine Seite zurück & Startseite
		if($_GET[$queryString] != 0)
		{	
			$iNegativeQS = $_GET[$queryString] - $itemsPerPage;
			echo '	
			<a href="'.$_SERVER[PHP_SELF].$extendedQueryString.$operator.$queryString.'=0">'._FIRST.'</a> - 
			<a href="'.$_SERVER[PHP_SELF].$extendedQueryString.$operator.$queryString.'='.$iNegativeQS.'">'.GO_BACK.'</a> - ';
		}
		$iLastPage = ($pages * $itemsPerPage) - $itemsPerPage;
		// Seiten auflisten
		for($i = $_GET[$queryString] - 3; $i <= $_GET[$queryString] + 3; $i++)
		{
			if(!($i <= -1) && !($i > ($iLastPage / $itemsPerPage)))/// 
			{
				$showNumber = $i + 1;
				if($_GET[$queryString] == $i)
					echo '['.$showNumber.'] ';
				else //	Beispiel:	        index.php	(	?category=$i	)	? // &	  page		= 	$j
					echo '<a href="'.$_SERVER[PHP_SELF].$extendedQueryString.$operator.$queryString.'='.$i.'">'.$showNumber.'</a> ';
			}
		}	
		// Eine Seite weiter & letzte Seite
		if($_GET[$queryString] != ($iLastPage / $itemsPerPage))
		{
			$iPositiveQS = ($_GET[$queryString] + ($itemsPerPage / $itemsPerPage));
			echo '	
			- <a href="'.$_SERVER[PHP_SELF].$extendedQueryString.$operator.$queryString.'='.$iPositiveQS.'">'.GO_FORWARD.'</a>  
			- <a href="'.$_SERVER[PHP_SELF].$extendedQueryString.$operator.$queryString.'='.($iLastPage / $itemsPerPage).'">'._LAST.'</a>';
		}
	}
}

Und so sieht möglicherweise die Ausgabe aus (maximal 3 auswählbare Seiten vor und nach der aktuellen Seite):
Seite: Erste - Zurück - 1 [2] 3 4 5 - Weiter - Letzte

Viele Grüße
fRagiLeMOD
 
Zuletzt bearbeitet:
hi,
wie kann ich das ganze mit so einer SQL Anweisung aufrufen?
PHP:
$sql = mysql_query("SELECT * FROM replaydb WHERE anzahlsp=2 order by fileID DESC LIMIT ". $offset. ", 7");
while ($ds = mysql_fetch_object($sql)) 
{
  $id = $ds ->fileID;
  $gewinner = $ds ->TeamB;
  $verlierer = $ds -> TeamA;
  $mapname = $ds ->MapName;
  $dauer = $ds ->Dauer;
  $datum = $ds ->Datum;
  $matchup =$ds ->MatchUp;
  $rasseg =$ds ->rasseg;
  $rassev =$ds ->rassev;
  $replay =$ds ->ReplayPfad;

echo "
<tr onmouseover=\"this.style.backgroundColor='#ccc';\" onmouseout=\"this.style.backgroundColor='';\" ><td width='200px' class=\"1px-rahmen\"><img src=img/$rasseg.png> $gewinner</td> <td width='20px'class=\"1px-rahmen\">Vs.</td> <td width='200px' class=\"1px-rahmen\"> <img src=img/$rassev.png>$verlierer </td> <td class=\"1px-rahmen\">$matchup</td> <td class=\"1px-rahmen\">$dauer Min.</td><td class=\"1px-rahmen\">$mapname</td><td class=\"1px-rahmen\"><a href=\"Detailsreppgl.php?path=$replay\"><img src=\"img/details.gif\" border=\"0\"></a></td><td class=\"1px-rahmen\"><a href=\"downloadpgl.php?filepub=$replay\"><img src=\"img/disk.gif\" border=\"0\"></a></td>
";

}
habe ein paar versuche gestartet aber hat leider nicht geklappt
 
Zurück