ok. hier mein ersteller PageSplitter. ist sicherlich nicht alles einwandfrei gecodet oder zu umständlich, aber er funktioniert und ist sicher.

wenn jemand eine zahl eingibt die als seite nicht existiert wird seite 1 angenommen, oder wenn jemand eine kommazahl eingibt, die seite aber existieren würde, wird mit floor abgerundet.
das einzige problem das ich habe ist folgendes:
ich lasse ja das ?page=234 oder &page=234 aus der url entfernen. das klappt so auch ganz gut, nur wenn jemand die url manipuliert und beispielsweise ?page=12342asdf eingibt, also eine buchstabenkette, so haut es mir die berechnete url zusammen.
super wäre wenn ich mein regex erweitern könnte, dass das pattern von (wie jetzt ja schon) &page= oder ?page ist bis zum nächsten & (falls noch eine weitere variable besteht) oder zum ende der url (falls keine variable mehr existiert) sucht. aber ich hab keine ahnung wie ich das lösen soll. regexe sind nicht wirklich meine freunde. lese seid 2 stunden die regenechsen.
hier nun aber die klasse. die function display_full() folgt noch.
PHP-Code:
<?php
###############################
# file: class_page_splitter.php
# version: 1.0
###############################
// klasse erstellen
class PageSplitter {
// objekte erstellen
var $_entries_per_page = '5'; // wird in configure.php vordefiniert
var $_num_entries = ''; // gesamteinträge, gefüllt in konstruktor
var $_max_pages = ''; // maximale seitenzahl, gefüllt in konstruktor
var $query_result = ''; // query_result der gesplitteten seite, public für anzeige der daten
var $_query_string = ''; // aktiver query_string, gefüllt in konstruktor, geändert in display_splitter_nav
function PageSplitter($column, $table) {
// alle einträge zählen und maximale seitenzahl ermitteln
$query_string = "SELECT ".$column."
FROM ".$table;
$sql = new SQLHandler(); // kommt aus meiner klasse SQLHandler
$query_result = $sql->query($query_string);
$this->_query_string = $query_string;
$this->_num_entries = $sql->num_rows;
$this->_max_pages = ceil($this->_num_entries / $this->_entries_per_page);
}
function display_splitter_nav($url = '') {
// SCHAUEN OB PAGE EXISTIERT. WENN JA SCHAUEN OB PAGE MÖGLICH IST UND BEI KOMMASTELLE ABRUNDEN
$_GET['page'] && $_GET['page'] <= $this->_max_pages ? $page = floor($_GET['page']) : $page = '1';
// URL BERECHNEN UND GEGEBENENFALLS PAGE LÖSCHEN
if(empty($url)) $url = $_SERVER['REQUEST_URI'];
$url = preg_replace( "/([?&])page=([0-9]*)/", "", $url );
preg_match("/\?/", $url) ? $url = $url.'&' : $url = $url.'?';
echo 'url: '.$url;
// LIMIT PARAMETER BERECHNEN
$limit_start = $page * $this->_entries_per_page - $this->_entries_per_page;
$sql = new SQLHandler(); // kommt aus meiner klasse SQLHandler
$this->query_result = $sql->query($this->_query_string." LIMIT ".$limit_start.", ".$this->_entries_per_page, 1);
$output = '';
if($page != 1) $output.='[url="'.$url.'page='.($page - 1).'"]<<[/url]';
for($i = 1; $i <= $this->_max_pages; $i++) {
$i < $this->_max_pages ? $sep = '|' : $sep = '';
if($i == $page) {
$output.= '['.$i.']'.$sep;
} else {
$output.= '[url="'.$url.'page='.$i.'"]'.$i.'[/url]'.$sep;
}
}
if($page != $this->_max_pages) $output.= '[url="'.$url.'page='.($page + 1).'"]>>[/url]';
echo $output;
}
function display_full() {
// 1. ruft display_splitter_nav() auf
// 2. holt sich template
// 3. füllt template mit display_splitter_nav() an vorgesehener stelle und
// füllt die daten in das template (bilder oder was auch immer) mittels
// while schleife und mysql_fetch_object/assoc/array
// 4. gibt das ganze ding wieder
}
}
?>