vielen lieben DANK
hier eine version mit startartikel disabled in der sql und sortorder lastmodified auch hardcodiert in der sql
das ganze spilttet die navi je nach anzahl artikel geau wie grosse threads hier im board
Code: Alles auswählen
<?php
/**
* $Revision: 1.12 $
* $Source: D:/cvs/cvsrepo/test/PPI_Nade/module/pageTurning/output.php,v $
* $Date: 2005/11/29 18:36:15 $
*/
/**
* pageTurning
* @author Andreas Kummer
* modified by Stefan Seifarth 2006 - www.polycoder.de
* @copyright Copyright © 2005 w3concepts AG
*/
// include html element
cInclude("classes","class.htmlelements.php");
if (!class_exists('pageTurning')) {
class pageTurning {
/**
* Konstruktor der Klasse.
* @param String Ordnungsprinzip (sorted, alphabetical, created,
* modified).
* @param Boolean True = ASC, False = DESC
*/
function pageTurning($sortCriteria, $asc = true) {
global $client, $lang, $idcat, $cfg, $idart;
$this->client = $client;
$this->lang = $lang;
$this->idcat = $idcat;
$this->cfg = $cfg;
$this->idart = $idart;
$this->before('<div>');
$this->after('</div>');
$this->between(' | ');
$this->first('');
$this->last('');
$this->aClass('');
$this->aStyle('text-decoration:none;');
$this->aStyleSelected('font-weight:bold;');
$this->previousPage('<<<');
$this->nextPage('>>>');
$this->fullPages = 10;
$this->db = new DB_Contenido();
$this->readArticles($sortCriteria, $asc);
}
/**
* Setzt den Text für den ersten Eintrag.
* @param String Text für den ersten Eintrag.
*/
function first($text) {
$this->first = $text;
}
/**
* Setzt den Text für den letzten Eintrag.
* @param String Text für den letzten Eintrag.
*/
function last($text) {
$this->last = $text;
}
/**
* Setzt den HTML-Code, der vor der Blätteranzeige ausgegeben wird.
* @param String HTML-Code, der vor der Blätteranzeige ausgegen werden
* wird.
*/
function before($text) {
$this->before = $text;
}
/**
* Setzt den HTML-Code, der nach der Blätteranzeige ausgegeben werden
* wird.
* @param String HTML-Code, der nach der Blätteranzeige ausgegeben
* werden wird.
*/
function after($text) {
$this->after = $text;
}
/**
* Setzt den Text, der zwischen zwei Seitenzahlen ausgegeben werden
* @param Integer maximale Seitenanzahl ohne Leerschritte ( ... ) um
* zu lange Seitenliste zu verhindern
*/
function fullPages($pages) {
$this->fullPages = (int)$pages;
}
/**
* Setzt den Klassennamen, der für die Links zu verwenden ist.
* @param String Klassenname, der den Links zuzuordnen ist.
*/
function aClass($name) {
$this->aClass = $name;
}
function aStyle($style) {
$this->aStyle = $style;
}
function aStyleSelected($style) {
$this->aStyleSelected = $style;
}
function previousPage($text) {
$this->previousPage = $text;
}
function nextPage($text) {
$this->nextPage = $text;
}
/**
* Anzahl der Seiten ab wann Seitenzahlen ausgeblendet werden
* wird.
* @param String Text, der zwischen zwei Seitenzahlen ausgegeben werden
* wird.
*/
function between($text) {
$this->between = $text;
}
/**
* Liest die Artikel der aktuellen Kategorie ein.
* @param String Ordnungsprinzip.
* @param Boolean True = aufsteigend, False = absteigend
*/
function readArticles($sortCriteria, $asc) {
/*
* Ordnungsprinzip fest legen
*/
$order = ($asc) ? ('ASC') : ('DESC');
/*
* Sortierkriterium fest legen
*/
switch ($sortCriteria) {
case 'created':
$sortOrder = 'b.created '.$order;
break;
case 'modified':
$sortOrder = 'b.lastmodified '.$order;
break;
case 'sorted':
$sortOrder = 'b.artsort '.$order.', b.title '.$order;
break;
case 'alphabetical':
$sortOrder = 'b.title '.$order;
break;
default:
$sortOrder = 'b.created '.$order;
}
/*
* Absetzen des Queries.
*/
$this->db->query("" .
"SELECT " .
" b.idart " .
"FROM {$this->cfg['tab']['cat_art']} as a, " .
"{$this->cfg['tab']['cat_lang']} as c " .
"LEFT JOIN {$this->cfg['tab']['art_lang']} as b ON a.idart = b.idart " .
"WHERE " .
" a.idcat = {$this->idcat} " .
" AND b.idlang = {$this->lang} " .
" AND b.online = 1 " .
" AND a.idcat = c.idcat " .
" AND b.idartlang != c.startidartlang " .
"ORDER BY " .
" b.lastmodified DESC " .
"");
while ($this->db->next_record()) {
$this->articles[] = $this->db->f('idart');
}
}
/**
* Gibt die Blätterleiste an die Standardausgabe aus.
*/
function show() {
global $sess;
if (empty($this->articles) || count($this->articles) == 1) {
return false;
}
// initialisierung der HTML-API für Links
$oLink = new cHTMLLink();
/*
* Ermittlung der aktuellen Position
*/
$position = array_search ($this->idart,$this->articles);
/*
* Ausgabe Previous
*/
if ($position > 0) {
$previous = $position - 1;
// URL Settings
$oLink->setLink($sess->url('front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$previous].'&lang='.$this->lang.'&client='.$this->client ));
$oLink->setContent($this->previousPage);
$oLink->setClass($this->aClass);
echo $this->before.$oLink->toHTML().$this->between;
} else {
echo $this->before;
}
if ($this->first != '') {
/*
* Ausgabe Link auf die erste Seite
*/
$oLink->setLink($sess->url('front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[0].'&lang='.$this->lang.'&client='.$this->client ));
$oLink->setContent($this->first);
$oLink->setClass($this->aClass);
echo $oLink->toHTML();
}
$startPosition = ($this->first != '') ? (1) : (0);
$endPosition = ($this->last != '') ? (count($this->articles) - 1) : (count($this->articles));
// Wenn weniger als 10 Seiten dann alles komplett ausgeben
if ( $endPosition <= 10 ) {
for ($i = $startPosition; $i < $endPosition; $i++) {
$seite = $i + 1;
if ($i > 0) {
echo $this->between;
}
$style = $this->aStyle;
if ($i == $position) {
$style .= $this->aStyleSelected;
}
$oLink->setLink($sess->url('front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$i].'&lang='.$this->lang.'&client='.$this->client ));
$oLink->setContent($seite);
$oLink->setClass($this->aClass);
$oLink->setStyle($style);
echo $oLink->toHTML();
}
// Mehr als 10 Seiten, dann erste 3, letzte 3 sowie aktuelle Seite +/- 1
} else {
// Array für Zwischenpufferung
$arr_links = array();
for ($i = $startPosition; $i < $endPosition; $i++) {
// checke ob aktuelle seite im darstellungsbereich liegt
if ( $i <= ($startPosition + 2) ||
( $i == $position || $i == $position - 1 || $i == $position + 1 ) ||
$i >= ($endPosition - 3 )
) {
$seite = $i + 1;
$style = $this->aStyle;
if ($i == $position) {
$style .= $this->aStyleSelected;
}
$oLink->setLink($sess->url('front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$i].'&lang='.$this->lang.'&client='.$this->client ));
$oLink->setContent($seite);
$oLink->setClass($this->aClass);
$oLink->setStyle($style);
$arr_links[] = $oLink->toHTML();
} else {
// Hier soll nix drinn stehen
$arr_links[] = "[[empty]]";
}
}
// suche nach aufeinanderfolgenden leer feldern und entferne diese
$int_value = false;
for ( $i = 0; $i < count($arr_links); $i++) {
if ( $arr_links[$i] == "[[empty]]" && $int_value == false ) {
$int_value = true;
} else if ( $arr_links[$i] == "[[empty]]" && $int_value == true ) {
$arr_links[$i] = false;
} else if ($arr_links[$i] != "[[empty]]" && $int_value == true) {
$int_value = false;
}
}
$arr_links = array_filter($arr_links);
$str_navigation = implode($this->between, $arr_links);
//print $str_navigation;
echo str_replace("[[empty]]", " ... ", $str_navigation);
}
if ($this->last != '') {
/*
* Ausgabe Link auf die letzte Seite
*/
$oLink->setLink($sess->url('front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[count($this->articles)-1].'&lang='.$this->lang.'&client='.$this->client ));
$oLink->setContent($this->last);
$oLink->setClass($this->aClass);
echo $this->between.$oLink->toHTML();
}
/*
* Ausgabe Next
*/
if ($position < count($this->articles) - 1) {
$next = $position + 1;
$oLink->setLink($sess->url('front_content.php?idcat='.$this->idcat.'&idart='.$this->articles[$next].'&lang='.$this->lang.'&client='.$this->client ));
$oLink->setContent($this->nextPage);
$oLink->setStyle("dext-decoration:none");
echo $this->between.$oLink->toHTML().$this->after;
} else {
echo $this->after;
}
}
}
}
// Klasseninstantiierung
$pageTurning = new pageTurning('created');
// Angabe der zu verwendenden A-Klasse (für die Links)
$pageTurning->aClass('');
// Styleangabe für alle Links
$pageTurning->aStyle('text-decoration:underline;');
// Styleangabe für den aktuellen Artikel
$pageTurning->aStyleSelected('font-weight:bold; color:red;');
// Anzeige für vorige Seite
$pageTurning->previousPage('<<< ');
// Anzeige nächste Seite
$pageTurning->nextPage(' >>>');
// Alternativausgabe für die erste Seite (anstatt 1)
// $pageTurning->first(' FirstPage ');
// Alternativausgabe für die letzte Seite
// $pageTurning->last(' LastPage ');
// Ausgabe vor der Blätterleiste
$pageTurning->before('<div width="559px" align="center" style="padding:20px;" class="pageTurning">');
// Ausgabe zwischen zwei Seitenzahlen
$pageTurning->between(' ');
// Ausgabe nach der Blätterleiste
$pageTurning->after('</div>');
// Ausgabe an den Browser
$pageTurning->show();
?>