# "Seitenweise Blättern" (Probleme mit URL Verknüpfungen)



## girlie (1. Februar 2007)

Hi, 

ich probiere nun schon seit ca. 4 Monaten meine Homepage (im speziellen meine Gallery & News Sektionen) mit einer Seitenweise Blättern Funktion auszustatten, aber leider will mir das einfach nicht gelingen, zumindest nicht so wie ich mir das Ganze dann vorstelle. 
Ich habe ein vorgefertigtes Blättern-Script aus dem NET, das in allen Punkten (Funktionalität, Design) exakt meinen Wunschvorstellungen entspricht. 

Ich muss noch bemerken, dass ich ein absoluter Neuling auf dem Gebiet PHP bin (dies ist mein "erster" Versuch mit PHP, ansonsten kenne mich lediglich mit HTML einigermaßen gut aus) und deswegen bitte ich hier jetzt auch um eine PHP Starthilfe.

Ich habe die Daten, von allen meinen Gallery & News Seiten, mit folg. Inhalten: URL, URLNAME und Beschreibung in einer Datenbank (mysql) erstellt/angelegt. 

Jetzt zum Kern von meinem eigentlichen Problem:
Es geht darum, das meine HP stetig wächst u. wächst, sprich ständig kommen neue Seiten hinzu, u. bei jeder neu hinzugefügten Seite habe ich ja das Problem, dass ich ebenfalls "alle" anderen bisherigen Seiten halt auch entsprechend, bezüglich des Seiten-Navigation-(Wechseln)-Menüs, abändern muss. Bislang tat ich das immer von Hand  , aber das ist bei der Seitenvielzahl mittlerweile Streß pur.   

Also ich schaffe es via dem vorgefertigten Blättern-Script die einzelnen Daten (URL, URLNAME u. Beschreibung) aus meiner Datenbank auslesen u. anzeigen zu lassen (Offline, via XAMPP). Das ist dann aber auch schon alles was ich selber hinbekomme, aber es ist halt NICHT das was ich eigentlich benötige!

Eine Datensatz-Ausgabe benötige ich nämlich gar nicht! 
Vielmehr möchte ich, das die einzelnen Seitenzahlen (1, 2, 3, etc.) dieser Blättern-Funktion (sie soll später in alle meine Gallery/News Seiten "includiert" werden) verbunden sind mit meinen entsprechenden Gallery/News Seiten (sprich deren "URL´s" und die ja bereits in meiner Datenbank drinstehen) und das jene Seiten dann eben wiederum beim klick auf eine entsprechende Seitenzahl des Blättern-Menüs aufgerufen werden und folglich auch für den Besucher in Folge erscheinen. <-- und genau das zu realisieren, daran alleine scheitere ich! 

Habe in den letzten Monaten, beinahe täglich u. oft mehrere Stunden lang, Forum für Forum abgeklappert um einen Lösungsansatz zu finden, habe allg. PHP Tutorials, als auch spezifische "Seitenweise Blättern" Tutorials studiert, aber immer OHNE jeglichen Erfolg. Es wird dort immer nur erklärt wie man die "Datensatz-Ausgabe" realisiert (also das halt die Inhalte der Datenbank, in schriftlicher Form ausgegeben/angezeigt werden/erscheinen), jedoch NICHT wie man es realisieren kann lediglich die LINKS (URL´s) mit der jeweilig ausgegebenen Menü-Seitenzahlennummerierungen zu verknüpfen...

Hm, irgendwie denke ich, ist wohl jedes PHP Blättern-Script auch irgendwie ein UNIKAT für sich, oder? Weil: ich habe bestimmt mittlerweile so um die ca. 20-30 Blättern-Scripts aus dem NET ausprobiert, u. es bei einem davon sogar geschafft das da plötzlich die Verlinkung zu meinen Gallery Seiten so wie ich das möchte hinbekommen (allerdings u. unglücklicherweise war es das primitivste Script von allen denn es konnte weder "Eine Seite vorwärts"/"zur letzten Seite", noch "eine Seite rückwärst"/"zur Erste Seite" blättern, deshalb nützt es mir leider nichts), die Verbindung ging u.a. via diesem Code-Teil: 
echo " <a href=\"".$row["url"]."\">$b</a> "; // url als link ausgeben
(Da wurde mir logischerweise in der Browser Adresszeile auch die jeweils richtige Online-Adresse zu eine meiner Seiten angezeigt, ansonsten bekomme ich näml. immer nur ausnahmslos das hier zu sehen: http:// localhost / TEST_blaettern/blaettern1 (bzw 2,3,4 etc.).php)

Nun dachte ich OK, dann muß genau dieser Code ja auch in allen anderen Blättern-Scripten integrierbar sein u. funktionieren, aber nein, das geht nicht mal im Ansatz. Im nächsten Script hieß so ziemlich jeder Befehl gänzlichst anders... *grml* 

Ich hoffe ihr werdet aus meinen Schilderungen, bezügl. was ich eben konkret realisieren möchte, einigermaßen schlau(!?), weil es ist halt bißchen kompliziert das Ganze lediglich schriftlich, detailiert erläutern zu können...

*Zum noch besseren Verständnis hänge ich noch ein Pic mit an (siehe unten).*

So und abschließend natürlich noch das Wichtigste, näml. das Script das ich entsprechend umgebaut haben möchte. Es wäre echt cool wenn mir jemand dabei behilflich sein könnte.

Noch eine kleine Bitte: etwaige Erklärungen bitte so einfach wie möglich schildern, so das ich als gänzliche Anfängerin das dann auch halbwegs verstehen kann.


```
<?php 

$progname = "blaettern.php"; 
$daten_per_site = 1; 

if(isset($_GET['seite'])) {  
$seite = preg_replace ("/[^0-9]/", "",  $_GET['seite']); 
}  
// Startzahl 
if(!isset($seite) || $seite == '') { 
$seite = 1; 
} 

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 
# Datenbankdaten und Verbindung zur DB herstellen 
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 
# Datenbank
include("datenbank.php")
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 
?> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> 

<title>Seitenweise Anzeige von Daten</title> 

<style type="text/css"> 
body { 
background-color: #f7f7f7; 
font-family: Verdana, Arial; 
font-size: 11px; 
color: #000000; 
} 
.sitenav { 
background-color: #000066; 
} 
.sitenav td { 
background-color: #e9ebef; 
padding: 3px; 
font-size: 11px; 
text-align: center; 
} 
.sitenav td a { 
color: #990000; 
text-decoration: none; 
} 
.sitenav td a:hover { 
color: #000066; 
text-decoration: none; 
} 
</style> 

</head> 
<body> 

<?php 

# Limit fuer Query erstellen - Eintraege pro Seite  
$anz = ($seite-1) * $daten_per_site; 

$resultliste = mysql_query("SELECT SQL_CALC_FOUND_ROWS *, url FROM gallery_links LIMIT $anz, $daten_per_site"); 
$erg = mysql_query("SELECT FOUND_ROWS()"); 
$zeilen = mysql_fetch_row($erg); 

if ($zeilen[0] > 0) { 
$navigationslinks = sitenavi($zeilen[0], $seite, $daten_per_site, $progname); 


echo "$navigationslinks\n"; 
echo "<ul>\n"; 
while($daten= mysql_fetch_row ($resultliste)) { 

echo "<li>$daten[0] - $daten[1]</li>\n"; 

} 
echo "</ul>\n"; 
echo "$navigationslinks\n"; 


} else { 
echo "Keine Daten gefunden!\n"; 
} 

echo "</body>\n</html>\n"; 

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 
// Seitennavigation 
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 
function sitenavi($zeilen, $seite, $pro_seite, $url) { 

$max_ausgabe = $pro_seite; 
$gesamtseiten = ceil(($zeilen - 1) / $pro_seite+1); 

$aktuelle_seite = $seite ? $seite : 1; 
$linkanzahlausgabe = 2; 

$letzte = $linkanzahlausgabe + $aktuelle_seite; 
if ($letzte > $gesamtseiten) { 
$letzte = $gesamtseiten; 
} 

$startback = $aktuelle_seite - $linkanzahlausgabe; 
if ($startback < 1) { 
$startback = 1; 
} 

$navigationslinks = "&nbsp;"; 
if ($gesamtseiten != 1 && $zeilen) { 
$seitenlink = "TEST:"; 

if ($startback > 1) { 
$prevbl = $aktuelle_seite - 1; 
$seitenlink .=  "<td><a href=\"$url?seite=1\">« Erste Seite</a></td><td width=\"20\"> <a href=\"$url?seite=$prevbl\">&lt;</a> </td>"; 
} 

for ($i = $startback; $i <= $letzte; $i++) { 
if ($aktuelle_seite == "$i") { 
$seitenlink .= "<td width=\"20\" style=\"background-color: #ffffff\"><b>$i</b></td>"; 
} else { 
$seitenlink .= "<td width=\"20\"><a href=\"$url?seite=$i\">$i</a></td>"; 
} 
} 

if ($letzte < $gesamtseiten) { 
$nextbl = $aktuelle_seite + 1; 
$seitenlink .= "<td width=\"20\"> <a href=\"$url?seite=$nextbl\">&gt;</a> </td><td><a href=\"$url?seite=$gesamtseiten\">Letzte Seite »</a></td>"; 
} 
$navigationslinks = "<table cellspacing=\"1\" cellpadding=\"0\" border=\"0\" class=\"sitenav\"><tr><td>Seite: $aktuelle_seite von $gesamtseiten</td> $seitenlink</tr></table>"; 
} 

return $navigationslinks; 
} 
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 
?>
```

PS:
Hier im Forum ist übrigens nahezu die gleiche Blätterfunktion integriert sehe ich gerade...
Und auch hier habe ich wohl in den letzten Monaten so ziemlich alle Beiträge (~100-140 lol) zum Thema Blättern bereits studiert, u.a. auch diese beiden Tuts:

http://www.tutorials.de/forum/php-tutorials/257602-blaetterfunktion.html
http://www.tutorials.de/forum/php-t...on-mit-button-navigator-und-suchfunktion.html

Aber auch hier fand ich keinen Lösungsansatz wie ich meine Seitennummerierungen dazu bewegen kann sich mit den URL´s meiner einzelnen Seiten zu verknüpfen - oder verstehe ich das Ganze viell. nur nicht  

Bitte helft mir


----------



## Gumbo (1. Februar 2007)

Die meisten Blätterfunktionen sind tatsächlich an eine Datenbank gebunden, da es nur eine fortlaufende Seitennummerierung gibt. Auch der Algorithmus der meisten Blätterfunktion unterscheiden sich oft nicht groß, da viele zwar der Meinung sind, sich selbst eine Blätterfunktion schreiben zu müssen, aber im Endeffekt doch nur bei anderen abschreiben.

Wenn ich dich nun richtig verstanden habe, möchtest du „statische Seiten“ miteinander über die Blätterfunktion verknüpfen. Prinzipiell ist das möglich. Wenn du etwa alle Seiten in einem zentralen Array sammelst, können diese einfach nacheinander durchgegangen werden.


----------



## girlie (1. Februar 2007)

Gumbo hat gesagt.:


> Wenn ich dich nun richtig verstanden habe, möchtest du „statische Seiten“ miteinander über die Blätterfunktion verknüpfen. Prinzipiell ist das möglich. Wenn du etwa alle Seiten in einem zentralen Array sammelst, können diese einfach nacheinander durchgegangen werden.


Ja, so meine ich das. Kann ich mein obiges Script entsprechend abändern? Und falls "Ja", wie konkret muss ich das dann ändern? (Ich weiß zudem auch nicht wie ich so ein zentrales Array erstellen kann)


----------



## girlie (4. Februar 2007)

Hallo? Kann mir denn niemand weiterhelfen?


----------



## -GS-Master (4. Februar 2007)

Sei doch so gut und setz den Link zu deinem Script hier rein -.-
Möchte sehen wie weit du bis jetzt bist ... das mit den Seiten kann ich mir dann auch besser vorstellen -.- 

versuche mich jetzt im Lesen deines Romans :suspekt:


----------



## girlie (4. Februar 2007)

^Öhm, sorry - aber mein Script ist doch bereits vollständig in meinem Eröffnungspost integriert! Hast Du das etwa übersehen? *verdudstguckt*


----------



## -GS-Master (4. Februar 2007)

Nein meinte eigentlich im internet -.-
Deinen Code habe ich schon gesehen ...
Nur wenn ich es sehe dann fällt mir das ganze leichter ^^ vor allem das "rein"Denken in den code


----------



## girlie (4. Februar 2007)

Im Internet habe ich das doch noch gar nicht drin! Eben aus dem Grund, weil ich das mit dem Script ja nicht hinbekomme. Derzeit habe ich alles nur auf meinem PC (sprich das Script, meine div. Test Gallerie-Seiten, die Datenbank-Dateien etc.) und probiere/teste dort alles "offline" via XAMPP (inkl. mysql etc.)


----------



## girlie (10. Februar 2007)

Ich bin mittlerweile meinem Ziel leider noch keinen Schritt nähergekommen, verflixt. Aber irgendwie muss doch die von mir gewünschte Funktion realisierbar sein und zwar 'ohne' das man dazu gleich der kompletten PHP-Programmiersprache mächtig ist, denn in jedem Forum (inkl. diesem hier) u. auf allen Suchmaschinen-Seiten sehe ich doch genau, dass das was mir vorschwebt umzusetzen 100% machbar ist. Da mir in diesem Forum hier anscheinend ja aber niemand diesbezüglich weiterhelfen kann, mutmaße ich einmal das dann die Umprogrammierung meines Scriptes wohl doch eine kompliziertere 'Expertenangelegenheit' sein dürfte!?  

Da ich nun schon seit einigen 'Monaten' absolut erfolglos an der Sache rumtüftele, kehrt allmählich die große Verzweiflung bei mir ein - *seufz* Denn bislang habe ich immer alles was ich so für meine HP haben wollte, durch Hilfe aus dem Inet, auch irgendwie hinbekommen. Nur diese Blätterfunktion jetzt nicht <-> aber 'neiiin', ich will nicht ausgerechnet daran gänzlich scheitern! Ich denke irgendwo in der großen weiten Welt des WWW´s liegt bestimmt auch die Lösung für dieses Poblemchen bereit - nur wo? Aber da ich ja bereits soviele div. Foren etc. zum Thema Blätterfunktion durchforstet habe, bin ich selber diesbezüglich ratlos   Deshalb meine Frage: kennt von Euch jemand vielleicht noch ein gutes 'Experten'-Forum zum Thema das mich eventuell weiterbringen könnte? Der entsprechende Link dann dorthin wäre sehr nett...


----------



## Gumbo (10. Februar 2007)

Hier ein einfaches Beispiel meines Vorschlags:
	
	
	



```
$array = array(
	'/foo',
	'/bar',
	…
);

$_GET['seite'] = !empty($_GET['seite']) ? abs(intval($_GET['seite'])) : 1;
if( isset($array[$_GET['seite']-1]) ) {
	include $array[$_GET['seite']-1];
}

if( isset($array[$_GET['seite']-2]) ) {
	echo '<a href="?seite='.($_GET['seite']-2).'">vorherige Seite</a>';
}
foreach( $array as $key => $value ) {
	if( $key !== $_GET['seite'] ) {
		echo '<a href="?seite='.$key.'">Seite '.$key.'</a>';
	} else {
		echo $key;
	}
}
if( isset($array[$_GET['seite']]) ) {
	echo '<a href="?seite='.($_GET['seite']).'">nächste Seite</a>';
}
```


----------



## Clemens (10. Februar 2007)

Servus!

Also so ganz hab ich das glaub ich noch net verstanden... drum versuch ich´s mal kurz mit meinen Worten...

Ist
- die Seiten werden per Hand erstellt... z.B. (seite1.php seite2.php... seite.php)
- die Navigation wird per Hand um die neue Seite (...seite(n+1).php...) erweitert

Soll
- Erstellung der neuen Seite -> dynamische Erweiterung der Navigation um diesen Link

Stimmt des so?

vg Clemens

PS: Bin wohl a weng langsam heut... so wie der vorherige Post hätt ich mir das dann auch vorgestellt. Man könnt auch das betreffende Verzeichnis in $array einlesen, dann hat man ja auch die Gesamtanzahl... und dann durch iterieren mit seite_1... seite_2 usw...


----------



## girlie (11. Februar 2007)

@Gumbo 
Hm, ich wollte den Code von Dir gerade mal in XAMPP testen, aber ich bekomme lediglich nur folg. Fehlermeldung ausgegeben (und ich habe keine Ahnung was ich diesbezüglich ändern muss):
Parse error: parse error, unexpected ')', expecting T_STRING or T_VARIABLE or '$' in F:\\XAMPP\htdocs\TEST_blaettern_2\test.php on line 12

In Zeile 12 steht lediglich das hier:
);



@Clemens


> Also so ganz hab ich das glaub ich noch net verstanden... drum versuch ich´s mal kurz mit meinen Worten...
> 
> Ist
> - die Seiten werden per Hand erstellt... z.B. (seite1.php seite2.php... seite.php)
> ...


Ja, das stimmt so!

Kannst Du mir bitte detailierter erklären wie ich das mit dem "$array einlesen" machen müßte?


----------



## Dr Dau (11. Februar 2007)

Hallo!


girlie hat gesagt.:


> @Gumbo
> Hm, ich wollte den Code von Dir gerade mal in XAMPP testen.....


Per Copy&Paste?
Dann schaue Dir das Array nochmal genauer an. 

Gruss Dr Dau


----------



## Gumbo (11. Februar 2007)

Fehler sind natürlich nie auszuschließen. Das „&#8230;“ sollte übrigens eine horizontale Ellipse („…“) werden.


----------



## Clemens (11. Februar 2007)

Guddn abend!

Dann würd ich des IMHO so machen


```
if ($handle = opendir('.')) {	   
	   // Verzeichnis durchgehen und Array $alleDateien mit den Dateinamen füllen
		while (false !== ($datei = readdir($handle))) {   
			// Alle Dateien einlesen ausser den vom 'include' Script
			if ( $datei != "." && $datei != ".." && $datei != "foo.nav.inc.php") {		       
				$alleDateien[] = $datei;
			}
		}
	   closedir($handle);
	}
			
	
	// aktueller Dateiname
	$dateiname = end( explode ("/", $_SERVER['PHP_SELF'] ) );
	
	// aktuelle Arrayposition
	$position = array_search($dateiname, $alleDateien );
	
	// Sind wir noch am Anfang? Nein, dann gib das aus...
	if ( $dateiname != reset ( $alleDateien )  ) {
		echo '<a href="'.$alleDateien[ $position - 1 ].'">zurück</a> ';
	}
	
	// alle Links ausgeben... den aktuellen FETT
	foreach( $alleDateien as $key => $value ) {
		$bold = ( $dateiname == $value ) ? "style='font-weight:bold'" : "";
		echo '<a href="'.$value.'" '.$bold.'>Seite '.($key + 1).'</a> ';
	}
	
	// Sind wir noch nicht am Ende?  Nein, dann gib das aus...
	if ( $dateiname != end ( $alleDateien )  )
		echo '<a href="'.$alleDateien[ $position + 1 ].'">vor</a> ';
```

oder man nimmt ein assoziatives Array, das man von Hand erweitert. Dafür kann man aber den Seiten andere Namen geben, anstatt sie einfach nur zu nummerieren...


```
$alleDateien = array (
		"foo_1.php" => "Ich bin der erste!",
		"foo_2.php" => "Zweiter",
		"foo_3.php" => "Letzter :-("
		 );
		 
	$schluessel = array_keys($alleDateien);
	
	// aktueller Dateiname
	$dateiname = end( explode ("/", $_SERVER['PHP_SELF'] ) );
	
	// aktuelle Arrayposition
	$position = array_search($dateiname, $schluessel );
	
	// Sind wir noch am Anfang? Nein, dann gib das aus...
	if ( $dateiname != reset ( $schluessel )  ) {
		echo '<a href="'.$schluessel[ $position - 1 ].'">zurück</a> ';
	}

	foreach( $alleDateien as $key => $value ) {
		$bold = ( $dateiname == $key ) ? "style='font-weight:bold'" : "";
		echo '<a href="'.$key.'" '.$bold.'>'.$value.'</a> ';
	}
	
		// Sind wir noch nicht am Ende?  Nein, dann gib das aus...
	if ( $dateiname != end ( $schluessel )  )
		echo '<a href="'.$schluessel[ $position + 1 ].'">vor</a> ';
```

vg Clemens


----------



## girlie (12. Februar 2007)

LOL, wenigstens habe ich die beiden Scripte von Clemens jetzt so einigermaßen verstehen können u. zwar vornehmlich auch nur wg. der noch zusätzl. eingebunden Funktionserklärungen. Thx. (das Ganze ist doch mein "1ter" PHP Programmierversuch überhaupt, u. da checke ich halt ohne viel zusätzlich Erklärungen ansonsten leider noch nicht allzuviel, sorry!) 

OK, mit diesen beiden Scripten würden jetzt also zumindest schon einmal die direkten Seitenaufrufe so funktionieren wie ich das haben möchte. 

Aber: wie bekomme ich das Ganze jetzt auch noch "haargenauso" mit bzw. in "meinem" Script aus meinem Eröffnungspost hin  weil das meinige Script eben noch etliche zusätzliche Funktionen hat, u. welche ich nun mal alle auch gerne haben möchte. 

Folgendes kann mein Script zusätzlich:

1.) "Zur ersten Seite" & "Zur letzten Seite"  (außer halt nur jeweils den "zurück" & "vor" Funktionen)

2.) es kann nur eine bestimmt festgelegte Seitennavigationsanzahl anzeigen, hier z.B. ist die max. Ausgabeanzahl auf "5" Links festgelegt (plus natürlich jeweils "eine Seite vor", "eine Seite zurück", "eine Seite weiter" u. "zur letzen Seite"): 

«Erste Seite <Eine Seite zurück  3 4 *5* 6 7 Eine Seite weiter>  Letzte Seite» 

und wenn man auf Seite "6" wechseln würde, da dann halt:

«Erste Seite <Eine Seite zurück  4 5 *6* 7 8 Eine Seite weiter> Letzte Seite»

etc.

3.) es zeigt jeweils immer im ersten Navigationsfeld auf welcher von wievielen Gesamt-Seiten man sich gerade befindet, z.B. so:
"Seite: 6 von 238" 

4.) Es macht automatisch immer, genau den Link der jeweiligen Seite auf der man sich gerade befindet "NICHT" anklickbar (weil das ja keinen Sinn ergeben würde)

5.) Es holt sich die URL´s zum verlinken direkt aus der Datenbank (Mysql, oder auch einer Text-Datenbank - u. beide Datenbank-Versionen habe ich bereits angelegt  _na ja, wenigstens etwas das ich inzwischen selber hinbekommen habe *freu*_)

6.) das komplette optische Außenrum-Design dafür ist bereits fertig


Öhm, meint Ihr das es irgendwie möglich ist mein Script konkret so Startklar zu bekommen? Und falls "ja", würde mir dann bitte jemand erneut dabei behilflich sein? (u. mit eventl. halt wieder "detaillierten" Schritt für Schritt Erklärungen, falls ich´s halt nicht gleich auf Anhieb kapieren sollte) Hm, Clemens, Du vielleicht erneut?  Das wäre echt cool...


----------

