PHP Blätterfunktion - Texte aufteilen
Autor
Flitze
Klicks 80291
Keywords:
PHP Blätterfunktion, Seitenzahlen Tutorial, Text, Aufteilen, in Seiten gliedern, Seitenzahlen
Klicks 80291
Rating für PHP Blätterfunktion
7.4 von 10
Bewertungen45
Stand
08.07.2010
7.4 von 10
Bewertungen45
Keywords:
PHP Blätterfunktion, Seitenzahlen Tutorial, Text, Aufteilen, in Seiten gliedern, Seitenzahlen
Breadcrumb:
Tutorials » PHP Blätterfunktion » PHP Blätterfunktion - Texte aufteilen
4. Lange Texte aufteilen
[ADSENSE_LINE]Beim Schreiben meiner Tutorials stieß ich schnell auf das Problem, dass die Texte sehr lang und ausführlich wurden und infolge dessen auch unübersichtlich und unangenehm zu lesen waren. Deshalb habe ich mir eine Möglichkeit überlegt, lange Texte an bestimmten Stellen zu trennen.
In diesem Fall habe ich nicht wie zuvor eine bestimmte Anzahl an Datensätzen oder Bildern, sondern eben nur die Gesamtlänge eines Textes. Die Seitenlänge könnte ich nun nach einer bestimmten Anzahl von Zeichen berechnen lassen.. aber irgendwie wäre das blödsinnig, weil ich ja meine Texte u.U. in bestimmte Abschnitte und Kapitel unterteilen will.
Deshalb habe ich mich für eine Lösung mittels REGEX entschieden. Ich habe einen [ page]-Tag entwickelt, der die anzuzeigende Seite umschließen muss. Ein Beispiel dazu:
[ page]Seite 1 Einleitung[ /page]
[ page]Seite 2 Hauptteil
mit etwas mehr Text[ /page]
[ page]Seite 3 Schluss[ /page]
daraus wird dann so etwas
Seite: 1 2 3
Seite 1 Einleitung
Seite: 1 2 3
Seite 2 Hauptteil
mit etwas mehr Text
Seite: 1 2 3
Seite 3 Schluss
Der Code dafür sieht folgendermaßen aus
PHP:
<?php
preg_match_all('#\[page\](.*)\[/page\]#Uis',$row['Inhalt'], $text);
$page = isset($_GET['page'])?(int)$_GET['page']:1;
if($page < 1)
$page = 1;
if($page > count($text[1]))
$page = count($text[1]);
echo "<p>\n".
"Seite : ";
for($i=1; $i<=count($text[1]); $i++){
if($i == $page)
echo $i." ";
else
echo "<a href=\"text.php?page=".$i."\">".$i."</a> ";
}
echo "</p>";
echo "<div>\n";
echo $text[1][$page-1];
echo "</div>\n";
echo "<table>\n";
echo " <tr>\n";
echo " <td style=\"text-align:left;\">\n";
// Befindet sich der User nicht auf der ersten Seite wird ein Zurück-Link angezeigt
if($page > 1)
echo "<a href=\"text.php&page=".($page-1)."\">« Zurück</a>\n";
else
echo " \n";
echo " </td>\n";
echo " <td style=\"text-align:right;\">\n";
// Befindet sich der User nicht auf der letzten Seite wird ein Weiter-Link angezeigt
if($page < count($text[1]))
echo "<a href=\"text.php?page=".($page+1)."\">Weiter »</a>\n";
else
echo " \n";
echo " </td>\n";
echo " </tr>\n";
echo "</table>";
?>
Der Regex matcht durch preg_match_all alles, was zwischen [ page]-Tags steht und speichert es in dem Array $text. $text[0] ist ein Array mit allen gefundenen Textpassagen, was zusätzlich noch die [ page]-Tags enthält. Da mich diese aber nicht interessieren, betrachte ich nur $text[1], in dem alle Textpassagen ohne die [ page]-Tags stehen.
PHP:
<?php
$page = isset($_GET['page'])?(int)$_GET['page']:1;
if($page < 1)
$page = 1;
if($page > count($text[1]))
$page = count($text[1]);
?>
Diese Struktur sollte aus den vorhergehenden Beschreibungen klar sein. Allerdings erkläre ich noch kurz, was es mit count($text[1]); auf sich hat.
Jedes Element dieses Arrays entspricht einer eigenen Seite, deshalb ist die maximale Seitenzahl gleich der Anzahl der Elemente des Arrays, oder anders gesagt
PHP:
<?php
count($text[1]);
?>
Die Anzeige der Seitenzahlen läuft folgendermaßen ab
PHP:
<?php
for($i=1; $i<=count($text[1]); $i++){
if($i == $page)
echo $i." ";
else
echo "<a href=\"text.php?page=".$i."\">".$i."</a> ";
}
?>
Sollte ebenfalls nicht kommentiert werden müssen, nachdem ich das oben schon 2 mal erklärt habe
Die Ausgabe des eigentlichen Seiteninhaltes ist auch sehr simpel, denn mehr als ein einfaches
PHP:
<?php
echo "<div>\n";
echo $text[1][$page-1];
echo "</div>\n";
?>
brauch man nicht. In diesem Fall habe ich keine extra Variable $offset erstellt, sondern gehe direkt auf den Index des Arrays. Und wie wir alle wissen, beginnt ein numerisches Array bei '0', weshalb Seite '1' auch mit dem Array-Index '0' aufgerufen werden muss
Als kleines Feature habe ich noch eine Navigation am Seitenende eingebaut, mit der man schnell zur vorigen oder nächsten Seite gelangt
PHP:
<?php
echo "<table>\n";
echo " <tr>\n";
echo " <td style=\"text-align:left;\">\n";
// Befindet sich der User nicht auf der ersten Seite wird ein Zurück-Link angezeigt
if($page > 1)
echo "<a href=\"text.php?page=".($page-1)."\">« Zurück</a>\n";
else
echo " \n";
echo " </td>\n";
echo " <td style=\"text-align:right;\">\n";
// Befindet sich der User nicht auf der letzten Seite wird ein Weiter-Link angezeigt
if($page < count($text[1]))
echo "<a href=\"text.php?page=".($page+1)."\">Weiter »</a>\n";
else
echo " \n";
echo " </td>\n";
echo " </tr>\n";
echo "</table>";
?>
Diese Ausgabe erfolgt unter dem Inhalt, sodass man am Ende der Seite gleich weiterlesen kann, ohne nach oben scrollen zu müssen. Wie zuvor erwähnt, nutze ich diese Technik für meine Tutorials
Zurück zur vorigen Seite:
PHP Blätterfunktion - Eine Bildergalerie Bewerten