einen langen Text in mehrer Seiten unterteilen

Hallo,
du könntest es auch so machen:
PHP:
<?php
if(empty($_GET['seite'])) {
$seite = 1;
} else {
$seite = $_GET['seite'];
}
if(empty($_GET['start'])) {
$start = 0;
} else {
$start = $_GET['start'];
}
$proseite = 50;
$string = "Hier kommt irgendein langer Text hin. Es kann aber sein, dass du auf der Seite mehr hast, da es sein kann, dass das letzte Wort sehr lang ist.";
$seiten = ceil(strlen($string)/$proseite);
$array = explode(" ",$string);
$x = 0;
for($y=$start;$y<count($array);$y++) {
$anzahl += strlen($array[$y]);
$ausgabe .= $array[$y]." ";
$effektiv = $proseite - $x;
if($anzahl >= $effektiv) {
if($seite < $seiten) {
$anfang = $y+1;
$ns = $seite + 1;
$nsa = "<a href='?seite=".$ns."&start=".$anfang."'>n&auml;chste Seite</a>";
} else {
$nsa = "";
}
echo $ausgabe." ".$nsa;
break;
}
$x++;
if ($y == count($array)-1 ) {
echo $ausgabe;
}
}
?>

schiese
 
Zuletzt bearbeitet:
sorry Mamphil, es ist mir etwas unklar wo ich es hinpacken soll.
:confused:
In die letzte Zeile...
PHP:
echo "<hr /><p>Seite ".($page+1)."</p><p>".substr($str,$start,$pos)."</p>";
Es wird einfach nach dem nächsten Leerzeichen nach dem zu kopierenden Text gesucht und alles weitere bis dahin angefügt. Für den Anfang müsstest du ggf. dasselbe noch einmal machen...

Mamphil
 
Also so was:

PHP:
$str = "hier einen seeeeeeeehr langen text einfügen....";


$signs_per_page = "500";
$signs = strlen($str);
if (!is_numeric($_GET['page'])){
    $page = '0';
}else{
    $page = $_GET['page'];
}
$pages = round($signs / $signs_per_page)-1;

$start = $page * $signs_per_page;
$length = $signs_per_page;

for ($i=0; $i<=$pages; $i++){
    echo "<a href='?page=".$i."'>Seite ".($i+1)."</a>&nbsp;&nbsp;";
}

$i = strpos($str, ' ', $start + $length); //Position des ersten Leerschlages nach dem String welcher angezeigt werden soll.
$length = $lenght + ($i - $length); //Neue länge ermitteln

echo "<hr /><h2>Seite ".($page+1)."</h2>".substr($str,$start,$length)."<hr />";

Nicht getestet. Aber sollte so irgendwie gehen.
Man könnte das ganze jetzt noch erweitern, so das es nach dem nächswten ".", "!" oder "?" sucht. Also bis zu einem Satzende :)

MFG
X
 
Das einkürzen macht dein Code richtig, leider wiederholt er einen Teil des letzten Wortes auf der nächsten Seite.

:confused:

EDIT: Und die erste Seite ist Inhaltlich leer bzw. fehlerhaft


@schiese: ich habe es mal eingebaut, kannst hier mal nachsehen: http://webexil-linux.de/africa_for_real/tpage.php?tpage=257

es ist noch nicht perfekt. Die letzte Seite ist unvollstädig.
 
Zuletzt bearbeitet:
Hi!

...ein Versuch sei mir noch erlaubt: auch wenn ich darin keine Leuchte bin, mit einer Regular Expression:
PHP:
$text = "Hier mal wieder der Testtext. Diesmal über regular Expression gesplittet.";
$bps = 20; // min. Buchstaben pro Seite    
    
preg_match_all("/.{0,$bps}.+?\W/", $text, $seiten);
    
$seite = intval($_GET['seite']);
if ($seite < 1 || $seite > count($seiten[0]))
    $seite = 1;

echo $seiten[0][$seite-1];
...? ;)

Liebe Grüße,
Mark.

//edit: ups, wg. den Zeilenvorschüben benötigt die expression das s-Flag:
preg_match_all("/.{0,$bps}.+?\W/s", $text, $seiten);
 
@Mark

Kannst du mal erklären wie speziell dieses hier arbeitet?

PHP:
echo $seiten[0][$seite-1];

Habe Probleme daraus einen Link zu bauen und es zu erweitern

:)
 
Hi!

Im Array $seiten[0] stecken die einzelnen Seiten des "gespliteten Textes":
$seiten[0][0] liefert den ersten Text, $seiten[0][1] den zweiten, etc.
...ein Array startet dabei mit 0, die Seitenangabe aber bei 1 (finde ich persönlich zumindest "schöner") -> text.php?seite=1 ... statt text.php?seite=0
D.h. die übergebene Seitenzahl muß um 1 verringert werden:
$seiten[0][$seite-1]

...das ist also nur der Text, den Du z.B. mit:
PHP:
echo "<p>".$seiten[0][$seite-1]."</p>";
ausgeben kannst.

Links für die nächste oder vorherige Seite ließen sich z.B. mit
PHP:
if ($seite > 1)
    echo "<a href='text.php?seite=".($seite-1)."'>Vorherige Seite</a>&nbsp;";
echo "<b>Seite $seite</b>&nbsp;";
if ($seite < count($seiten[0]))
    echo "<a href='text.php?seite=".($seite+1)."'>Nächste Seite</a>&nbsp;";
realisieren...

...nun alles klar? :)

Liebe Grüße,
Mark.
 
Zurück