Paginator
September 2009
Folgende Skripte zeigen, wie man Arrays, MySQL-Resultate oder Text auf mehrere Seiten gleichmässig verteilen kann.
Array
Mit folgendem Code wird der Inhalt eines Array auf mehrere Seiten verteilt.
Die einzelnen Objekte von $meinarray werden so auf die Seiten verteilt, damit pro Seite maximal $int_epp Objekte vorhanden sind.
Hier kann man auch mit einem assoziativen und multidimensionalen Array arbeiten.
Die Get-Variable $p beinhaltet die aktuelle Seitennummer.
MySQL
Mit diesem Code wird ein MySQL-Resultat auf mehrere Seiten verteilt.
Die einzelnen Einträge, welche mit $sql_query aus der Datenbank geholt wurden, werden so auf die Seiten verteilt, damit pro Seite maximal $int_epp Einträge vorhanden sind.
Siehe auch:
Volltext
Mit diesem Code kann ein Volltext auf mehrere Seiten verteilt werden.
Der Text $meintext wird in mehrere Stücke mit Länge $int_bpp zerlegt, wobei immer bei Leerzeichen (Whitespace) getrennt wird.
Auf HMTL und anderen Code im Text wird bei der Teilung keine Rücksicht genommen.
Achtung: HTML-Code, welcher im Text enthalten ist, wird bei der Teilung ignoriert, was gegebenenfalls zu einer Fehldarstellung im Browser führen kann!
Siehe auch:
Array
Mit folgendem Code wird der Inhalt eines Array auf mehrere Seiten verteilt.
Die einzelnen Objekte von $meinarray werden so auf die Seiten verteilt, damit pro Seite maximal $int_epp Objekte vorhanden sind.
Hier kann man auch mit einem assoziativen und multidimensionalen Array arbeiten.
Die Get-Variable $p beinhaltet die aktuelle Seitennummer.
<?php
# Dein Array
$meinarray = array('A','B','C','D','E','F','G','H','I','J','K','L',
'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
# Anzahl Objekte pro Seite
$int_epp = 8;
$int_total = count($meinarray); // totale Anzahl Objekte
$int_ttpages = ceil($int_total/$int_epp); // totale Anzahl Seiten
$int_tpage = isset($_GET['p']) ? (int)$_GET['p'] : 1; // aktuelle Seite
if($int_tpage>$int_ttpages || $int_tpage<1) $int_tpage = 1;
# Seiten-Navigation
$str_pnav = '<div>Seite: ';
if($int_tpage >= 4)
$str_pnav .= '<a href="?p=1">1</a>'; // erste Seite
if($int_tpage >= 2)
$str_pnav .= ' <a href="?p='.($int_tpage-1).'">««</a> '; // 1 zurück
for($a=1; $a<=$int_ttpages; $a++){
if($a == $int_tpage)
$str_pnav .= '<b>'.$a.'</b>'; // wenn diese Seite
elseif($a>$int_tpage-3 && $a<$int_tpage+3)
$str_pnav .= '<a href="?p='.$a.'">'.$a.'</a>'; // wenn andere Seite
if($a<$int_ttpages && $a>$int_tpage-3 && $a<$int_tpage+2)
$str_pnav .= ' · '; // Trenn-Zeichen
}
if($int_tpage <= $int_ttpages-1)
$str_pnav .= ' <a href="?p='.($int_tpage+1).'">»»</a> '; // 1 vor
if($int_tpage <= $int_ttpages-3)
$str_pnav .= '<a href="?p='.$int_ttpages.'">'.$int_ttpages.'</a>'; // letzte Seite
$str_pnav .= '</div>';
echo $str_pnav; // Seiten-Navigation ausgeben
$int_count = 0;
foreach($meinarray as $value){
$int_count++;
if($int_count > ($int_tpage-1)*$int_epp && $int_count <= $int_tpage*$int_epp){
## Hier werden die Daten ausgegeben (enthalten in $value)
## Beispiel: echo $value.'<br />';
}
elseif($int_count <= ($int_tpage-1)*$int_epp)
continue;
elseif($int_count > $int_tpage*$int_epp)
break;
}
echo $str_pnav; // Seiten-Navigation nochmal ausgeben
?>
MySQL
Mit diesem Code wird ein MySQL-Resultat auf mehrere Seiten verteilt.
Die einzelnen Einträge, welche mit $sql_query aus der Datenbank geholt wurden, werden so auf die Seiten verteilt, damit pro Seite maximal $int_epp Einträge vorhanden sind.
<?php
# Dein MySQL-Query
$sql_query = "SELECT * FROM tabelle WHERE spalte='iwas' ORDER BY iwas";
# Anzahl Objekte pro Seite
$int_epp = 10;
$sql_res = mysql_query($sql_query) or die(mysql_error()); // Query ausführen
$int_total = mysql_num_rows($sql_res); // Objekte zählen
$int_ttpages = ceil($int_total/$int_epp); // totale Anzahl Seiten
$int_tpage = isset($_GET['p']) ? (int)$_GET['p'] : 1; // aktuelle Seite
if($int_tpage>$int_ttpages || $int_tpage<1) $int_tpage = 1;
# Seiten-Navigation
$str_pnav = '<div>Seite: ';
if($int_tpage >= 4)
$str_pnav .= '<a href="?p=1">1</a>'; // erste Seite
if($int_tpage >= 2)
$str_pnav .= ' <a href="?p='.($int_tpage-1).'">««</a> '; // 1 zurück
for($a=1; $a<=$int_ttpages; $a++){
if($a == $int_tpage)
$str_pnav .= '<b>'.$a.'</b>'; // wenn diese Seite
elseif($a>$int_tpage-3 && $a<$int_tpage+3)
$str_pnav .= '<a href="?p='.$a.'">'.$a.'</a>'; // wenn andere Seite
if($a<$int_ttpages && $a>$int_tpage-3 && $a<$int_tpage+2)
$str_pnav .= ' · '; // Trenn-Zeichen
}
if($int_tpage <= $int_ttpages-1)
$str_pnav .= ' <a href="?p='.($int_tpage+1).'">»»</a> '; // 1 vor
if($int_tpage <= $int_ttpages-3)
$str_pnav .= '<a href="?p='.$int_ttpages.'">'.$int_ttpages.'</a>'; // letzte Seite
$str_pnav .= '</div>';
echo $str_pnav; // Seiten-Navigation ausgeben
$int_count = ($int_tpage-1)*$int_epp;
mysql_data_seek($sql_res, ($int_tpage-1)*$int_epp); // Zeiger versetzen
while($sql_row = mysql_fetch_array($sql_res)){
if($int_count > ($int_tpage-1)*$int_epp && $int_count <= $int_tpage*$int_epp){
## Hier werden die Daten ausgegeben (enthalten in $sql_row)
## Beispiel: echo $sql_row['iwas'].'<br />';
}
if($int_count > $int_tpage*$int_epp)
break;
$int_count++;
}
echo $str_pnav; // Seiten-Navigation nochmal ausgeben
?>
Siehe auch:
Volltext
Mit diesem Code kann ein Volltext auf mehrere Seiten verteilt werden.
Der Text $meintext wird in mehrere Stücke mit Länge $int_bpp zerlegt, wobei immer bei Leerzeichen (Whitespace) getrennt wird.
Auf HMTL und anderen Code im Text wird bei der Teilung keine Rücksicht genommen.
<?php
# Dein Text
$meintext = 'Text bezeichnet eine abgegrenzte, zusammenhängende
Äusserung in geschriebener Sprache, im weiteren Sinne auch
die nicht geschriebene, aber schreibbare Sprachinformation.';
# Anzahl Zeichen pro Seite
$int_bpp = 1000; // 1000 Zeichen = ~140 Wörter
$int_total = strlen($meintext); // totale Anzahl Zeichen
$int_ttpages = ceil($int_total/$int_bpp); // totale Anzahl Seiten
$int_tpage = isset($_GET['p']) ? (int)$_GET['p'] : 1; // aktuelle Seite
if($int_tpage>$int_ttpages || $int_tpage<1) $int_tpage = 1;
# Seiten-Navigation
$str_pnav = '<div>Seite: ';
if($int_tpage >= 4)
$str_pnav .= '<a href="?p=1">1</a>'; // erste Seite
if($int_tpage >= 2)
$str_pnav .= ' <a href="?p='.($int_tpage-1).'">««</a> '; // 1 zurück
for($a=1; $a<=$int_ttpages; $a++){
if($a == $int_tpage)
$str_pnav .= '<b>'.$a.'</b>'; // wenn diese Seite
elseif($a>$int_tpage-3 && $a<$int_tpage+3)
$str_pnav .= '<a href="?p='.$a.'">'.$a.'</a>'; // wenn andere Seite
if($a<$int_ttpages && $a>$int_tpage-3 && $a<$int_tpage+2)
$str_pnav .= ' · '; // Trenn-Zeichen
}
if($int_tpage <= $int_ttpages-1)
$str_pnav .= ' <a href="?p='.($int_tpage+1).'">»»</a> '; // 1 vor
if($int_tpage <= $int_ttpages-3)
$str_pnav .= '<a href="?p='.$int_ttpages.'">'.$int_ttpages.'</a>'; // letzte Seite
$str_pnav .= '</div>';
echo $str_pnav; // Seiten-Navigation ausgeben
$len_strsp = 0;
$int_count = 0;
while($int_count < $int_ttpages){
$int_count++;
$str_text = substr($meintext, $len_strsp, $int_bpp*$int_count-$len_strsp);
$str_text = preg_replace('#[^\s]*$#s', '', $str_text);
$len_strsp = strlen($str_text)+$len_strsp;
if($int_count == $int_tpage){
## Text-Fragment ausgeben ##
echo $str_text;
break;
}
}
echo $str_pnav; // Seiten-Navigation nochmal ausgeben
?>
Achtung: HTML-Code, welcher im Text enthalten ist, wird bei der Teilung ignoriert, was gegebenenfalls zu einer Fehldarstellung im Browser führen kann!
Siehe auch:
