hi,
Sorry, aber ich muss einfach nochmal nachhaken, da mir das, was ich in der Klasse treibe, zu haarsträubend ist; inneinander verschachtelte str_replace und direkter zugriff auf $this-Variablen, statt die Variablen für die Funktionen mittels Parameter zu übergeben.
Es funktioniert Tadellos, nur ist das noch Sauber und soll ich auf diese Weise weitermachen?
Das Bsp. ist ohne Fehlerbehandlung, da ich es erst einmal anteste und es derzeit keine Fehler gibt.
<?php
error_reporting(E_ALL | E_STRICT);
header('Content-Type: text/html; charset=utf-8');
$_sDir = dirname(__FILE__) . '/';
$_msg = simplexml_load_file($_sDir . '[link:http://dj-tut.de/z_test/class/script-inc/i18n.xml@title=script-inc/i18n.xml]'); // auf das wesentliche gekürzt
$setting = array(); // Settings initialisieren
$setting['prefix'] = 'page'; // GET-Präfix
$setting['perpage'] = 15; // Dateien pro Seite
$setting['total_data'] = 452; // Daten gesamt
$setting['language'] = 'de'; // Sprache
$setting['msg'] = $_msg->$setting['language']; // XML mit passender Sprachsektion
$setting['getsite'] = get_numeric($setting['prefix']) ? $_GET[$setting['prefix']] : 1 ; // $_GET['page']
class Pagination_builder
{
public function __construct($param) {
$this->msg = $param['msg']->pagination; // XML-Datei, direkt auf die gewünschte Sektion
$this->total_data = $param['total_data'];
$this->perpage = $param['perpage'];
$this->getsite = $param['getsite'];
$this->total_pages = $this->calculate_pages();
$this->pagefromto = $this->head_data();
}
/* Gesamte Seitenanzahl berechnen
* @param: Dateien gesamt
* @param: Dateien pro Seite
*/
private function calculate_pages() {
return ceil($this->total_data / $this->perpage);
}
/* Ersetzt in den Strings aus der XML-Datei die Platzhalter
* [b] mit <strong>
* [/b] mit </strong>
*/
private function temp_replace($str) {
return str_replace('[/b]', "</strong>", str_replace('[b]', "<strong>", $str));
}
/* Der erste Block in Head-Data (in diesem Fall: Seite X von Y)
* Ab hier wird es Wild
* Erst wird die Funktion temp_replace aufgerufen, in dieser ersetze ich einen String
* aus der XML-Datei mit den Werten $_GET['page'],
* aber nur, wenn $_GET kleiner ist als die Gesamte Seitenanzahl
*/
private function head_data() {
return $this->temp_replace( sprintf($this->msg->pagefromto /* String aus der XML-File*/
,$this->getsite < $this->total_pages+1 && $this->getsite > 0
? $this->getsite /* $_GET ist kleiner als Gesamte Seitenanzahl */
: 1
, $this->total_pages));
}
}
/*
* Objekt erzeugen und anschliessend aufrufen
*/
$_pagination = new Pagination_builder($setting);
echo $_pagination->pagefromto; // Ausgabe bei [link:http://dj-tut.de/z_test/class/?page=2@title=($_GET['page'\]==2)]: Seite 2 von 31
/*
* $_GET prüfen, ob nur zahlen enthalten sind
*/
function get_numeric($key) {
return (isset($_GET[$key]) AND is_numeric($_GET[$key])) ? $_GET[$key] : false ;
}
Ist der Ansatz so Ok?
mfg